画像処理の試み 一次差分法でエッジ検出にもっとも基本的なエッジ検出方として一次差分法を紹介しました。右の図に示されたように、素描のような影が出て悪くない感じですね。用途によっては、これ結果は良いでしょう。でも、エッジ検出の観点から見れば、この結果はあまりいいとは言えません。頬と額のエリアに注目してみましょう。頬と額はかなり黒塗りされています。その黒さは全部エッジの誤認です。誤認の原因は、原始画像は一見滑らかに色が変化しているように見えても、実際に局部の画像を拡大して見れば、多くのでこぼこは見れます。一次差分法はこのでこぼこを明暗の差として認識し、エッジとしました。一次差分が頻繁の名鑑変化を広いスケールで見れず、画素の組み合わせは安易に明暗変化として認識してしまう。この性質は人間の目と大きい違いがあります。この問題を解消した炒め、よく使用される方法は、エッジ検出の前に何らかの方法でスムージングをかけます。
一次差分の問題点を具体的に見てみましょう。
\(y_1(n)=x(n)-x(n-1)\) (1)
\(y_2(n)=x(n)-x(n-2)\) (2)
(1)はもっとも基本的な一次差分です。図1からは高周波では反応が強いです。これがあのでこぼこの原因です。(2)はよくある改善法として、高周波数においては、応答は落ちます。これによって所謂高周波ノイズの影響は小さくなります。Sobel法は(2)を使用しています。でもこれだけではありません。
画像は縦と横の二方向あります。一方向で差分を検出している時に、もう一方向のデータにあまり影響されては困る。このため、Sobel法は一方で差分をしている同時に、もう一方ではスムージングを行います。スムージングの方法はガウススムージングの整数バージョンです。つまり、二項式の係数を使用します。このやり方は不思議かも知れませんが、実際に数字のスケールだけが番って、値間の倍数で考えればまったく同じく見えます。実例で見ましょう。
図2に、緑と赤の2本の曲線があります。ほぼ完全に重なっていますね。赤い方はガウスで緑の方は二項式係数です。二項式係数使用しますと、複雑な指数関数を使用しなくともガウス同等な効果を得られます。ただ一点だけを注意する必要があります。二項式が長すぎると係数が大き過ぎになり、オーバーフローが発生します。ある基準によると、ガウスは最良な画像スムージング法とも言われます。周波数応答は下の図3に記されます。
この周波数応答の形状はまさにガウスその物です。はっきりとローパスフィルターが映っています。
縦方向のエッジを検出するためのSobelテンプレート下記のような行列です。横方向のエッジを検出するためのSobelテンプレートは縦方向の転置です。
\(
\left[
\begin{array}{rrrrrrrrr}
{1} & {6} & {14} & {14} & {0} & {-14} & {-14} & {-6} & {-1}\\
{8} & {48} & {112} & {112} & {0} & {-112} & {-112} & {-48} & {-8}\\
{28} & {168} & {392} & {392} & {0} & {-392} & {-392} & {-168} & {-28}\\
{56} & {336} & {784} & {784} & {0} & {-784} & {-784} & {-336} & {-56}\\
{70} & {420} & {980} & {980} & {0} & {-980} & {-980} & {-420} & {-70}\\
{56} & {336} & {784} & {784} & {0} & {-784} & {-784} & {-336} & {-56}\\
{28} & {168} & {392} & {392} & {0} & {-392} & {-392} & {-168} & {-28}\\
{8} & {48} & {112} & {112} & {0} & {-112} & {-112} & {-48} & {-8}\\
{1} & {6} & {14} & {14} & {0} & {-14} & {-14} & {-6} & {-1}
\end{array}
\right]
\)
縦と横両方の差を使用しますと、\(E=\sqrt{{E_x}^2+{E_y}^2}\)を差の大きさとして使用します。
以下は実際の結果を見てみましょう。
一次差分に比べてみれば、Sobel法の黒塗りは大分少なくなりました。テンプレートをもっと大きくすればもうちょっと綺麗にできます。