使用 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

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hftytf/article/details/83935089
今日推荐