为什么scipy.signal.correlate2d()使用这种低效算法?

问题描述 投票:0回答:1

[几天前,我启动了一个脚本,以使用scipy.signal.correlate2d计算4096x4096图像的二维自相关。确切的电话是

zauto = signal.correlate2d(image, image, mode='full', boundary='wrap')

[三天后,它仍在运行,没有尽头。我最终意识到,它必须进行强力逐元素卷积,该过程与N ^ 2一起进行,因此4096 ^ 4 = 281万亿相乘并相加。

同时,我最终发现,可以通过对图像进行2-D FFT,将其转换为2-D功率谱,然后进行逆FFT来获得所需的结果;即,>

image -= np.mean(image)            # remove constant bias
zfft = np.fft.fft2(image)          # take 2-D FFT (complex)
zpower = zfft*np.conjug(zfft)      # convert to power spectrum
zauto = np.real(np.ifft2(zpower))  # take inverse FFT
zauto /= zauto[0,0]                # normalize

以上各行需要不到一分钟的时间才能完成。

我的问题:为什么scipy.signal.correlate2d至少不包括在可行时使用效率更高的算法的选项,而不是让用户发现它根本无法在较大的图像上使用的艰难方式?] >

[几天前,我启动了一个脚本,以使用scipy.signal.correlate2d计算4096x4096图像的二维自相关。确切的调用是zauto = signal.correlate2d(image,image,mode ='full'...

python scipy
1个回答
0
投票

恭喜,您已经重新发现了convolution theorem

开个玩笑,scipy does

© www.soinside.com 2019 - 2024. All rights reserved.