ORB / BFMatcher - 为什么norm_hamming距离?

时间:2017-04-25 15:07:38

标签: opencv brute-force orb

我正在使用ORB的OpenCV实现以及BFMatcher,OpenCV声明NORM_HAMMING should be used with ORB

这是为什么? norm_hamming有哪些优点可以提供其他方法,如欧氏距离,norm_l1等。

3 个答案:

答案 0 :(得分:1)

ORBORB: an efficient alternative to SIFT or SURF)是二进制描述符。

使用HAMMING距离而不是L1 / L2距离应该更有效(在计算方面),因为可以使用XOR后跟位计数来实现HAMMING距离(参见BRIEF: Binary Robust Independent Elementary Features):

  

此外,比较字符串可以通过计算汉明来完成   距离,通常可以在现代CPU上以极快的速度完成   提供执行XOR或位计数的特定指令   操作,与最新的SSE [10]指令集中的情况一样。

当然,使用像SIFT这样的经典描述符,你不能使用HAMMING距离。

你可以自己测试一下:

  • D1=01010110
  • D2=10011010
  • L2_dist(D1,D2)=sqrt(4)=2
  • XOR(D1,D2)=11001100; bit_count(11001100)=4

答案 1 :(得分:1)

在计算机视觉中比较描述符时,通常将欧几里得距离理解为两个向量元素之间平方差之和的平方根。

ORB描述符是二进制值的向量。如果将欧几里得距离应用于二元向量,则单个比较的平方结果将始终为1或0,这在估计元素之间的差异时并不能提供任何信息。整个欧几里得距离将是那些零和零之和的平方根,同样也不是向量之间差的一个很好的估计。

这就是为什么使用汉明距离的原因。在此,距离是不相同元素的数量。如Catree所述,您可以通过对向量进行简单的布尔运算来计算它,如下图所示。 D1是单个4位描述符,我们正在与D2中显示的4个描述符进行比较。矩阵H是每行的汉明距离。

A quick illustration of Hamming distance calculation in CV.

答案 2 :(得分:0)

L1 / L2距离用于基于字符串的描述符,而 Hamming距离用于二进制描述符(AKAZE,ORB,BRIEF等)。