我正在做一些非常简单的图像反褶积来证明概念。在
我们的目标是用核卷积图像(我使用的是5*5高斯矩阵),然后在傅里叶域中对其进行反褶积。在
通过对图像矩阵和滤波器核进行FFT运算,实现了元素相乘 他们在一起,并采取的结果,我能够达到同样的结果 作为滑动核卷积。为了解开这个卷积,我应该能够进行元素除法 图像的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))
以下是使用IMPLT显示():
{1美元^
这是原图。我在使用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]])
好吧,所以我真的能弄明白。结果是我的内核出了问题。我发现,一般来说,带有sigma>;1的高斯核会产生这种奇怪的噪声问题。正如@MarkRansom在评论中指出的,滤波器的fft非常接近于零。由于某些原因,当我们使用σ<;1的核时,噪声放大要小得多。在
相关问题 更多 >
编程相关推荐