子图像上的 SIFT 描述符不能与整个图像上的 SIFT 描述符相加?
我在 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 的实施不佳造成的?
I use SIFT detectors and extractors in OpenCV 2.3 and find out that the number of keypoints detected on subimages do not sum up to the number of keypoints on the whole image.
Specifically, if I use SIFT detectors on an image A, the detector detects N SIFT key points.
If I divide A into four subregions A_1, A_2, A_3, A_4 and run detector on those regions respectively, the detector detects N_1, N_2, N_3, N_4 SIFT key points correspondingly.
Surprisingly, N_1 + N_2 + N_3 + N_4 IS NOT EQUAL TO N !
Is this phenomenon correct for SIFT algorithms? Or is this due to the poor implementation of OpenCV 2.3?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
SIFT 检测器在图像上使用一组高斯滤波器。这些滤波器的结果在图像子区域的边缘附近不会相同。如果您查看关键点位置,您会发现变化最多的点是图像子区域附近的点。
此外,在SIFT算法中,存在关键点非极大值抑制阶段,其中将关键点强度与最强关键点进行比较,如果弱则将其丢弃。在完整图像中,将使用全局最大值,而在基于区域的使用中,每个点将使用相同子区域的最大值进行测试,从而导致较小的差异。
The SIFT detector uses a set of Gaussian filters on the image. The results of these filters will not be the same near the edges of the image subregions. If you will look at key point locations, you will see that most changed points are those near the image subrigions.
Furthermore, in the SIFT algorithm there is a key point non maxima supression phase in which key point strength is compared to the strongest key point and discarded if to weak. in the full image the global maximum will be used, while in the region based use each point will be tested with the maxima of the sane sub region, leading to a small difference.