使用 matlab 數字影象處理(九)—— 去卷積(deconvolution,逆濾波復原)
阿新 • • 發佈:2018-11-12
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
在沒有噪聲的情況下,頻域退化模型可由下式給出:
G(u,v)=H(u,v)F(u,v) 充當分母,在很多情況下傳遞函式的值為 0 或接近 0,此時得到的結果往往是極度不準確的。一種解決方法是, 僅對半徑在一定範圍內的傅立葉係數進行運算,由於通常低頻係數值較大,高頻係數接近於0,這種方法能大大減少遇到 0 的概率
模擬測試
(1)原始影象退化
clear all; close all;clcI = imread('pout.tif');f = im2double(I);subplot(1, 3, 1), imshow(f), title('原始影象')F = fftshift(fft2(f));[M, N] = size(F);[u, v] = meshgrid(1:N, 1:M);k = 0.0025;H = exp(-k*((v-M/2).^2+(u-N/2).^2).^(5/6));G = F.*H;g = ifft2(ifftshift(G));g = uint8(abs(g)*255
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
(2)去卷積函式的實現:
function I_new = deconv(I, H, thresh)if size(I, 3) == 3, I = rgb2gray(I);endI = im2double(I);G = fftshift(fft2(I));[M, N] = size(G);F = G;[x, y] = meshgrid(1:N, 1:M);if thresh > M/2, F = G./(H+eps);else idx = (x-N/2).^2 + (y-M/2).^2 < thresh^2; F(idx) = G(idx)./(H(idx)+eps);endI_new = ifft2(ifftshift(F));I_new = uint8(abs(I_new)*255);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18