この記事では、画像処理におけるソーベルフィルタ(Sobel filter)の原理や計算式についてまとめました。
【はじめに】ソーベルフィルタとは
ソーベルフィルタ(Sobel filter)は、輪郭検出に用いられる空間フィルタです。
ソーベルフィルタは、プレウィットフィルタ(Prewitt filter)を改良したものです。
プレウィットフィルタは「平滑化フィルタ」と「微分フィルタ」を組み合わせることで、ノイズの影響を抑えながら輪郭を抽出します。
その平滑化フィルタをかける際に「注目画素との距離に応じて重み付けを変化させた」ものがソーベルフィルタです。
これにより自然に平滑化を行うことが出来ます。
■入力画像(左)、出力画像(右)
出力画像を見ると、輪郭の部分が白くなっている、つまり画素値が大きいことがわかります。
【カーネル】ソーベルフィルタ
ソーベルフィルタにおける、水平方向の輪郭検出に用いるカーネル、および垂直方向の輪郭検出に用いるカーネル
は次の通りです。
(周囲1近傍の場合)
(1)
カーネルの原理
なぜソーベルフィルタのカーネルが(1)式になるのか簡単に紹介します。
冒頭でも述べましたが、プレウィットフィルタの改良型がソーベルフィルタです。
プレウィットフィルタにおける水平方向微分のカーネル、および垂直方向微分のカーネル
は次の通りです。
(周囲1近傍の場合)
(2)
ここで、平滑化処理の重みを注目画素との距離に応じて変化させます。
ソーベルフィルタでは、注目画素と上下に隣接する場合は2、そうでない場合は1の重みを与えます。
重みを与えられたカーネルは次のようになります。
(3)
これがソーベルフィルタのカーネルとなります。
尚、水平方向微分では縦方向の輪郭を取り出すことができます。
逆に垂直方向微分では横方向の輪郭を取り出します。
【計算例】例題
入力画像とソーベルフィルタ(垂直方向微分)のカーネル
が次のように与えられたとき、出力画像
を求めよ。
(4)
解説
入力画像とカーネル
を畳み込み演算してやると
(5)
となります。今回、入力画像の端の画素値は0とします。
また、0未満の画素値は0とします。
すると、出力画像は次のようになります。
(6)
プログラミングで実装
プログラミングによる実装例について下記に整理しました。
言語 | 解説記事 |
---|---|
Python | ■【Python/OpenCV】ソーベルフィルタでぼかし・平滑化 |
C# | ■【C#】ソーベルフィルタで画像のぼかし(ノイズ除去) |
まとめ | ■【画像処理入門】アルゴリズム&プログラミング |
コメント