我正在使用 ORB 比较两个图像中的特征,以找到它们之间的相似性。
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1,des2)
distance=maches[i].distance
有没有办法找到阈值距离来评论特征的相似程度?我检查距离是否 < threshold_distance 则特征相似,否则不相似。
我正在使用 ORB 比较两个图像中的特征,以找到它们之间的相似性。
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1,des2)
distance=maches[i].distance
有没有办法找到阈值距离来评论特征的相似程度?我检查距离是否 < threshold_distance 则特征相似,否则不相似。
为此目的使用单个阈值通常不是那么稳健。
更好的方法是找到最短距离 (d1) 和次短距离 (d2),并使用比率。
r=d1/d2
您希望这r
小于适合您的方案的阈值。
此外,您可能希望使用全局阈值来限制有效距离,以消除垃圾匹配。
也许这会对你有所帮助,
double max_dist = 0; double min_dist = 100;
for( int i = 0; i < dest1.rows; i++)
{
double dist = matches12[i].distance;
if(dist < min_dist)
min_dist = dist;
if(dist > max_dist)
max_dist = dist;
}
printf("-- Max dist : %f \n", max_dist);
printf("-- Min dist : %f \n", min_dist);