1. 程式人生 > >使用 matlab 數字影象處理(九)—— 去卷積(deconvolution,逆濾波復原)

使用 matlab 數字影象處理(九)—— 去卷積(deconvolution,逆濾波復原)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!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
    );subplot(1, 3, 2), imshow(g), title('退化影象')I = deconv(g, H, 128);       % 可嘗試不同的半徑,1281087848subplot(1, 3, 3), imshow(I), title('復原影象')
    • 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
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述