使用 SIFT 在 OpenCV 中进行关键点检测
Keypoints detection in OpenCV with SIFT
我对 OpenCV 中图像的关键点检测有疑问。
例如,如果我有一个 SIFT 检测器,当它检测到图像时,它会检索 1000 个关键点,但如果我将图像分成两个 "sub-image",并且 foreach SIFT 检测到关键点,则总和不是 1000,而是更少。
对我来说,关键点总数可以不同但不会太多!
谢谢
这并不是真正的问题,但显然核心问题是这样的:
Why do two images separated have a different number of SIFT keypoints (usually less) than if they are concatenated into a single image?
基本的答案是特征可以很大,并且可以靠近两个子图像的边界。如果它们被拆分,这些功能将不复存在。实际上,不应期望 SIFT 产生相同数量的关键点。如果您严格地将特征视为角,那么可以肯定的是,无论哪种方式,您都应该获得大致相同的数量。但是一些特征以梯度、粗糙"blobs"等形式出现,可以很容易地被分割图像切断,因此分割图像可以去除这些特征,并且可以类似地复制其他特征。
您通常可以通过仅检查完全位于两个子图像边界内的那些特征来验证这一点。如果您移除靠近图像边缘的特征,并且仅检查组合图像中相同 space 中的特征,您应该会看到两者中相似数量的特征。
想象一下,如果你将图像分割的过程发挥到极致。图像中通常有 lot 个 SIFT 关键点。如果将其分解为大量 2x2 图像,您认为您会得到相同数量的关键点吗?当然不是,因为 2x2 图像没有足够的信息来重新创建与完整图像相同的所有特征。
我对 OpenCV 中图像的关键点检测有疑问。 例如,如果我有一个 SIFT 检测器,当它检测到图像时,它会检索 1000 个关键点,但如果我将图像分成两个 "sub-image",并且 foreach SIFT 检测到关键点,则总和不是 1000,而是更少。 对我来说,关键点总数可以不同但不会太多! 谢谢
这并不是真正的问题,但显然核心问题是这样的:
Why do two images separated have a different number of SIFT keypoints (usually less) than if they are concatenated into a single image?
基本的答案是特征可以很大,并且可以靠近两个子图像的边界。如果它们被拆分,这些功能将不复存在。实际上,不应期望 SIFT 产生相同数量的关键点。如果您严格地将特征视为角,那么可以肯定的是,无论哪种方式,您都应该获得大致相同的数量。但是一些特征以梯度、粗糙"blobs"等形式出现,可以很容易地被分割图像切断,因此分割图像可以去除这些特征,并且可以类似地复制其他特征。
您通常可以通过仅检查完全位于两个子图像边界内的那些特征来验证这一点。如果您移除靠近图像边缘的特征,并且仅检查组合图像中相同 space 中的特征,您应该会看到两者中相似数量的特征。
想象一下,如果你将图像分割的过程发挥到极致。图像中通常有 lot 个 SIFT 关键点。如果将其分解为大量 2x2 图像,您认为您会得到相同数量的关键点吗?当然不是,因为 2x2 图像没有足够的信息来重新创建与完整图像相同的所有特征。