![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
本章では、
前章では Harris コーナー検出器を見た。その後1994年に、J. Shi と C. Tomasi は論文 Good Features to Track の中でそれに小さな変更を加え、Harris コーナー検出器と比べてより良い結果を示した。Harris コーナー検出器におけるスコア関数は次のように与えられていた:
\[R = \lambda_1 \lambda_2 - k(\lambda_1+\lambda_2)^2\]
その代わりに、Shi-Tomasi は次を提案した:
\[R = \min(\lambda_1, \lambda_2)\]
これがしきい値より大きければ、コーナーとみなされる。Harris コーナー検出器で行ったように \(\lambda_1 - \lambda_2\) 空間にプロットすると、以下のような画像が得られる:
図から分かるように、\(\lambda_1\) と \(\lambda_2\) がともに最小値 \(\lambda_{\min}\) を超えている場合に限り、コーナー(緑の領域)とみなされる。
OpenCV には cv.goodFeaturesToTrack() という関数がある。これは Shi-Tomasi 法(あるいは指定すれば Harris コーナー検出)によって画像内の最も強い N 個のコーナーを見つける。通例どおり、画像はグレースケール画像でなければならない。次に、見つけたいコーナーの数を指定する。続いて品質レベルを指定する。これは 0〜1 の値で、コーナーの最低品質を表し、これを下回るものはすべて棄却される。最後に、検出されるコーナー間の最小ユークリッド距離を指定する。
これらの情報をすべて使って、関数は画像中のコーナーを見つける。品質レベルを下回るコーナーはすべて棄却される。次に、残ったコーナーを品質に基づいて降順にソートする。続いて、関数は最初の最も強いコーナーを取り、最小距離の範囲内にある近傍のコーナーをすべて破棄し、最も強いN個のコーナーを返す。
以下の例では、最良の25個のコーナーを見つけてみる:
以下の結果を参照のこと。
この関数はトラッキングにより適している。それについては時が来たときに見ていく。