MATLAB 图像复原

f = ones(512,512);%f是一个大小为512*512的白色图像
%叠加了高斯噪声的图像,噪声均值为0,方差为0.01
g1 =imnoise( f, 'gaussian', 0, 0.01);imshow( g1, []);%显示退化的图像

%叠加了椒盐噪声的图像,1%的像素受到污染
g2 = imnoise( f, 'salt & pepper', 0.01);

figure,imshow(g2,[]);%显示退化的图像
%叠加了乘性噪声的噪声,噪声均匀分布,均值为0,方差为0.01,g3=f+n*f
g3=imnoise(f,'speckle',0.01);
figure,imshow(g3,[]);%显示退化的图像

f=imread('你的图');                     
subplot(3,3,1);imshow(f,[]);title('(f)原始图像');
[M,N]=size(f);
R=imnoise2('salt & pepper',M,N,0.1,0);        %产生胡椒噪声
c=find(R==0);                       %记录噪声对应点的坐标
gp=f;                              %复制图像
gp(c)=0;                           %将图像中胡椒对应地点的值赋为0
subplot(3,3,2);imshow(gp,[]);title('胡椒噪声')
R=imnoise2('salt & pepper',M,N,0.1,0);        %产生盐粒噪声
c=find(R==0);                       %记录噪声对应点的坐标
gs=f;                              %复制图像
gs(c)=255;                            %将图像中盐粒对应地点的值赋为0
subplot(3,3,3);imshow(gs,[]);title('盐粒噪声');
fp=spfilt(gp,'midpoint',3,3);            %使用中点平均滤波器去除胡椒噪声
subplot(3,3,4);imshow(fp,[]);title('中点滤波器');
fs=spfilt(gs,'median',3,3);              %使用中值滤波器去除胡椒噪声
subplot(3,3,5);imshow(fs,[]);title('中值滤波器');
fpmax=spfilt(gp,'max',3,3);            %使用3x3最大值滤波器去除胡椒噪声
subplot(3,3,6);imshow(fpmax,[]);title('最大值滤波器');
fsmin=spfilt(gs,'min',3,3);             %使用3x3最小值滤波器去除盐粒噪声
subplot(3,3,7);imshow(fsmin,[]);title('最小值滤波器');

f=imread('你的图');%加载测试图像,f参见图5-1
[M,N]=size(f);%M、N是测试图像的大小
C=[6 32;-2 2];%C是周期噪声在频谱上的位置
A=[10000 50000];%A是振幅向量
[r,R,S]=imnoise3(M,N,C,A);%产生周期噪声
imshow(S,[]);%S是周期噪声的频谱
figure,imshow(r,[]);%r是周期噪声图像,有明显的明暗条纹显示
g=im2double(f)+r;   %噪声图像放大10000倍后与测试图像相加
figure,imshow(g,[]) 

f=checkerboard(8);%创建一副黑白棋盘格测试图像
PSF=fspecial('motion',7,45);%创建运动模糊退化函数
gb=imfilter(f,PSF,'circular');%产生退化图像
noise=imnoise(zeros(size(f)),'gaussian',0,0.001);
g=gb+noise;%退化图像叠加高斯噪声
imshow(g,[]);%显示退化图像

f=checkerboard(8);            %创建一副黑白棋盘格测试图像
subplot(2,3,1); imshow(f,[]); title('(f)原始图像');
PSF=fspecial('motion',7,45);      %创建运动模糊退化函数
gb=imfilter(f,PSF,'circular');       %产生退化图像
g=imnoise(gb,'gaussian',0,0.01);   %退化图像叠加高斯噪声
subplot(2,3,2); imshow(g,[]); title('(g)加燥和运动模糊图像');
fr1=deconvwnr(g,PSF);           %直接逆滤波复原噪声图像
subplot(2,3,3);imshow(fr1,[]);title('(fr1)逆滤波复原图像');
Sn=abs(fft2(g)).^2;          %噪声功率谱
nA=sum(Sn( : ))/numel(g);    %噪声平均功率,此处将原来的prod(size(X))函数,变为numel(x);
Sf=abs(fft2(f)).^2;           %图像功率谱
fA=sum(Sf( : ))/numel(f);     %图像平均功率
R=nA/fA;                  %R是噪信比
fr2=deconvwnr(g,PSF,R);      %采用常系数对图像进行维纳滤波
subplot(2,3,4);imshow(fr2,[]);title('(fr2)常数比率维娜滤波复原图像');
NCORR=fftshift(real(ifft2(Sn)));        %NCORR是噪声的自相关函数
ICORR=fftshift(real(ifft2(Sf)));           %ICORR是原图像的自相关函数
fr3=deconvwnr(g,PSF,NCORR,ICORR);     %使用自相关函数的滤波方法
subplot(2,3,5);imshow(fr3,[]);title('(fr3)自相关函数维娜滤波复原图像');
fr4=deconvreg(g,PSF,0.4,[1e-7,1e7]);     %使用约束的最小二乘方滤波
subplot(2,3,6);imshow(fr4,[]);title('(fr4)最小二乘方滤波复原图像'); 

fr1=deconvwnr(g,PSF);%直接逆滤波复原噪声图像
figure,imshow(fr1,[]);

Sn=abs(fft2(noise)).^2;%噪声功率谱
nA=sum(Sn( : ))/prod(size(noise));%噪声平均功率
Sf=abs(fft2(f)).^2;%图像功率谱
fA=sum(Sf( : ))/prod(size(f));%图像平均功率
R=nA/fA;%R是噪信比
fr2=deconvwnr(g,PSF,R);%采用常系数对图像进行维纳滤波
figure,imshow(fr2,[]);

NOCRR=fftshift(real(ifft2(Sn)));%NCORR是噪声的自相关函数
ICORR=fftshift(real(ifft2(Sf)));%ICORR是原图像的自相关函数
fr3=deconvwnr(g,PSF,NCORR,ICORR);%使用自相关函数的滤波方法
figure,imshow(fr3,[]);

fr4=deconvreg(g,PSF,0.4,[1e-7,1e7]);%使用约束的最小二乘方滤波
figure,imshow(fr4,[]);

  

f=checkerboard(50);%产生测试棋盘格图像
s=0.8; %s是缩放稀疏
theta=pi/6;%theta是旋转角度
%T是仿射变换矩阵
T=[s*cos(theta) s * sin(theta) 0; -s * sin(theta) s * cos(theta) 0; 0 0 1]; 
tform=maketform('affine',T);       %thorm是仿射变换结构体
g=imtransform(f,tform);           %对图像f施加仿射变换
imshow(f); 
figure,imshow(g,[]);

 

 

  • 7
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值