← 画像処理に戻る

コーナー検出

画像の特徴点を見つける仕組みを学びます

コーナーとは?

コーナーは、画像の中で2つ以上のエッジが交わる点です。 物体の角や特徴的な点として、画像認識において重要な役割を果たします。

コーナーは、どの方向に動かしても明るさが大きく変化する点です。

平坦な領域

どの方向も変化なし

エッジ

一方向のみ変化

コーナー

すべての方向で変化

Harrisコーナー検出の原理

Harris Corner Detectorは、最も広く使われているコーナー検出手法です。 各ピクセル周辺の勾配情報から、コーナーらしさを計算します。

基本的な考え方:小さなウィンドウを動かしたとき、明るさの変化が大きい点がコーナーです。

元画像
コーナー検出結果

構造テンソル(勾配の共分散行列)

各ピクセルで、X方向とY方向の勾配から構造テンソルMを計算します。

$M = \begin{bmatrix} I_x^2 & I_x I_y \\ I_x I_y & I_y^2 \end{bmatrix}$

$I_x$: X方向の勾配     $I_y$: Y方向の勾配

この行列の固有値($\lambda_1, \lambda_2$)がコーナーの判定に使われます。

平坦領域

$\lambda_1 \approx 0, \lambda_2 \approx 0$

両方の固有値が小さい

エッジ

$\lambda_1 \gg \lambda_2$

一方の固有値のみ大きい

コーナー

$\lambda_1 \approx \lambda_2 \gg 0$

両方の固有値が大きい

コーナー応答関数

Harrisでは、固有値を直接計算せず、コーナー応答関数Rを使います。

$R = \det(M) - k \cdot \mathrm{trace}(M)^2$

各項の意味:
$\det(M) = \lambda_1 \cdot \lambda_2$   (行列式:固有値の積)
$\mathrm{trace}(M) = \lambda_1 + \lambda_2$   (トレース:固有値の和)
$k \approx 0.04 \sim 0.06$   (経験的な定数)

$R$の値が大きい点がコーナーと判定されます。固有値を直接計算するよりも高速に判定できます。

コーナー応答マップ

明るいほどコーナーらしい

まとめ

コーナー検出は、物体認識やトラッキングの基礎となる重要な技術です。

重要なポイント

  • コーナー:すべての方向で明るさが変化する点
  • 構造テンソル:勾配の共分散行列 $M = \begin{bmatrix} I_x^2 & I_x I_y \\ I_x I_y & I_y^2 \end{bmatrix}$ で局所的な構造を表現
  • 固有値:2つの固有値($\lambda_1, \lambda_2$)が大きい点がコーナー
  • Harris応答関数:$R = \det(M) - k \cdot \mathrm{trace}(M)^2$ で効率的に計算
  • 応用:特徴点マッチング、画像スティッチング、物体追跡など
元画像
検出されたコーナー