Corner detector

コーナーとは、輝度が複数の方向で大きく変化する画像上の位置である。コーナーは安定的で再現性の高いランドマークである。平坦な領域(勾配なし)やエッジ(1方向のみに勾配)とは異なり、コーナーは2Dで曖昧さなく位置決めできるため、追跡やマッチングに理想的である。古典的な検出器はハリスコーナー検出器である。

構造テンソル

局所ウィンドウ WW 上で w(x,y)w(x,y)(多くの場合ガウス関数)により重み付けして計算される、あるピクセルにおける構造テンソル(二次モーメント行列):

M=(x,y)Ww(x,y)[Ix2IxIyIxIyIy2]M = \sum_{(x,y) \in W} w(x,y) \begin{bmatrix} I_x^2 & I_x I_y \\ I_x I_y & I_y^2 \end{bmatrix}

ここで Ix=IxI_x = \frac{\partial I}{\partial x}Iy=IyI_y = \frac{\partial I}{\partial y} は(Sobel演算子で計算される)画像勾配である。MM の固有値 λ1,λ2\lambda_1, \lambda_2 は局所構造を特徴づける:

λ1\lambda_1λ2\lambda_2解釈
0\approx 00\approx 0平坦な領域(勾配なし)
0\gg 00\approx 0エッジ(1方向のみの勾配)
0\gg 00\gg 0コーナー(両方向の勾配)

直感的には、MM はウィンドウがシフトされたときに輝度差の二乗和がどのように変化するかを要約している。コーナーとは、どのシフト方向でも大きな変化が生じる点であり、これはまさに「両方の固有値が大きい」という条件そのものである。

コーナー応答関数

固有値を直接計算する(計算コストが高い)代わりに、ハリスは次の応答を提案した:

R=det(M)k(trace(M))2=λ1λ2k(λ1+λ2)2R = \det(M) - k\,(\mathrm{trace}(M))^2 = \lambda_1\lambda_2 - k(\lambda_1 + \lambda_2)^2

ここで k[0.04,0.06]k \in [0.04, 0.06] は経験的な値である。R>0R > 0 はコーナーを、R<0R < 0 はエッジを、R|R| が小さい場合は平坦な領域を示す。非最大値抑制(non-maximum suppression)によって、最も強い局所最大値が最終的なコーナーとして選択される。

密接に関連するShi-Tomasi基準(「Good Features to Track」)は、各ピクセルを min(λ1,λ2)\min(\lambda_1, \lambda_2) — パッチの最悪ケースの追跡可能性 — によって直接スコアリングし、これはOpenCVの cv::goodFeaturesToTrack が実装しているものである。

ゼロからのスケッチ

数行のNumPy/OpenCVでハリス検出器を実装することは、初心者にとって最良の演習の一つである:

import cv2, numpy as np

I  = cv2.imread("frame.png", cv2.IMREAD_GRAYSCALE).astype(np.float32)
Ix = cv2.Sobel(I, cv2.CV_32F, 1, 0)
Iy = cv2.Sobel(I, cv2.CV_32F, 0, 1)

# window-averaged structure tensor entries
Sxx = cv2.GaussianBlur(Ix * Ix, (5, 5), 1.0)
Syy = cv2.GaussianBlur(Iy * Iy, (5, 5), 1.0)
Sxy = cv2.GaussianBlur(Ix * Iy, (5, 5), 1.0)

k = 0.04
R = (Sxx * Syy - Sxy**2) - k * (Sxx + Syy)**2   # Harris response
corners = R > 0.01 * R.max()                    # threshold before NMS

SLAMフロントエンドにおける実践上の注意点

よくある落とし穴

SLAMにおける意義

コーナーは特徴点ベースのSLAMフロントエンドの原材料である。それらは記述され、マッチングされ、三角測量されてマップ点となるキーポイントになる。構造テンソルはLucas-Kanadeオプティカルフローにほぼそのまま再登場する — コーナー(両方の固有値が大きい)はまさに確実に追跡できる種類の点であり、これが「good features to track」とハリスコーナーが密接に関連している理由である。リアルタイムSLAMで用いられる後発の検出器(FAST、ORBの向き付きFAST)は、同じアイデアの、より高速な後継である。

関連ノート