简单图像解卷积问题

时间:2015-03-19 03:24:50

标签: python python-2.7 image-processing

我正在进行一些非常简单的图像反卷积以证明概念。

目标是将图像与内核进行卷积(我使用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()的输出:

typical, problematic output

这是原始图片。我正在使用展平的misc.imread来阅读它: cheering

对于它的价值,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]])

1 个答案:

答案 0 :(得分:1)

好的,所以我实际上能够搞清楚。结果证明这是我内核的“问题”。我发现,一般来说,高斯内核具有sigma> 1会产生这个奇怪的噪音问题。正如@MarkRansom在评论中指出的那样,滤波器的fft非常接近于零。出于某种原因,当我们使用σ<1的内核时,噪声放大要少得多。