gpt4 book ai didi

c++ - 在 SURF 中使用欧氏距离

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:20 28 4
gpt4 key购买 nike

在我的代码中,我根据最近的邻居距离比过滤好的图像,如下所示:

for(int i = 0; i < min(des_image.rows-1,(int) matches.size()); i++) 
{
if((matches[i][0].distance < 0.6*(matches[i][1].distance)) &&
((int)matches[i].size()<=2 && (int)matches[i].size()>0))
{
good_matches.push_back(matches[i][0]);
}
}

既然我是根据最近邻距离比过滤好的图像,我还需要做欧氏距离计算吗?

我想知道当我在 FlannBasedMatcher 中使用 knnMatch 方法时,方法内部是否使用欧氏距离来匹配关键点?

最佳答案

是的,你需要。最近邻距离比意味着您:1)计算从一幅图像中的描述符到第二幅图像中第一和第二最近邻的距离。 d1 = d(desc1_img1, descA_img2); d2 = d(desc1_img1, descB_img2)。2)计算距离比R = d1/d2。如果 R < 0.6,则匹配可能很好。这样做是因为您总是会在第二张图片中获得“最近”的描述符,无论它有多糟糕 - 您可以使用比率来检查它。

那么如果你没有距离,你会根据什么来计算比率?

距离的类型取决于你在normType参数中构造KNN-matcher时传递的值。

 BFMatcher::BFMatcher(int normType=NORM_L2, bool crossCheck=false )  
  • NORM_L2 表示欧几里得 d(p1,p2) = sqrt((x1 - x2)^2+(y1 - y2)^2 +...);
  • NORM_Ll 表示曼哈顿 d(p1,p2) = abs(x1 - x2)+abs(y1 - y2) +..;
  • NORM_HAMMING 表示 Hamming

关于c++ - 在 SURF 中使用欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19812216/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com