我已经计算了描述符,但是现在,我希望在将其从关键点转换为浮点数之前清除异常值。
我知道这可以通过
自动完成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次匹配处理。
任何帮助都会有用。感谢
伊万
答案 0 :(得分:-1)
使用Dmatch向量中每个元素的trainIdx和queryIdx属性从您提供的关键点向量中提取相应的匹配索引。
基本上,matches.at(i).trainIdx和matches.at(i).queryIdx将为您提供'i'对应匹配的索引。最好的部分是,匹配按质量的降序排列,因为,i = 1将是比i = 3更好的匹配,依此类推。因此,在您的代码中,您将提取最佳的24场比赛。
我不知道你是否仍然需要这个问题的帮助,这是你问过它已经一年了。但我有同样的问题,我偶然发现了你的问题。我花了很多时间才弄明白。我认为我有责任回答这个问题,以免其他人也有机会遇到同样的问题并需要帮助。让光明亮起来!