私は現在、OpenCVによって提供されるいくつかの機能検出器のパフォーマンスを比較し、視覚的な機能マッチングの基礎として比較しています。
SIFT記述子を使用しています。MSER機能とDoG (SIFT)機能を検出するときに、(不正な一致を拒否した後)満足できる一致を達成しました。
現在、私はGFTT(追跡のための優れた機能-Harrisコーナー)でコードをテストして比較を行っています。また、最終的なアプリケーションでは、一連のGFTT機能が視覚的機能追跡プロセスから利用できるようになるためです。
私が使用しcv::FeatureDetector::detect(...)
ているのはstd::vector<cv::KeyPoint>
、検出された機能/キーポイント/関心領域で満たされたものです。構造にcv::KeyPoint
は、フィーチャの場所に関する基本情報、size
およびoctave
キーポイントが検出された情報が含まれています。
GFTTを使用した最初の結果は、さまざまなタイプの機能の典型的なパラメーターsize
とoctave
パラメーターを比較するまではひどいものでした。
- MSERはサイズ(10〜40px)を設定し、オクターブを0のままにします
- DoG(SIFT)はサイズとオクターブの両方を設定します(サイズとオクターブの比率は20から40の間)
- パラメータは常にGFTTです:サイズ= 3、オクターブ= 0
これは、GFTT機能の主な目的が照合ではなく追跡のみに使用されていたためだと思います。このような小さな特徴から抽出された記述子は、小さな1ピクセルのシフトを含む多くのものに対して差別的で不変ではなくなるため、これはマッチング結果の質の低さを説明しています。
私は手動で設定する場合size
のGFTTをする10から12まで、私が使用しているときに非常に似て良い結果、取得MSERかのDoG(SIFT)を。
私の質問は、「go-with-with-10-see-if-it-works」よりもsize
(および/またはoctave
)をどれだけ増やすかを判断するより良い方法はありますか?可能な場合は増加をハードコーディングせずにプログラムで決定したいのですが、新しい/ 増加 / 推定アルゴリズムの選択を裏付けるいくつかの確かな引数がある限り、ハードコーディングで問題ありません。size
size
size
size