DoG 图像在 python SIFT 实施中显示比预期更多的极端

DoG images displaying more extremes than expected in python SIFT implementation

我正在 python 翻译 Lowe 关于 SIFT 的论文。我正在为高斯结果的差异而苦苦挣扎,它展示了非常极端的图像,即它们在灰度上分布不均匀。我正在构建比例 space 如下

def L(sig,I):
    return cv2.GassianBlur(I,(25,25),sig)

sig0 = sqrt(2)
sig = sig0
k=math.sqrt(2)
o=[]
Li=[L(sig,I0)]
for i in range(nspo):
    Li.append(L(k*sig,I0))
    Di = np.subtract(Li[i+1],Li[i])
    sig = k*sig
    o.append(Di)

从 Weitz 博士的教程中汲取灵感,我注意到我的结果与他的不同,因为他生成的 DoG 图像在灰度上均匀分布,而我的结果往往更极端 space。下面是 Weitz 博士教程中使用的示例帧、生成的上采样 DoG 以及我使用上述算法导出的 DoG。在此先感谢您对此难题的任何提示或建议或解决方案。



您的输入图像似乎具有类型 uint8,因此当您调用 np.subtract(Li[i+1], Li[i]) 时,您将减去无符号整数。在差异图像中,因为任何负值都会环绕到 255,所以您会看到像这里一样的亮白色区域。

您可以在首次加载时将输入图像转换为 float32,或者您可以使用 float32 强制 numpy 进行减法,如下所示:

np.subtract(Li[i+1], Li[i], dtype='float32')