资源简介

这是用matlab实现图像复原的程序,包括逆滤波、维纳滤波、约束最小二乘方滤波。

资源截图

代码片段和文件信息

clear; 

I=imread(‘1.jpg‘);
I=rgb2gray(I);
figure; subplot(231);imshow(I);title(‘原图像‘); 
[mn]=size(I); 
F=fftshift(fft2(I)); 
k=0.0025; 
for u=1:m     %退化模型
    for  v=1:n      
        H(uv)=exp((-k)*(((u-m/2)^2+(v-n/2)^2)^(5/6)));   
    end
end

G0=F.*H; 
I0=real(ifft2(fftshift(G0))); 
noise=imnoise(zeros(size(I0))‘gaussian‘00.001) ;
I1=I0+noise;
subplot(233);imshow(uint8(I1));title(‘模糊退化且添加高斯噪声的图像‘); 

%逆滤波复原
G=fftshift(fft2(I1)); %傅里叶变换
F1=G./H; 
I2=ifft2(fftshift(F1)); 
subplot(234);imshow(uint8(I2));title(‘逆滤波复原图‘); 

%维纳滤波复原
K=0.1;                   
for u=1:m     
    for  v=1:n      
        H(uv)=exp(-k*(((u-m/2)^2+(v-n/2)^2)^(5/6)));     
        H0(uv)=(abs(H(uv)))^2;       
        H1(uv)=H0(uv)/(H(uv)*(H0(uv)+K));    
    end
end
F2=H1.*G; 
I3=ifft2(fftshift(F2));
subplot(235);imshow(uint8(I3));title(‘维纳滤波复原图‘);

%最小二乘方滤波
X=[0-10;-14-1;0-10];
L=zeros(mn);
for i=1:3
    for j=1:3
        L(ij)=X(ij);
    end
end
for u=1:m
    for v=1:n
P(uv)=fftshift(fft2(L(uv)));%拉布拉斯算子的傅里叶变化
end
end
s=0.1;
for u=1:m
    for v=1:n
        H(uv)=exp(-k*(((u-m/2)^2+(v-n/2)^2)^(5/6)));
        H0(uv)=(abs(H(uv)))^2;
        P0(uv)=(abs(P(uv)))^2;
        H2(uv)=conj(H(uv));%共轭
        H1(uv)=H2(uv)/(H0(uv)+P0(uv)*s);
    end
end
F3=H1.*G;
I4=ifft2(fftshift(F3));
subplot(236);imshow(uint8(I4));title(‘最小二乘方滤波复原图‘);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5994  2014-05-16 11:38  图像复原\1.jpg
     文件        1512  2014-05-27 21:20  图像复原\weina.asv
     文件        1521  2014-05-27 21:23  图像复原\weina.m
     文件      235520  2014-05-27 22:25  图像复原\图像复原.doc
     目录           0  2014-05-27 22:31  图像复原\

评论

共有 条评论