2011-10-28 26 views
1

我在OpenCV 2.3中使用了SIFT检测器和提取器,并发现在子图像上检测到的关键点数量并不等于整个图像上的关键点数量。子图像上的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的不好实现?

回答

2

SIFT检测器在图像上使用一组高斯滤波器。这些滤镜的结果在图像分区边缘附近不会相同。如果您要查看关键点位置,您将看到大多数改变的点是图像划分附近的点。

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

+0

非常感谢!这真的很有帮助! –