Harris法で特徴点(コーナー)を検出する原理・計算式

Harris法で特徴点(コーナー)を検出する原理や計算式についてまとめました。

Harris法とは

Harris法は、画像処理において特徴点(コーナー)を検出するためのアルゴリズムです。
Harrisコーナー検出法の改良版であり、より安定して特徴点を検出できます。Shi-Tomasi法は、画像中の特徴点を検出するために、各ピクセルの周辺領域の自己相関行列を計算します。この行列の最小固有値を用いて、特徴点の強度を評価します。

特徴点の検出手順

具体的には、以下のように特徴点を検出します。

① カラー画像をグレースケールに変換します。

② 各ピクセルの周辺領域の自己相関行列$M$を計算します。

$$ M = \begin{pmatrix} \sum I_{x}^2 & \sum I_{x}I_{y} \\ \sum I_{x}I_{y} & \sum I_{y}^2 \end{pmatrix} $$

ここで、 $I_{x}$ と $I_{y}$ はそれぞれ画像の x 軸と y 軸方向の微分を表します。微分は、Sobelフィルタなどの微分フィルタを用いて計算されます。

③ コーナー強度(Harris応答) $R$ を計算します。

$$ R = \det(M) – k \cdot (\text{trace}(M))^2 $$

ここで、 $\det(M)$ は行列 $M$ の行列式、 $\text{trace}(M)$ は行列 $M$ のトレース(対角成分の和)です。$k$ は経験的に選ばれる定数で、通常 0.04 ~ 0.06 の範囲で設定されます。

④ コーナー強度 $R$がしきい値$T$を超えるピクセルを特徴点として選択します。しきい値 $T$ は通常、アプリケーションに応じて調整されます。

関連ページ

プログラミングによる実装例について以下ページで解説しています。

【Python/OpenCV】Sobelフィルタで輪郭検出(エッジ抽出)
Python+OpenCVでソーベル(Sobel)フィルタを「NumPy」「cv2.filter2D」「cv2.Sobel」で実装し、輪郭検出する方法をソースコード付きで解説します。
【画像処理超入門】アルゴリズムの仕組みと実装方法を簡単に解説
画像処理超アルゴリズムの仕組みとプログラミングによる実装方法を簡単に解説します。
この記事を書いた人
西住技研

在学中はシステム制御理論や画像処理、機械学習を専攻分野として研究していました。就職後は、プログラミング(Python)を活用したデータ分析や作業自動化に取り組み、現在に至ります。そこで得たノウハウをブログで発信しています。
YoutubeX(旧Twitter)でも情報発信中です

西住技研をフォローする
画像処理

コメント