寻找ORB特征描述符之间的汉明距离

3

我正在尝试编写一个匹配ORB特征的函数。我不使用默认匹配器(bfmatcher, flann matcher),因为我只想将图像中的特定特征与其他图像中的特征进行匹配。

我看到ORS描述符是一个二进制数组。

我的问题是如何匹配两个特征,即如何找到两个描述符之间的汉明距离?

ORB描述符:

descriptor1 =[34, 200, 96, 158, 75, 208, 158, 230, 151, 85, 192, 131, 40, 142, 54, 64, 75, 251, 147, 195, 78, 11, 62, 245, 49, 32, 154, 59, 21, 28, 52, 222]
descriptor2 =[128, 129, 2, 129, 196, 2, 168, 101, 60, 35, 83, 18, 12, 10, 104, 73, 122, 13, 2, 176, 114, 188, 1, 198, 12, 0, 154, 68, 5, 8, 177, 128]

感谢您的选择。
1个回答

9

ORB描述符只是32字节的uchar Mat。

BruteForce和FLANN匹配器做了一些额外的工作,不仅比较描述符,但如果现在你只需要这些,请使用直接的范数

   Mat descriptor1, descriptor2;
   double dist = norm( descriptor1, descriptor2, NORM_HAMMING);
   // NORM_HAMMING2 or even NORM_L1 would make sense, too.
   // dist is a double, but ofc. you'd only get integer values in this case.

谢谢您的回答,我可以将较短的距离视为更匹配的条件吗?或者还有其他进一步的匹配标准吗? - nayab
嗯,是的,但要带着一些保留意见,因为海明距离只给出了一个非常“狭窄”的范围(64 * 8)。 - berak
(64*8)?我得到了32个8位数字,矩阵类型为0,即CV_8U。 - nayab
有关如何在ORB描述符匹配中使用角度的建议。 - nayab
1
@bvbdort,我认为使用角度进行匹配不是一个好主意。因为描述符是32位数字,但角度限制在0-360度之间,所以使用角度是个坏主意。此外,如果我没记错的话,特征检测器使用方向直方图,步长为0-20-40-..360。你无法区分10度和15度。 - Muhammet Ali Asan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接