我正在研究一些非常简单的图像解卷积以进行概念验证。简单图像解卷积问题
目标是将图像与内核(我使用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]])
滤波器的某些FFT结果是否会达到或接近零?当你试图按照他们划分时会发生什么? – 2015-03-19 03:43:00
@MarkRansom绝对接近于零,但结果就是这样糟糕的图片。我使用'scipy.misc.bytescale()'来确保最终的输出是正确的范围...没有它值更高。 – ajdigregorio 2015-03-19 03:47:47
@paintedcones - 我们可以访问原始图像吗?我想玩你的代码,看看发生了什么,但没有原始图像我不能这样做。 – rayryeng 2015-03-19 04:12:10