我正在开发一个项目,我必须根据保存在目录中的检查点列表,使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;
}
在另一个班级中,将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;
}