我在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筛选关键点。令人惊讶的是,N_1 + N_2 + N_3 + N_4不等于N!
这种现象对于SIFT算法是正确的吗?或者这是由于OpenCV 2.3的糟糕实现所致?
发布于 2011-10-28 16:15:31
SIFT检测器对图像使用一组高斯滤波器。这些滤波器的结果在图像子区域的边缘附近将不会相同。如果你观察关键点的位置,你会发现大多数改变的点都是那些靠近图像子的点。
此外,在SIFT算法中存在一个关键点非最大值抑制阶段,在该阶段将关键点强度与最强关键点进行比较,如果关键点强度最强,则将其丢弃。在完整的图像中,将使用全局最大值,而在基于区域的使用中,每个点将使用sane子区域的最大值进行测试,从而导致小的差异。
https://stackoverflow.com/questions/7925013
复制相似问题