【画像処理】一次微分フィルタの原理・特徴・計算式

この記事では、画像処理における1次微分フィルタの原理や特徴、計算式についてまとめました。

一次微分フィルタ

一次微分フィルタは、画像から輪郭を抽出する空間フィルタです。
一次微分を計算することで、注目画素の左右・上下の画素値の変化の傾きが求まります。
画像の輪郭は画素値の変化が大きいため、微分した画素値が大きい箇所が輪郭となります。

■入力画像(左)、出力画像(右)

出力画像を見ると、輪郭の部分が白くなっている、つまり画素値が大きいことがわかります。

一次微分フィルタのカーネル

注目画素I(x, y)の水平方向、および垂直方向それぞれの一次微分I_{x}(x, y), I_{y}(x, y)は次のようになります。

(1) \begin{eqnarray*} I_{x}(x, y)=I(x+1,y)-I(x, y)\\ I_{y}(x, y)=I(x, y+1)-I(x, y) \end{eqnarray*}

よって、一次微分フィルタの水平方向微分のカーネルK_x、および垂直方向微分に用いるカーネルK_yは次のようになります。

(2) \begin{eqnarray*} K_x= \left[ \begin{array}{ccc} 0 & 0 & 0 \\ 0 & -1 & 1 \\ 0 & 0 & 0 \\ \end{array} \right], K_y= \left[ \begin{array}{ccc} 0 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 1 & 0 \\ \end{array} \right] \end{eqnarray*}

ただし、このやり方だと、実際には二つの画素の中間における微分値(I_{x}(x+0.5, y), I_{y}(x, y+0.5))となってしまいます。
そこで、注目画素の両端の画素値の差分を計算することで、注目画素の位置に合わせる方法もあります。

(3) \begin{eqnarray*} I_{x}(x, y)=I(x+1,y)-I(x-1, y)\\ I_{y}(x, y)=I(x, y+1)-I(x, y-1) \end{eqnarray*}

このとき、水平方向微分のカーネルK_x、および垂直方向微分に用いるカーネルK_yは次のようになります。

(4) \begin{eqnarray*} 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] \end{eqnarray*}

尚、水平方向微分では縦方向の輪郭を取り出すことができます。
逆に垂直方向微分では横方向の輪郭を取り出します。

計算例(例題)

入力画像Iと一次微分フィルタ(垂直方向微分)のカーネルKが次のように与えられたとき、出力画像I'を求めよ。

(5) \begin{eqnarray*} I= \left[ \begin{array}{ccccc} 0 & 0 & 0 &  0\\ 0& 10 & 10 &  0\\ 0&   0 & 10 &  0\\ 0 & 0 & 0 &  0\\ \end{array} \right], K= \left[ \begin{array}{ccccc} 0 & -1 & 0\\ 0 & 0  & 0\\ 0 & 1  & 0\\ \end{array} \right] \end{eqnarray*}

出力画像の計算

入力画像IとカーネルK畳み込み演算してやると

(6) \begin{eqnarray*} I'(1,1)&=&0\\ I'(2,1)&=&1\cdot 10=10\\ I'(1,2)&=&(-1\cdot 10)=-10\\ I'(2,2)&=&(-1\cdot 10)=-10\\ \end{eqnarray*}

となります。今回、入力画像の端の画素値は0とします。
また、0未満の画素値は0とします。

すると、出力画像I'は次のようになります。

(7) \begin{eqnarray*} I'= \left[ \begin{array}{ccccc} 0 & 0 & 0 &  0\\ 0& 0 & 10 &  0\\ 0& 0 & 0 &  0\\ 0 & 0 & 0 &  0\\ \end{array} \right] \end{eqnarray*}

【関連記事】
【画像処理入門】アルゴリズム&プログラミング

シェア&フォローお願いします!