DMatches中的距离属性是什么意思?

时间:2013-06-08 06:35:26

标签: opencv feature-detection feature-extraction

我有一个简短的问题:当我在OpenCV中进行功能匹配时,distanceDMatches属性对MatOfMatches的意义是什么?

我知道我必须过滤较大距离的比赛,因为它们不如距离较远的那样好。但这个属性的含义是什么?这是一种偏差吗?

3 个答案:

答案 0 :(得分:22)

在此上下文中,要素是图像上的关注点。为了比较功能,您可以使用功能检测器“描述”它们。然后将每个要素与描述符相关联。匹配要素时,实际上匹配其描述符。

描述符是一个多维向量。它可以是实值(例如SIFT)或二进制(例如Brief)。

匹配是一对描述符,每个图像中有一个描述符,它们在所有描述符中最相似。当然,要在图像B中找到与图像A中的描述符最相似的描述符,您需要衡量这种相似性。

有多种方法可以计算两个向量之间的“相似度得分”。对于实值描述符,当 Euclidean distance 对于二进制描述符很常见时,经常使用 Hamming distance

作为结论,我们现在可以理解distance属性:它是匹配的两个描述符之间的相似度得分。

答案 1 :(得分:5)

通常在匹配两个要素时,实际上是在某些距离度量下比较两个向量。现在让我们假设您的特征是具有128维的SIFT,并且您使用欧几里德距离比较两个SIFT特征ab,然后DMatch.distance等于

formula

答案 2 :(得分:2)

DMatch中的距离属性是两个描述符(特征向量)之间相似性的度量。如果距离较小,则图像更相似,反之亦然。

从我开始时的经验中吸取教训:

不要将DMatch.distance与两点之间的正常空间距离混淆。两者都不同。 DMatch中的距离表示两个描述符之间的距离(在SIFT情况下具有128个值的向量)

如果是SIFT(本地特征描述符):

1)首先,您检测要比较的两个图像的关键点(感兴趣的点)。

2)然后,围绕所有关键点计算定义区域(每个关键点周围16 X 16邻域)的筛选描述符。每个描述符存储每个关键点周围区域的定向梯度直方图。

3)最后,匹配两个图像的描述符以找到图像之间的匹配关键点。这是通过使用BFMatcher完成的 - > match(),knnMatch()或FlannBasedMatcher - > knnMatch()。

4)如果您使用的是BFMatcher.match(),您将获得一个DMatch对象列表。 DMatch对象的数量等于匹配的数量。每个DMatch对象包含每个匹配的关键点对的以下四个属性。

DMatch.distance - Distance between descriptors. The lower, the better it is.
DMatch.trainIdx - Index of the descriptor in train descriptors(1st image)
DMatch.queryIdx - Index of the descriptor in query descriptors(2nd image)
DMatch.imgIdx - Index of the train image.

5)DMatch.Distance可以是众多距离测量中的一种 - > Norm_L1,Norm_L2(欧几里德距离),汉明距离,汉明2距离......可以在BFMatcher中作为参数提及。默认距离是欧几里德。

6)空间欧氏距离与DMatch欧氏距离的差异:

SIFT描述符1 - > [A1,A2,...,A128]

SIFT描述符2 - > [B1,B2,...... B128]

(DMatch) - >欧几里德距离= sqrt [(a1-b1)^ 2 +(a2-b2)^ 2 + ... +(a128-b128)^ 2]

第1点 - > (x1,y1)

第2点 - > (x2,y2)

(空间) - >欧几里德距离= sqrt [(x2-x1)^ 2 +(y2-y1)^ 2]

因此,与DMatch的距离是描述符之间的距离,它表示两个描述符之间的相似程度,与两点之间的正常空间欧氏距离不同。

如果描述符之间的距离较小,则它们的相似性很高。如果描述符之间的距离更大,则它们的相似性较低。

希望这有助于理解DMatch对象中距离属性的含义。如果您对此有所了解,那么您可以使用任何功能描述符,如HOG,SIFT,SURF,ORB,BRISK,FREAK ......在匹配各自的功能描述符时,它们都是相似的。