エッジ検出

エッジ検出とは

エッジ検出は、画像処理技術のひとつで、画像内にある物体のエッジを見つけるために用いられます。エッジは輝度の不連続性から検出することができ、物体の輪郭や特徴抽出画像のセグメンテーション(領域分割)等の画像解析に使われます。エッジ検出は車道における白線検出や部品の輪郭抽出、また検査位置の検出等、画像処理、コンピュータビジョン、マシンビジョンの分野における様々なアプリケーションで活用されています。

エッジ検出による車体や白線の検出

細胞のエッジ検出

エッジ検出の活用例

エッジ検出は前処理として様々な画像処理技術と組み合わせて使用することができます。例えば、下の画像はある細胞のセグメンテーションをエッジ検出とモルフォロジー処理を組み合わせて行った例になります。細胞と背景の画素値が近い為、単純な閾値を用いた二値化では領域分割がうまくいきませんが、エッジ検出を前処理として活用することでモルフォロジー処理が有効に働き、最終的に細胞の領域分割をうまく行えています。

エッジ検出を用いた細胞のセグメンテーション

また、次のハフ変換による円検出を行った例では、エッジ検出の前処理を加えることで物体を強調することができ、入力画像に対してそのまま円検出を行うよりも検出率を高められています。

エッジ検出を活用した円検出

エッジ検出は2次元画像だけでなく3次元のボリュームデータに対しても行うことも可能です。次の画像はMRIボリュームデータに対してエッジ検出を行った結果を、複数枚に分割して並べたものになります。

3次元ボリュームデータに対するエッジ検出

エッジ検出の原理

エッジ検出には主に一次微分を使った勾配法と二次微分を使ったラプラシアン法があります。ある画素値の変化に対するエッジ検出を考えた場合、勾配法では一次微分を行ったあとの極大値や極小値に注目することでエッジを検出することができます。ラプラシアン法を用いた場合は二次微分を行い、その変曲点(ゼロクロッシング)をエッジとして検出することができます。

画素値の変化に対する一次微分と二次微分

実際の画像データはピクセル単位の離散的な位置情報をもった行列として表現されます。画像データにおける微分操作はあるピクセルに対して隣接するピクセルとの画素差をとることで実現され、これを全画素に行うことで微分画像を得ることができます。この操作は微分フィルターと呼ばれる行列(オペレータ、カーネルと呼ばれることもあります)と対象となる画像データとの畳み込み演算を行うことで得られます。微分フィルターには前進差分、後退差分、中心差分などがあります。

微分フィルターの例

勾配法の使った場合、単に隣接画素との変化が大きい箇所をエッジとしてしまうと、画像中に含まれるノイズもエッジとして誤検出してしまう恐れがあります。この影響を軽減させるために平滑化処理を行います。例えば、横方向にエッジ検出を行いたい場合は横方向に微分操作を行いますが、このとき縦方向へは平滑化を行うことでノイズの影響を低減させます。この結果、縦方向の  エッジを検出するフィルターとして働きます。実際の微分操作と平滑化は別々に行われるのではなく、微分フィルターと平滑化フィルターの畳み込み演算で得られるエッジ検出用フィルターを使って同時に行われます。

エッジ検出用フィルターの導出例

最終的なエッジは、勾配の大きさ(各々の向きの勾配の二乗平均)に対し、設定した閾値で二値化を行うことで得られます。このため、適切なエッジ検出のためには画像に応じた適切な閾値を設定する必要があります。

勾配法によるエッジ検出処理

ラプラシアン法では、二次微分を行った結果に対しゼロクロッシング点を見つけることでエッジを検出します。二次微分は対象の画像と微分フィルターとの畳み込み演算を二回行うことで得られますが、一次微分フィルター同士を畳み込むことで得られる二次微分フィルターを使うことで、一度の操作で同じ結果を得ることができます。さらに、縦方向と横方向に対する各々の二次微分フィルターを足し合わせたものはラプラシアンフィルターと呼ばれ画像に対するラプラシアンを返すフィルターとなります。

ラプラシアンフィルタ-の導出

エッジ検出のアルゴリズム

エッジ抽出のための様々なアルゴリズムが提案されていますが、ここでは、勾配法とラプラシアン法の代表的なエッジ検出の手法とであるソーベル法とガウスのラプラシアン法に加えて、弱いエッジの検出も可能な強力なエッジ検出となるキャニー法についてご紹介いたします。

1. ソーベル法 (Sobel)

前の節で紹介したエッジ検出フィルターは平滑化操作に平均化を使っているのに対し、ソーベル法は中央の重みをおおきくした加重平均を用いており、より滑らかな平滑化を期待できます。ソーベル法で用いるエッジ検出用のフィルターは下図のようになります。

ソーベルフィルタ

2. ガウスのラプラシアン法(LoG:Laplacian of Gaussian)

ラプラシアンフィルターに関してもそのままではノイズに対する感度が高いため、ノイズの影響を低減するための平滑化を行う必要があります。ガウスのラプラシアン法ではあらかじめ対象の画像にガウシアンフィルターを用いた平滑化を行ってからラプラシアンフィルターを適応させます。この平滑化とラプラシアンの操作は、ガウシアンフィルターとラプラシアンフィルターを畳み込んで得られるガウスのラプラシアン(LoG)フィルターを使うことで一回の畳み込み演算にまとめることができます。ガウスのラプラシアン(LoG)フィルターの式とグラフ化した結果は下記のようになります。

ガウスフィルター(hg)とガウスのラプラシアンフィルター(h)の計算式

3. キャニー法 (Canny)

キャニー法は弱いエッジも正確に検出できる強力なエッジ検出手法の一つです。また他のエッジ検出と比較してノイズに対する誤検出も少ない手法になります。キャニー法ではいくつかのアルゴリズムを組み合わせて最終的なエッジ抽出を行います。まずガウシアンフィルターを縦横方向に一次微分したもので各々畳み込みを行い、平滑化と勾配の大きさ・向きの取得を行います。次に、より正確なエッジの検出を行うために、取得した勾配の向きに隣接する画素と比較をおこない勾配の最大位置を抽出します。抽出した位置での勾配の大きさに対し、閾値を使ってエッジ部とそうでないところを切り分けます。さらに、キャニー法では二つの閾値を使うことでヒステリシス特性を持たせており、上の閾値以上の場合はエッジ、下の閾値以下の場合は非エッジとみなし、上下の閾値の間となる場合は隣接画素にエッジがあるかどうかで判断します。キャニー法は他の方法と比較して、アルゴリズムが複雑なため処理に時間がかかる点は注意が必要です。

上記のエッジ検出を適応させた結果は次のようになります。ソーベル法では強いエッジ部のみを検出しているのに対し、キャニー法では弱いエッジも検出していることが見て取れます。

各エッジ検出の手法と比較

(左から、元画像、ソーベル法、ガウルのラプラシアン法、キャニー法)

MATLABを活用したエッジ検出

エッジ検出は画像における輪郭検出や特徴抽出に有効です。一方で、所望の結果を得るために、対象の画像や処理速度に応じた手法の選択とパラメータの調整が不可欠です。MATLAB®の画像処理系オプション製品であるImage Processing Toolbox™ではエッジ検出を含め、様々な画像処理アルゴリズムをコンパクトな記述で実行することができます。豊富な可視化機能も有しており、結果を確認しながらプログラムを組むことで、効率よくアルゴリズムの開発を行うことができます。プログラミングのご経験が浅い方でも使いやすいようにデザインされており、ヘルプドキュメントや実際に動かせる例を参考にしながらすぐに動かすことができます。

参考: Steveによる画像処理, 画像強調, 画像および動画処理