画像処理におけるPrewitt filter(プレヴィットフィルタ)の原理や特徴、計算式についてまとめました。
Prewittフィルタとは
Prewitt filter(プレヴィットフィルタ)は、画像から輪郭を抽出する空間フィルタの1つです。
このフィルタは、前回解説した「一次微分フィルタ」に対して、平滑化処理を加えることでノイズの影響を受けにくいのが特徴です。ちなみに、プレヴィットフィルタを更に改良したものとしてソーベルフィルタ(Sobel filter)というものもあります。
■入力画像(左)、出力画像(右)
出力画像を見ると、輪郭の部分が白くなっています。
出力画像の白い部分は、画素値が大きい、つまり一次微分を計算したときに画素値の変化が大きいところとなります。
(例:背景とヘルメットの境界など)
解説動画
Prewittフィルタのカーネル
前回の記事「【画像処理】一次微分フィルタの原理・特徴・計算式」では、一次微分フィルタについて紹介しました。
一次微分フィルタにおける、水平方向微分のカーネル$K_x$、および垂直方向微分のカーネル$K_y$は次の通りです。
$$K_x= \left[ \begin{array}{ccc} 0 & 0 & 0 \\ -1 & 0 & 1 \\ 0 & 0 & 0 \end{array} \right], K_y= \left[ \begin{array}{ccc} 0 & -1 & 0 \\ 0 & 0 & 0 \\ 0 & 1 & 0 \end{array} \right]$$
一次微分フィルタのカーネルに単純な平滑化処理(ぼかし)を加えると、次のようになります。
$$K_x= \left[ \begin{array}{ccc} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{array} \right], K_y= \left[ \begin{array}{ccc} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{array} \right]$$
これがプレヴィットフィルタのカーネルとなります。一次微分フィルタよりも広い領域に対して重み付けを行うことで、ノイズが平均化されるため、結果的にノイズの影響が軽減されます。水平方向微分では縦方向の輪郭を取り出すことができます。逆に、垂直方向微分では横方向の輪郭を取り出します。入力画像$I$とカーネル$K_x$および$K_y$を使用して、輪郭検出を行います。垂直方向および水平方向の輪郭画像$I_x(x, y)$および$I_y(x, y)$は次のように計算されます。
$$I_x(x, y) = I(x, y) \ast K_x\\ I_y(x, y) = I(x, y) \ast K_y$$
ここで、$\ast$は畳み込み演算を示します。
最後に、縦方向に検出された輪郭画像の画素値を$I_{x}(x, y)$、横方向に検出された輪郭画像の画素値を$I_{y}(x, y)$とすると、縦横両方向の輪郭画像の画素値$I'(x, y)$は、次式で計算できます(二乗和平方根)。
$$I'(x, y) = \sqrt{I_{x}(x, y)^2 + I_{y}(x, y)^2}$$
プレヴィットフィルタの計算例
入力画像$I$とプレヴィットフィルタ(垂直方向微分)のカーネル$K$が次のように与えられたとき、出力画像$I’$を求めよ。
$$I= \left[ \begin{array}{cccc} 0 & 0 & 0 & 0 \\ 0 & 10 & 10 & 0 \\ 0 & 0 & 10 & 0 \\ 0 & 0 & 0 & 0 \end{array} \right], K= \left[ \begin{array}{cccc} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{array} \right]$$
解説
入力画像$I$とカーネル$K$を畳み込み演算してやると
$$I'(1,1)=1\cdot 10=10\\ I'(2,1)=1\cdot 10=10\\ I'(1,2)=(-1\cdot 10)+(-1\cdot 10)=-20\\ I'(2,2)=(-1\cdot 10)+(-1\cdot 10)=-20$$
となります。端の画素値は0、0未満の画素値は0とすると、出力画像$I’$は次のようになります。
$$I’= \left[ \begin{array}{cccc} 0 & 0 & 0 & 0 \\ 0 & 10 & 10 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array} \right]$$
関連ページ


コメント