エッジ検出のソースを表示
←
エッジ検出
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''エッジ検出'''(エッジけんしゅつ、{{lang-en-short|edge detection}})は、[[画像処理]]や[[コンピュータビジョン]]の用語で、[[特徴検出]] ([[:en:Feature detection (computer vision)|feature detection]]) や[[特徴抽出]] ([[:en:Feature extraction|feature extraction]]) の一種であり、[[デジタル画像]]の[[光度 (光学)|画像の明るさ]]が鋭敏に、より形式的に言えば[[不連続]]に変化している箇所を特定する[[アルゴリズム]]を指す。 == 背景 == 画像の明るさの鋭敏な変化を検出する目的は、実世界の属性の重要な事象や変化を捉えることである。一般的な画像形成モデルにおいて、画像の明るさの不連続な変化は次のような事象と一致する可能性がある。 * 深さが不連続である。 * 面の向きが不連続である。 * 材質が変化している。 * 照明が変化している。 理想的には、画像にエッジ検出を施すことで、物体の境界を示す連続する曲線が得られ、面の向きが不連続に変化している部分(要するに角)も曲線として得られる。したがって、エッジ検出を画像に施すことで処理すべきデータ量が大幅に削減され、相対的にあまり重要でない情報を排除しつつ、画像の構造的属性だけを保持する。エッジ検出が成功すると、その後の画像処理がずっと単純化される。しかし、それなりに複雑な実際の画像で理想的なエッジを抽出するのはそう簡単ではない。実際の画像から得られるエッジは、興味深い現象と一致しない「偽のエッジ」があったり、エッジ曲線が途切れていて「断片化」していることがあり、その後の画像処理を複雑にしている。 == エッジの特徴 == 3次元のシーンの2次元画像から抽出されるエッジは、[[視点]]依存のエッジと視点独立なエッジに分類できる。視点独立のエッジは、3次元の物体の本質的な特徴を反映したもので、表面の形状などに対応している。視点依存のエッジは、視点が変わると変化するもので、どの方向から撮影するかに依存している。例えば視点によって物体同士が重なる場合などである。 典型的なエッジは、例えば赤のブロックと黄色のブロックの間の境界がある。一方、[[直線]]状のものは数ピクセル幅の色が異なる部分が背景と違っている。この場合、その物体の両サイドにエッジを検出することになる。 エッジは画像処理の多くの応用で極めて重要な役割を担っており、特に[[マシンビジョン]]システムで制御された照明下で製品を撮影して、それを解析する場合によく使われる。しかし、{{いつ範囲|最近|date=2017年1月}}では前処理としてエッジ検出を行わずに画像処理する手法の研究{{要説明|date=2017年1月}}が進んでいる。 == 単純なエッジモデル == 書籍には理想的なエッジの検出が説明されているが、実際の画像から得られるエッジは理想のエッジとは程遠く、一般に以下のような点に影響を受ける。 * [[被写界深度]]が有限であるため、それ以外の部分はピンぼけになる([[点拡がり関数]])。 * 光源が理想的な点光源でないため、影の境界がぼやける([[本影#半影|半影]])。 * 物体の丸い角における[[シェーディング|陰影]]。 * 物体のエッジ近辺での局所的な[[鏡面反射]]や[[拡散反射]]。 以下のモデルは実際の画像におけるエッジの可変性を完全に捉えているわけではないが、[[誤差関数]] <math>\operatorname{erf}</math> はエッジのぼやけをモデル化する単純な方法としてよく使われている<ref>W. Zhang and F. Bergholm: [http://portal.acm.org/citation.cfm?id=264981&dl=GUIDE&coll=ACM Multi-Scale Blur Estimation and Edge Type Classification for Scene Analysis], International Journal of Computer Vision, Volume 24, Issue 3, pages 219 - 250, 1997</ref><ref name=Lindeberg>Lindeberg, T., [http://www.nada.kth.se/cvap/abstracts/cvap191.html "Edge detection and ridge detection with automatic scale selection"], International Journal of Computer Vision, 30, 2, pp 117--154, 1998.</ref>。1次元の画像 <math>f</math> があり、<math>x = 0</math> の位置に1つのエッジがあるとき、そのモデルは次のように表される。 {{Indent| <math>f(x) = \frac{I_r - I_l}{2} \left( \operatorname{erf}\left(\frac{x}{\sqrt{2}\sigma}\right) + 1\right) + I_l</math> }} エッジの左側では、輝度は <math>I_l = \lim_{x \rightarrow -\infty} f(x)</math>、右側では <math>I_r = \lim_{x \rightarrow \infty} f(x)</math> となる。尺度パラメータ σ をエッジのぼやけ尺度と呼ぶ。 == エッジ検出法 == [[ファイル:Valve gaussian (2).PNG|thumb|right|蒸気機関のカラー写真にガウシアン平滑化を行った画像の例(元の画像は[[:File:Valve_original_(1).PNG]])]] エッジ検出には様々な手法があるが、大まかに2種類に分類できる。探索ベースの手法とゼロ交差法をベースとした手法である。探索ベースの手法ではまず、通常1次微分で勾配を計算することでエッジの強さを計算し、勾配の方向からエッジの局所的方向を予測し、その方向の勾配が局所的に極大となる箇所を探す。ゼロ交差法ベースの手法では、対象の画像から計算した2次微分式でのゼロ交差を探すもので、一般に[[ラプラシアン]]でのゼロ交差か非線形微分式でのゼロ交差を探す。エッジ検出の前段階として平滑化(ガウス平滑化が一般的)を行うのが普通である([[ノイズリダクション]]参照)。 エッジ検出法は、主に利用する平滑化フィルタの種類とエッジの強さの計算方法が異なる。多くのエッジ検出法は画像の輝度の勾配計算に基づいており、X軸方向とY軸方向で勾配を見積もる計算に使うフィルタの種類もそれぞれで異なる。 === キャニー法 (Canny edge detector) === [[ファイル:Valve monochrome canny (6).PNG|thumb|right|キャニー法を適用した結果]] {{See also|:en:Canny edge detector}} [[ジョン・キャニー]]は1986年<ref>Canny, J., A Computational Approach To Edge Detection, IEEE Trans. Pattern Analysis and Machine Intelligence, 8:679-714, 1986.</ref>、エッジの検出・局所化・複数応答の最小化を可能にする理想の平滑化フィルタを数学的に検討した。彼はこれらの仮定に基づく理想のフィルタが4つの指数項の総和で表されることを示した。また、そのフィルタは[[ガウス関数]]の1次微分で近似できることも示した。彼はまた「非最大(エッジ)抑制」という観念を導入した。それは事前平滑化フィルタを適用したとき、エッジが勾配方向の勾配の大きさが局所的な極大となる箇所であると定義したものである。 同氏はコンピュータビジョンの先駆者だが、キャニー法は{{いつ範囲|今|date=2017年1月}}でも最先端のエッジ検出法である。事前条件が特殊でない限り、キャニー法よりも性能のよいエッジ検出法を見つけることは難しい。 [[キャニー・デリチェ法]]<ref>R. Deriche, ''Using Canny's criteria to derive an optimal edge detector recursively implemented'', Int. J. Computer Vision, Vol. 1, pp. 167-187, April 1987.</ref> ([[:en:Deriche edge detector|Canny-Deriche detector]]) もキャニー法と同様の数学的手法で得られたエッジ検出法だが、離散的観点から出発しているため、指数フィルタやガウシアンフィルタではなく画像平滑化の再帰フィルタを生み出した。 後述する微分エッジ検出法は、キャニー法を[[尺度空間]] ([[:en:Scale space|scale space]]) 表現から計算される微分不変量の観点から再定式化したものとも言える。 === その他の1次の手法 === 画像の輝度の勾配を見積もる方法はいくつもある。最も単純な方法は次のような中央差分の式で表される。 {{Indent| <math>L_x(x, y)=-1/2\cdot L(x-1, y) + 0 \cdot L(x, y) + 1/2 \cdot L(x+1, y)\,</math> <math>L_y(x, y)=-1/2\cdot L(x, y-1) + 0 \cdot L(x, y) + 1/2 \cdot L(x, y+1)\,</math> }} これは、次のような[[畳み込み]]のフィルタで画像をマスクするのに相当する。 {{Indent|<math> L_x = \begin{bmatrix} -1/2 & 0 & 1/2 \end{bmatrix} * L \quad \mbox{and} \quad L_y = \begin{bmatrix} +1/2 \\ 0 \\ -1/2 \end{bmatrix} * L </math>}} [[ファイル:Valve sobel with angle colour (4).PNG|thumb|right|上と同じ画像にSobelオペレータを適用し、エッジの角度によって色分けした図]] 比較的古くからある[[:en:Sobel operator|Sobelオペレータ]]は、次のフィルタに基づいている。 {{Indent|<math> L_x = \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix} * L \quad \mbox{and} \quad L_y = \begin{bmatrix} +1 & +2 & +1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{bmatrix} * L </math>}} 1次微分の見積もりがこのように与えられると、勾配の大きさは次のように計算できる。 {{Indent|<math>|\nabla L| = \sqrt{ L_x^2 + L_y^2}</math>}} このとき勾配の方向は次のように見積もられる。 {{Indent|<math>\theta = \operatorname{atan2}(L_y, L_x)</math>}} 同様の手法としては他にも[[:en:Prewitt operator|Prewittオペレータ]]や[[:en:Roberts cross|Roberts cross]]がある。 === しきい値処理と連結処理 === 勾配の大きさなどでエッジの強さを計算すると、次にしきい値を適用して必要なエッジだけを抽出する必要がある。しきい値を低く設定すればエッジは多くなり、ノイズの影響を受けやすくなるため、画像の本質的でない特徴を捉えてしまいやすくなる。逆にしきい値を高く設定すると断片化したエッジしか得られないことになる。 勾配の強さを画像化したものにしきい値を適用すると、得られるエッジは太いのが普通で、なんらかの方法でそれを細くする必要がある。非最大抑制でエッジ検出した場合、その定義上エッジは細くなり、エッジ連結処理を施すことでエッジの線同士を連結して多角形を形成することができる。離散的な手法で非最大抑制のような効果を得るには、1次微分から勾配方向を見積もり、それを45度単位に丸め、その勾配方向での勾配の強さを比較する。 適切なしきい値を求めるために一般に使われる手法は、[[ヒステリシス]]を伴った適応的しきい値処理と呼ばれる手法である。これは、複数のしきい値を使うもので、まず最大のしきい値でエッジの始点を求める。始点が見つかったら、そこからエッジがどう続いているかをピクセル単位に検討していき、最小のしきい値より上のエッジ箇所を全て見ていき、しきい値未満になった時点で追跡をやめる。この手法はエッジが連続的な曲線になっていると仮定しており、不要なエッジを検出することなく、必要なエッジのかすかな部分も検出できるという利点がある。それでも適切なしきい値を選択する問題は残っており、一般に画像によって適切なしきい値は異なる。 === 2次の手法 === 一部のエッジ検出法は輝度の2次微分に基づいている。これは輝度勾配における変化率を捉えるものである。したがって、理想の連続的ケースでは2次導関数でのゼロ交差が勾配の局所的極大になる。 初期の[[マー・ヒルドレス法]] ([[:en:Marr–Hildreth algorithm|Marr–Hildreth algorithm]]) は、ガウシアン平滑化画像にラプラシアンを適用してゼロ交差を検出するものであった。しかし、この方法では偽のエッジも検出しやすい。また、曲線のエッジに弱い性質がある。このため、現在ではほとんど使われない。 ==== 微分エッジ検出 ==== より洗練された2次のエッジ検出法として微分エッジ検出 ([[:en:Differential edge detection|differential edge detection]]) がある。これは自動的にサブピクセルの正確さでエッジの位置を求めることができるもので、勾配方向の2次導関数のゼロ交差を以下のように検出する手法に基づいている。非最大抑制<ref name=Lindeberg />の必要条件を表現する微分幾何学的方法に基づき、画像の全ての点に画像の勾配方向を v-軸とする局所的な座標系 <math>(u, v)</math> を導入する。画像は事前にガウシアン平滑化されているものとし、尺度 <math>t</math> における[[尺度空間]]表現 <math>L(x, y; t)</math> を計算しておく。尺度表現の勾配の大きさは、v-方向 <math>L_v</math> における1次微分係数に等しく、それをv-方向に1次微分した値はゼロになるはずである。 {{Indent|<math>\partial_v(L_v) = 0</math> }} そして、<math>L_v</math> をv-方向に2次微分すると負になる。 {{Indent|<math>\partial_{vv}(L_v) \leq 0</math>}} 局所的な偏導関数 <math>L_x</math>, <math>L_y</math> ... <math>L_{yyy}</math> で明示的な式として書くと、このエッジの定義は微分不変量のゼロ交差曲線として表現できる。 {{Indent|<math>L_v^2 L_{vv} = L_x^2 \, L_{xx} + 2 \, L_x \, L_y \, L_{xy} + L_y^2 \, L_{yy} = 0</math>}} このとき、以下の微分不変量の符号条件が成り立つ。 {{Indent|<math>L_v^3 L_{vvv} = L_x^3 \, L_{xxx} + 3 \, L_x^2 \, L_y \, L_{xxy} + 3 \, L_x \, L_y^2 \, L_{xyy} + L_y^3 \, L_{yyy} \leq 0</math>}} ここで、<math>L_x</math>, <math>L_y</math> ... <math>L_{yyy}</math> は、元の画像をガウシアン平滑化したものから得た尺度空間表現 <math>L</math> から計算した偏導関数である。このようにして、エッジをサブピクセルの正確さで曲線として自動的に得ることができる。ヒステリシスしきい値処理をこれに適用することもできる。 1次微分の近似は上述したように中央差分で計算できるが、2次微分の近似は次のような尺度空間表現 <math>L</math> から計算できる。 {{Indent| <math>L_{xx}(x, y) = L(x-1, y) - 2 L(x, y) + L(x+1, y)\,</math> <math>L_{xy}(x, y) = (L(x-1, y-1) - L(x-1, y+1) - L(x+1, y-1) + L(x+1, y+1))/4\,</math> <math>L_{yy}(x, y) = L(x, y-1) - 2 L(x, y) + L(x, y+1)\,</math> }} これは次のような[[畳み込み]]のフィルタによるマスクと対応している。 {{Indent|<math> L_{xx} = \begin{bmatrix} 1 & -2 & 1 \end{bmatrix} * L \quad \mbox{and} \quad L_{xy} = \begin{bmatrix} -1/4 & 0 & 1/4 \\ 0 & 0 & 0\\ 1/4 & 0 & -1/4 \end{bmatrix} * L \quad \mbox{and} \quad L_{yy} = \begin{bmatrix} 1 \\ -2 \\ 1 \end{bmatrix} * L </math>}} == 脚注 == {{Reflist}} == 参考文献 == * Ziou, D. and Tabbone, S.: [http://citeseer.ist.psu.edu/ziou97edge.html Edge Detection Techniques An Overview], International Journal of Pattern Recognition and Image Analysis, 8(4):537--559, 1998 (Contains an extensive set of references.) == 関連項目 == * [[ハフ変換]] - エッジ点から直線や円や楕円を検出するのに用いる。 * [[ノイズリダクション]] * [[:en:Edge detection]] {{DEFAULTSORT:えつしけんしゆつ}} [[Category:画像処理]] [[Category:コンピュータビジョン]]
このページで使用されているテンプレート:
テンプレート:Indent
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:See also
(
ソースを閲覧
)
テンプレート:いつ範囲
(
ソースを閲覧
)
テンプレート:要説明
(
ソースを閲覧
)
エッジ検出
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報