我遇到了最近邻算法的实现,用于查找两个相似图像中某些关键点之间的匹配。关键点由SIFT算法生成。这些点由128维向量描述,并且在两个图像中都有许多这样的点。
匹配算法使用最近邻搜索,并且对于一个图像中的每个点,计算另一图像中的对应最近点。 “接近度”由点的矢量之间的最小欧氏距离描绘。通过仅采用距离低于特定阈值的那些点对来选择最佳匹配。
然而,我遇到的实现将一个图像中关键点的所有向量与另一个图像中的关键点的向量相乘,从而形成了产品矩阵。然后它找到产品高于给定阈值的点。
此实现提供了正确的结果,但我想知道它是如何工作的。它是否使用向量之间的相关性作为度量标准,或者此处还有其他内容。
答案 0 :(得分:2)
看起来这不是内部产品不同的问题,也不是点产品本身的问题。原来这是一个简单的数学问题。
基本上...
假设abs(a + b)= C,其中C是常数。 a * b的最大可能值始终是a == b == + - C / 2的结果。因此,当a和b的乘积最大时,a和b之间的距离最小,反之亦然。这适用于所有实数(正面和负面),也可以扩展到多个维度,因此它也可以使用复数(尽管我没有用它来测试)。
C = 20的例子:
((a,b),距离,产品)
((0,20),20.0,0)
((1,19),18.0,19)
((2,18),16.0,36)
((3,17),14.0,51)
((4,16),12.0,64)
((5,15),10.0,75)
((6,14),8.0,84)
((7,13),6.0,91)
((8,12),4.0,96)
((9,11),2.0,99)
((10,10),0.0,100)(如您所见,产品最大时距离最小。)
((11,9),2.0,99)
((12,8),4.0,96)
((13,7),6.0,91)
((14,6),8.0,84)
((15,5),10.0,75)
((16,4),12.0,64)
((17,3),14.0,51)
((18,2),16.0,36)
((19,1),18.0,19)
((20,0),20.0,0)