opencv - ORB/BFMatcher - 为什么是 norm_hamming 距离?

标签 opencv orb

我正在使用 ORB 的 OpenCV 实现以及 BFMatcher。 OpenCV 声明 NORM_HAMMING 应该与 ORB 一起使用。

这是为什么? norm_hamming 与其他方法(如欧氏距离、norm_l1 等)相比有何优势

最佳答案

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

ORB 描述符是二进制值的向量。如果将欧几里德距离应用于二元向量,单次比较的平方结果将始终为 1 或 0,这在估计元素之间的差异时没有提供信息。整体欧几里德距离将是这些 1 和 0 之和的平方根,这同样不是向量之间差异的良好估计。

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

A quick illustration of Hamming distance calculation in CV.

关于opencv - ORB/BFMatcher - 为什么是 norm_hamming 距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614497/

相关文章:

python - 如何使用基本身份验证从 url 中读取 cv2.im

c++ - 在 Eclipse 中使用 OpenCV

python - 文件被无故复制(Python,OpenCV)

opencv - LshMatcher 与 opencv?

c++ - 在 OpenCv 3.2 中使用 ORB、Fast、Brsik 等特征描述符

opencv - iOS - 图像中的对象识别

python-2.7 - 使用 ORB 图像特征匹配时 OpenCV python 错误

python - OpenCV 中的 BFMatcher 匹配抛出错误

opencv - 使用BRISK检测器/描述符OpenCV的性能问题

opencv - 了解 OpenCV 中的距离变换