ORB/BFMatcher - 为什么 norm_hamming 距离?
ORB/BFMatcher - why norm_hamming distance?
我正在使用 ORB 的 OpenCV 实现以及 BFMatcher。 OpenCV 声明 NORM_HAMMING
应该与 ORB 一起使用。
这是为什么? norm_hamming
与其他方法(如欧式距离、norm_l1 等)相比有何优势
ORB
(ORB: an efficient alternative to SIFT or SURF) 是二进制描述符。
使用 HAMMING 距离而不是 L1/L2 距离应该更有效(在计算方面),因为 HAMMING 距离可以使用 XOR 后跟位计数来实现(参见 BRIEF: Binary Robust Independent Elementary Features):
Furthermore, comparing strings can be done by computing the Hamming
distance, which can be done extremely fast on modern CPUs that often
provide a specific instruction to perform a XOR or bit count
operation, as is the case in the latest SSE [10] instruction set.
当然,对于像SIFT
这样的经典描述符,你不能使用汉明距离。
你可以自己测试一下:
D1=01010110
D2=10011010
L2_dist(D1,D2)=sqrt(4)=2
XOR(D1,D2)=11001100
; bit_count(11001100)=4
L1/L2距离用于基于字符串的描述符,汉明距离用于二进制描述符(AKAZE、ORB、简介等)。
在比较计算机视觉中的描述符时,欧氏距离通常被理解为两个向量元素之间的平方差之和的平方根。
ORB 描述符是二进制值的向量。如果将欧几里德距离应用于二元向量,单次比较的平方结果将始终为 1 或 0,这在估计元素之间的差异时没有提供信息。整体欧几里得距离将是这些 1 和 0 之和的平方根,同样不是向量之间差异的良好估计。
这就是使用汉明距离的原因。这里的距离是不相同的元素的数量。正如 Catree 所指出的,您可以通过对向量进行简单的布尔运算来计算它,如下图所示。这里 D1 是一个 4 位描述符,我们将其与 D2 中显示的 4 个描述符进行比较。矩阵 H 是每行的汉明距离。
我正在使用 ORB 的 OpenCV 实现以及 BFMatcher。 OpenCV 声明 NORM_HAMMING
应该与 ORB 一起使用。
这是为什么? norm_hamming
与其他方法(如欧式距离、norm_l1 等)相比有何优势
ORB
(ORB: an efficient alternative to SIFT or SURF) 是二进制描述符。
使用 HAMMING 距离而不是 L1/L2 距离应该更有效(在计算方面),因为 HAMMING 距离可以使用 XOR 后跟位计数来实现(参见 BRIEF: Binary Robust Independent Elementary Features):
Furthermore, comparing strings can be done by computing the Hamming distance, which can be done extremely fast on modern CPUs that often provide a specific instruction to perform a XOR or bit count operation, as is the case in the latest SSE [10] instruction set.
当然,对于像SIFT
这样的经典描述符,你不能使用汉明距离。
你可以自己测试一下:
D1=01010110
D2=10011010
L2_dist(D1,D2)=sqrt(4)=2
XOR(D1,D2)=11001100
;bit_count(11001100)=4
L1/L2距离用于基于字符串的描述符,汉明距离用于二进制描述符(AKAZE、ORB、简介等)。
在比较计算机视觉中的描述符时,欧氏距离通常被理解为两个向量元素之间的平方差之和的平方根。
ORB 描述符是二进制值的向量。如果将欧几里德距离应用于二元向量,单次比较的平方结果将始终为 1 或 0,这在估计元素之间的差异时没有提供信息。整体欧几里得距离将是这些 1 和 0 之和的平方根,同样不是向量之间差异的良好估计。
这就是使用汉明距离的原因。这里的距离是不相同的元素的数量。正如 Catree 所指出的,您可以通过对向量进行简单的布尔运算来计算它,如下图所示。这里 D1 是一个 4 位描述符,我们将其与 D2 中显示的 4 个描述符进行比较。矩阵 H 是每行的汉明距离。