← 画像処理に戻る

エッジ検出

画像の輪郭を検出する仕組みを学びます

エッジとは?

エッジとは、画像の中で明るさが急激に変化する場所のことです。 物体の輪郭や境界線がエッジとして現れます。

エッジを検出することで、画像から物体の形状や構造を抽出できます。

元画像
エッジ検出結果

勾配(Gradient)の概念

エッジを検出するには、画像の勾配を計算します。 勾配とは、ピクセル値の変化の大きさと方向を表します。

勾配は、X方向(水平)とY方向(垂直)の変化から計算されます。

X方向の変化

縦のエッジを検出

Y方向の変化

横のエッジを検出

$\text{勾配の大きさ} = \sqrt{G_x^2 + G_y^2}$

$\text{勾配の方向} = \arctan\left(\frac{G_y}{G_x}\right)$

Sobelフィルタ

Sobelフィルタは、勾配を計算するための代表的なフィルタです。 X方向とY方向それぞれのカーネルを使用します。

X方向(Gx)

-1
0
1
-2
0
2
-1
0
1

Y方向(Gy)

-1
-2
-1
0
0
0
1
2
1

エッジの強度と方向

GxとGyから、各ピクセルでのエッジの強度方向を計算できます。

エッジの強度

明るいほど強いエッジ

エッジの方向

色でエッジの向きを表現

エッジ方向の色表現


90°
180°
270°

勾配の方向(明るさの増加方向)を色で表現

Cannyエッジ検出(1/2)

Cannyエッジ検出は、より高精度なエッジ検出アルゴリズムです。 Sobelフィルタに加えて、いくつかの追加処理を行います。

Cannyエッジ検出の5つのステップ

  1. ノイズ除去:ガウシアンフィルタでノイズを除去
  2. 勾配計算:Sobelフィルタで勾配の強度と方向を計算
  3. 非極大抑制:エッジを細く鮮明にする
  4. 二重閾値処理:強いエッジと弱いエッジを分類
  5. ヒステリシス:弱いエッジを連結してエッジを完成
1. ガウシアンフィルタ:
$G(x, y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}}$
元画像
ガウシアンフィルタ適用後

Cannyエッジ検出(2/2)

非極大抑制により、エッジが細く鮮明になります。 その後、二重閾値処理とヒステリシスにより、重要なエッジだけを残します。

非極大抑制とは

エッジの方向に対して垂直な方向で、勾配の強度が極大となるピクセルだけを残します。 これにより、太いエッジが細い1ピクセル幅のエッジになります。

二重閾値処理

高い閾値($T_{high}$)と低い閾値($T_{low}$)を設定し、
・勾配 > $T_{high}$ → 強いエッジ(確実に残す)
・$T_{low}$ < 勾配 < $T_{high}$ → 弱いエッジ(条件付きで残す)
・勾配 < $T_{low}$ → 削除

Sobelエッジ検出

太いエッジ

Cannyエッジ検出

細く鮮明なエッジ

まとめ

エッジ検出は、物体認識や画像解析の基礎となる重要な技術です。

重要なポイント

  • エッジ:画像の明るさが急激に変化する場所
  • 勾配:ピクセル値の変化の大きさと方向
  • Sobelフィルタ:X方向とY方向の勾配を計算
  • エッジ強度:$\sqrt{G_x^2 + G_y^2}$で計算
  • Cannyエッジ検出:より高精度で細いエッジを検出
  • 応用:物体検出、画像セグメンテーション、特徴抽出など
元画像
X方向のエッジ
Y方向のエッジ
合成エッジ