SIFT 特征匹配是通过基于欧几里德距离的最近邻方法完成的。有人可以解释一下吗?有计算吗?如果那么有人可以帮我计算我的 SIFT 特征向量的欧几里得距离吗?我想保存计算出的欧几里得距离,以便为神经网络提供更多特征,如图像的圆度和颜色。
2 回答
通过欧几里得距离进行 SIFT 特征匹配并不是一项艰巨的任务。该过程可以解释如下:
提取两个图像的 SIFT 关键点描述符。
从一张图像中获取一个关键点描述符(参考描述符)。
2.1 现在,求参考描述符与其他图像的所有关键点描述符之间的欧几里得距离。
2.2 因此,您有从参考描述符到 image2 中所有关键点描述符的欧几里得距离。按升序排列。(这意味着 image1 中的关键点到 image2 中的关键点的最近距离)
2.3 现在,设置一些阈值 T(主要在 0.3 到 0.7 的范围内)。
2.4 取第一个最近距离与第二个最近距离的比率,如果它低于阈值 T,那么它是匹配的,因此,您保存该索引。否则,没有匹配。
对 image1 中的所有关键点描述符重复此操作。
- 现在你有比赛了。您可以通过附加两个图像然后基于关键点位置来绘制匹配。
我认为您的疑问是欧几里得距离是什么。欧几里得距离是在欧几里得(或二维)平面中看到的两点之间的距离。它在二维平面上非常直观,但是由于 SIFT 描述符是 128 维的向量,所以它变得很棘手。你只需要坚持公式(https://en.wikipedia.org/wiki/Euclidean_distance)
这是我计算欧几里得距离的代码:
for j = 1 : length(SIFT2)
euclideanDist(j) = sqrt(sum((SIFT1{i} - SIFT2{j}).^2));
end
代码将找到从第一张图像上的点“i”到第二张图像中所有遇到的点的距离,在这种情况下为“j”。我将此距离存储在向量 euclideanDist 中。
单元阵列 SIFT1 和 SIFT2 包含每个图像的描述符。