归一化互相关的归一化因子的快速计算

信息处理 互相关
2022-02-04 23:37:30

这里有很多帖子,我浏览过这些帖子解释了 Python 中标准化互相关的实现。以下是经常引用的一种此类实现。

def normxcorr2(template, image, mode="full"):
    
    template = template - np.mean(template)
    image = image - np.mean(image)

    a1 = np.ones(template.shape)
    # Faster to flip up down and left right then use fftconvolve instead of scipy's correlate
    ar = np.flipud(np.fliplr(template))
    out = fftconvolve(image, ar.conj(), mode=mode)
    
    image = fftconvolve(np.square(image), a1, mode=mode) - \
            np.square(fftconvolve(image, a1, mode=mode)) / (np.prod(template.shape))

    # Remove small machine precision errors after subtraction
    image[np.where(image < 0)] = 0

    template = np.sum(np.square(template))
    out = out / np.sqrt(image * template)

    # Remove any divisions by 0 or very close to 0
    out[np.where(np.logical_not(np.isfinite(out)))] = 0
    
    return out

https://github.com/Sabrewarrior/normxcorr2-python/blob/master/normxcorr2.py

我的理解是,归一化项是两个输入图像的自相关的平方根。

C=i=1n(I(i)I¯)(J(i)J¯)i=1n(I(i)I¯)2j=1n(J(i)J¯)2

两张图片IJ分别。我很难理解这条线:

image = fftconvolve(np.square(image), a1, mode=mode) - \
        np.square(fftconvolve(image, a1, mode=mode)) / (np.prod(template.shape))

这是计算其中一个输入图像的自相关的聪明方法吗?为什么不采用像“模板”图像那样的自相关呢?

0个回答
没有发现任何回复~