ComputerVisionまとめの部屋

役に立った情報や調査結果をまとめています

コーナー検出とは

画像内における「エッジ」は一方向にのみ輝度勾配が大きい点の集合と考えられるが、「コーナー」はそのエッジが交差する部分、すなわち二方向に輝度勾配が大きい部分と考えられる。例えばチェスボードのような直行する白黒の模様を考えると、x方向の勾配とy方向の勾配が、同時に最大になる点がコーナーであるとみなせる。

 

これを一般化するには「分散共分散行列」を考えるとうまくいく。
xの1次微分"Ix"とyの1次微分"Iy"に対する分散共分散行列は、対角成分に分散(Ix^2とIy^2)が並び、非対角成分に共分散(Ix*Iy)を配置する。この行列の固有値固有ベクトルを計算すると、1次微分が最大化する方向(エッジに直交する方向)と、その方向に軸をとったときの分散値Ix^2が分かるのだ。

また1次微分に対してガウシアンフィルタを適用してから分散共分散行列を求めることにより、異方性を解消することができる。

 

固有値を使うコーナー検出法をまとめると

  1. Sobelフィルタにより各ピクセルのx方向、y方向の1次微分画像を求める
  2. 各ピクセルごとに注目領域を決める
  3. ガウシアンフィルタを適用して分散共分散行列Mを組み立てる
  4. Mの固有値固有ベクトルを求めて大きいほうを(λmax, xmax)、小さいほうを(λmin, xmin)とする
  5. λminがしきい値より大きくなる点を特徴点とする

このコーナー検出法は回転不変性はあるが変形に対する不変性はない。OpenCVのcv::cornerEigenValsAndVecsは、この固有値計算をすることでコーナーを求めるAPIである。