我正在研究一些非常简单的图像反卷积以证明概念。
目标是将图像与内核(我使用的是 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
进行扁平化阅读:
就其值(value)而言,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]])
最佳答案
好的,所以我实际上能够弄明白。事实证明这是我内核的一个“问题”。我发现,一般来说,sigma > 1 的高斯核会产生这种奇怪的噪声问题。正如@MarkRansom 在评论中指出的那样,过滤器的 fft 变得非常接近于零。出于某种原因,当我们使用 σ<1 的内核时,噪声放大会少得多。
关于python - 简单图像反卷积问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136706/