我正在进行一些非常简单的图像去卷积以证明概念。目标是将一个图像与一个核(我使用的是一个5*5的高斯矩阵)卷积,然后在傅里叶域中去卷积它。通过对图像矩阵和过滤器核心进行FFT、元素乘法,然后对结果进行iFFT,我能够实现与滑动内核卷积相同的结果。要撤消这个卷积,我应该能够元素地分割图像的FFT和过滤器的FFT。但是,当我尝试实现这个时,我得到了一个非常奇怪的纹理东西。我知道我的方法是正确的,但我似乎找不到代码中的错误,这让我疯狂。
# blur image
imblur = filters.convolve(im1, blurfilter)
# compute fft of kernel with padding
padfilfft = np.fft.fft2(blurfilter, s=im1.shape[:2], axes=(0,1))
# take fft of image
imfft = np.fft.fft2(imblur)
# element division
deconvolveimfft = np.divide(imfft, padfilfft)
deconvolveim = np.abs(np.fft.ifft2(deconvolveimfft))
以下是使用plt.imshow()的输出结果:
这是原始图片。我使用misc.imread进行读取并压平:
值得一提的是,blurfilter定义如下:
blurfilter = (1./273.) * np.array([[1,4,7,4,1],[4,16,26,16,4],[7,26,41,26,7],[4,16,26,16,4],[1,4,7,4,1]])
scipy.misc.bytescale()
确保最终输出处于正确的范围...如果没有它,值会高得多。 - ajdigregorio