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 个匹配项。

我不知道你是否还需要这个问题的帮助,你问这个问题已经一年了。但我有同样的问题,我偶然发现了你的问题。我也花了一些时间才弄清楚。我认为回答这个问题是我的责任,以免其他人也遇到同样的问题并需要帮助。要有光!

于 2013-03-07T07:01:26.260 回答