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

问题描述 投票:17回答:3

我有一个简短的问题:当我在OpenCV中进行特征匹配时,distance属性在DMatches中的MatOfMatches是什么意思?

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

opencv feature-detection feature-extraction
3个回答
22
投票

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

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

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

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

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


5
投票

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


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等......在匹配各自的功能描述符时,它们都是相似的。

© www.soinside.com 2019 - 2024. All rights reserved.