我正在研究一些非常簡單的圖像解卷積以進行概念驗證。簡單圖像解卷積問題
目標是將圖像與內核(我使用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