我有一组100K 64x64灰色补丁(已经对齐,意味着它们都具有相同的方向),我想使用OpenCV从每个补丁中提取一个SIFT描述符。
我很清楚,我需要做的是定义一个带有一个关键点kp的向量,使得:kp.x = 32,kp.y = 32。
但是,我不知道如何设置kp.size参数。通过浏览SIFT的代码,看起来它正在使用该参数进行一些非平凡的计算,而不是假设它是补丁的大小。
问题1:从大小为64x64的补丁中提取SIFT描述符时,kp.size参数应该是什么?
问题2:从大小为64x64的补丁中提取SURF描述符时,kp.size参数应该是什么?
答案 0 :(得分:2)
如果查看sift原始出版物,关键点的比例用于加权渐变幅度和方向的直方图(第6段。本地图像描述符)。因此,在您的情况下,由于灰色色块是对齐的,您可以决定是否要从色块中心进一步加权像素的贡献,并选择比例(即使用高斯加权窗口) )因此。
对于SURF,它基本上是相同的原理,除了使用对haar小波的响应而不是梯度幅度,但你仍然可以用高斯窗口对这些响应进行加权。
此外,由于您正在使用那些对齐的补丁,我建议您不要使用OpenCV的高级功能,而是简单地使用/重新编码描述符提取部分,并应用您想要计算补丁的任何权重表示。这样做的一个原因是,在SIFT示例中,SIFT描述符的计算可能会添加新的关键点"对于你提供的那个,如果算法是"不开心"在关键点方向上,它在相同位置复制关键点但方向不同。
答案 1 :(得分:2)
好。因此,SIFT描述符通常使用4x4网格的邻域,每个网格通常为4x4像素。因此,以像素为单位的邻域通常为16x16。比例/大小是确定关键点的下采样/模糊/半径的量的参数。所以我认为在你的情况下,这将是 4 。
你可能也知道SIFT关键点也适用于子像素层。 (32,32)不是图像补丁的确切中心,如果你的图像尺寸(x,y)从1开始,它实际上是(32.5,32.5)。如果它们从0开始,它将是(31.5, 31.5) - 与opencv的情况一样。