私は機能追跡アプリケーションを開発しています。これまでのところ、ほぼすべての機能検出器/記述子を試した後、ORB で最も満足のいく全体的な結果が得られました。機能記述子と検出器の両方が ORB です。
ソース画像の特徴を検出するために (マスキングによって) 特定の領域を選択しています。その後、後続のフレームで検出された機能と照合します。
次に、次のコードから取得した「一致」に対して比率テストを実行して、一致をフィルタリングします。
std::vector<std::vector<DMatch>> matches1;
m_matcher.knnMatch( m_descriptorsSrcScene, m_descriptorsCurScene, matches1,2 );
また、双方向の比率テスト (ソースから現在のシーンへの一致、およびその逆の一致をフィルター処理し、一般的な一致を除外する) も試しましたが、あまり効果がなかったので、一方向の比率テストに進みました。
また、比率テストに最小距離チェックを追加すると、より良い結果が得られます
if (distanceRatio < m_fThreshRatio && bestMatch.distance < 5*min_dist)
{
refinedMatches.push_back(bestMatch);
}
そして最後に、ホモグラフィを推定します。
Mat H = findHomography(points1,points2);
RANSAC メソッドを使用してインラインを推定し、それらを使用してホモグラフィを再計算しようとしましたが、不安定性が増し、時間がかかります。
最後に、追跡する特定の領域の周りに長方形を描きます。次の方法で平面座標を取得します。
perspectiveTransform( obj_corners, scene_corners, H);
ここで、「objcorners」は、マスクされた (またはマスクされていない) 領域の座標です。
「scene_corners」で描いた反応角が振動しているようです。機能の数を増やすとかなり減りましたが、時間の制約があるため、あまり増やすことはできません。
どうすれば安定性を向上させることができますか?
任意の提案をいただければ幸いです。
ありがとう。