この記事では、画像処理におけるソーベルフィルタ(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#】ソーベルフィルタで画像のぼかし(ノイズ除去) |
まとめ | ■【画像処理入門】アルゴリズム&プログラミング |
コメント