1

我在 OpenCV 2.3 中使用 SIFT 检测器和提取器,发现在子图像上检测到的关键点数量与整个图像上的关键点数量不相加。

具体来说,如果我在图像 A 上使用 SIFT 检测器,检测器会检测到 N 个 SIFT 关键点。如果我将 A 划分为四个子区域 A_1、A_2、A_3、A_4 并分别在这些区域上运行检测器,检测器会相应地检测到 N_1、N_2、N_3、N_4 个 SIFT 关键点。令人惊讶的是, N_1 + N_2 + N_3 + N_4 不等于 N !

这种现象对 SIFT 算法是否正确?或者这是由于 OpenCV 2.3 的实施不善造成的?

4

1 回答 1

2

SIFT 检测器在图像上使用一组高斯滤波器。这些过滤器的结果在图像子区域的边缘附近不会相同。如果您查看关键点位置,您会发现大多数变化的点是图像子区域附近的点。

此外,在 SIFT 算法中有一个关键点非极大值抑制阶段,其中关键点强度与最强关键点进行比较,如果太弱则丢弃。在完整图像中将使用全局最大值,而在基于区域的使用中,每个点都将使用正常子区域的最大值进行测试,从而导致小的差异。

于 2011-10-28T08:15:31.293 回答