1

私はすでに記述子を計算していますが、キーポイントからフロートに変換する前に、外れ値をきれいにしたいと思います。

私はこれが自動的に行うことができることを知っています

BruteForceMatcher<cv::L2<float> > matcher;

std::vector<cv::DMatch> matches;


matcher.match(descriptors1,descriptors2, matches);
std::nth_element(matches.begin(),matches.begin()+24, matches.end());
matches.erase(matches.begin()+25, matches.end());`

しかし、これは、次のステップが一致を描画する場合にのみ役立ちます。実際に私がやりたいのは、いくつかの画像レジストレーションで後処理するための最良の 25 の一致を取得することです。

どんな助けでも役に立ちます。ありがとう

イヴァン

4

1 に答える 1

1

Dmatch ベクトルの各要素の trainIdx および queryIdx 属性を使用して、指定したキーポイントのベクトルから一致する対応するインデックスを抽出します。

基本的に、matches.at(i).trainIdx と matches.at(i).queryIdx は、対応する 'i' 番目の一致のインデックスを提供します。最良の部分は、i=1 が i=3 よりも優れた一致になるなどのように、一致が品質の降順で配置されることです。したがって、コードでは、最適な 24 の一致を抽出しています。

この質問についてまだサポートが必要かどうかわかりませんが、質問してから 1 年が経ちました。しかし、私は同じ質問をしていて、偶然あなたの質問に出くわしました。私も理解するのに時間がかかりました。他の誰かが同じ質問に出くわし、助けが必要にならないように、この質問に答えるのが私の義務だと思いました. 光あれ!

于 2013-03-07T07:01:26.260 に答える