OpenCV特征匹配以检查两个场景之间的相似性
我正在做一个项目,我必须让AR无人机根据保存在目录中的检查点列表沿着一条路径飞行。每个检查点都是无人机应沿其路径检测的场景。在亮度、实际场景中存在的小障碍物或视角的微小变化方面,检查点与实际场景之间可能存在差异。为了在无人机移动时检测检查点,我决定使用特征匹配来获得良好匹配的数量以及入口与良好匹配数量之间的比率,并使用这些参数来检查是否达到检查点 算法:OpenCV特征匹配以检查两个场景之间的相似性,opencv,computer-vision,similarity,feature-detection,Opencv,Computer Vision,Similarity,Feature Detection,我正在做一个项目,我必须让AR无人机根据保存在目录中的检查点列表沿着一条路径飞行。每个检查点都是无人机应沿其路径检测的场景。在亮度、实际场景中存在的小障碍物或视角的微小变化方面,检查点与实际场景之间可能存在差异。为了在无人机移动时检测检查点,我决定使用特征匹配来获得良好匹配的数量以及入口与良好匹配数量之间的比率,并使用这些参数来检查是否达到检查点 算法: 将图像转换为灰度 使用检测器检测关键点(我试过筛、冲浪、球体 (阿卡泽) 使用提取器计算特征向量 使用匹配算法执行匹配(我已尝试 布鲁特福斯和
matcher->knnMatch(desc1, desc2, dmatches, KNN_best_matches);
vector<Point2f> matches, inliers;
if(matches2points_nndr(kp1,kp2,dmatches,matches,DRATIO,MIN_MATCH_COUNT)){
*match = true;
//compute inliers
compute_inliers_ransac(matches, inliers, MAX_H_ERROR, false);
//update stats
stats.matches = (int)matches.size()/2;
stats.inliers = (int)inliers.size()/2;
stats.outliers = stats.matches - stats.inliers;
stats.ratio = (float) stats.inliers * 100.0 / (float) stats.matches;
}
matcher->knmatch(描述1、描述2、数据匹配、KNN\u最佳匹配);
向量匹配,内联;
if(匹配2点(kp1、kp2、D匹配、匹配、DRATIO、最小匹配计数)){
*匹配=真;
//计算内联线
计算输入值(匹配、输入值、最大错误、错误);
//更新统计数据
stats.matches=(int)matches.size()/2;
stats.inliers=(int)inliers.size()/2;
stats.outliers=stats.matches-stats.inliers;
stats.ratio=(float)stats.inliers*100.0/(float)stats.matches;
}
在另一个类中,stats.ratio与阈值进行比较
if(draw_stats.ratio > threshold_matching){
//move to the next checkpoint
match = true;
}else{
std::cout << "ratio is under the threshold: " << draw_stats.ratio << std::endl;
match = false;
}
if(绘制统计比率>阈值匹配){
//移动到下一个检查点
匹配=真;
}否则{
std::这是一个很好的任务。你能给我们一些代码和图像数据以便我们能提供帮助吗?我已经在问题中添加了代码。为什么不在两个场景之间做一个简单的单应性呢?这是在计算-输入-转换方法中完成的,但是,我如何正确地调整参数来解决我的问题呢?有趣的是,你能给我们分享一些数据集来玩吗H