概要
画像処理におけるエッジ検出について解説し、微分フィルタ、Prewitt フィルタ、Sobel フィルタの OpenCV での実装例を紹介します。
エッジ検出
画像 (以下、グレースケール画像とする) の輝度が鋭敏に変化している箇所をエッジ (edge) といい、エッジを特定する手法をエッジ検出 といいます。
画像の微分
画像 (以下、グレースケールとする) は各画素 (x,y) が輝度値 f(x,y) を持つ離散的な2次元関数とみることができます。
各画素における微分係数を求めることで、その値が大きい画素は輝度が鋭敏に変化している箇所とわかります。
ただし、関数 f は離散型であり、微分は定義されないため、差分法により近似的に微分係数を求めます。
以下では基本的な前進差分近似、後退差分近似、中心差分近似の3つを紹介します。
微分フィルタ
x 方向
x に関する偏微分係数の近似 (h=1 とした場合)
前進差分近似
fx(x,y)=hf(x+h,y)–f(x,y)=f(x+1,y)–f(x,y)=f(x,y)⋅(−1)+f(x+1,y)⋅1後退差分近似
fx(x,y)=hf(x,y)–f(x–h,y)=f(x,y)–f(x–1,y)=f(x–1,y)⋅(−1)+f(x,y)⋅1中心差分近似
fx(x,y)=2hf(x+h,y)–f(x–h,y)=21(f(x+1,y)–f(x–1,y))=21(f(x–1,y)⋅(−1)+f(x+1,y)⋅1)(3, 3) の2次元畳み込みで表すと
y 方向
y に関する偏微分係数の近似 (h=1 とした場合)
前進差分近似
fy(x,y)=hf(x,y+h)–f(x,y)=f(x,y+1)–f(x,y)=f(x,y)⋅(−1)+f(x,y+1)⋅1後退差分近似
fy(x,y)=hf(x,y)–f(x,y–h)=f(x,y)–f(x,y–1)=f(x,y–1)⋅(−1)+f(x,y)⋅1中心差分近似
fy(x,y)=2hf(x,y+h)–f(x,y–h)=2hf(x,y+1)–f(x,y–1)=21(f(x,y–1)⋅(−1)+f(x,y+1)⋅1)(3, 3) の2次元畳み込みで表すと
Prewitt フィルタ
微分フィルタはノイズの影響を受けやすいので、周囲の微分係数も計算し、平均をとるように改良した次のフィルタを Prewitt フィルタという。
x 方向
対象の画素及びその上下の画素の微分係数の平均をとります。
31(fx(x–1,y)+fx(x,y)+fx(x+1,y))y 方向
対象の画素及びその左右の画素の微分係数の平均をとります。
31(fy(x,y–1)+fy(x,y)+fy(x,y+1))
Sobel フィルタ
対象の画素と周囲の画素の重み付けを同じにすることで、対象の画素をより重視する次のフィルタを Sobel フィルタという。
x 方向
対象の画素及びその上下の画素の微分係数の平均をとる。
41(fx(x–1,y)+2fx(x,y)+fx(x+1,y))y 方向
対象の画素及びその左右の画素の微分係数の平均をとる。
41(fxy(x,y–1)+2fy(x,y)+fy(x,y+1))
参考文献
コメント