[几天前,我启动了一个脚本,以使用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'...
恭喜,您已经重新发现了convolution theorem!
开个玩笑,scipy
does