图像复原的Matlab实现(源代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附录:源代码:
1、高斯噪声的添加以及滤波处理
I= imread('E: \lena.bmp','bmp');
J=imnoise(I,'gaussian',0,0.01);
figure;
subplot(1,2,1);
imshow(I);
title('源图像lena.bmp');
subplot(1,2,2);
imshow(J);
title('加入gaussian噪声后的lena.bmp');
n1=7;sigma1=1.5;n2=3;sigma2=1.5;theta=0;
r=[cos(theta) -sin(theta); sin(theta) cos(theta)];
for i = 1 : n2
for j = 1 : n1
u = r*[j-(n1+1)/2 i-(n2+1)/2]';
h(i,j)=exp(-u(1)^2/(2*sigma1^2))/(sigma1*sqrt(2*pi))*exp(-u(2)^2/
(2*sigma2^2))/(sigma2*sqrt(2*pi)); end
end
h = h / sqrt(sum(sum(h.*h)));
f1=conv2(J,h,'same');
subplot(1,2,2);
figure;
imagesc(f1);
title('高斯平滑后的lena.bmp(7x7)');
colormap(gray);
2、图像模糊及添加噪声
①图像的运动模糊
I= imread('E: \lena.bmp','bmp');
figure;
subplot(1,2,1);
imshow(I);
title('源图像lena.bmp');
f=double(I); % 数据类型转换,MATLAB不支持图像的无符号整型的计算
g=fft2(f); % 傅立叶变换
g=fftshift(g); % 转换数据矩阵
[M,N]=size(g);
a=0.5;b=0.5;T=0.1;
m=fix(M/2);
n=fix(N/2);
j=sqrt(-1);
for i=1:M
for k=1:N
h=(T/(pi*(i*a+k*b)))*sin(pi*(i*a+k*b))*exp(-j*pi*(i*a+k*b)); end
result(i,k)=h*g(i,k);
end
result=ifftshift(result);
J1=ifft(result);
J2=uint8(real(J1));
subplot(1,2,2);
imshow(J2);
title('模糊化lena.bmp');
②图像加噪
figure;subplot(1,2,1);
imshow(J2);
title('运动模糊后的lena.bmp(角度为45)');
J3=imnoise(J2,'gaussian',0,0.01);
subplot(1,2,2);
imshow(J3);
title('加噪并模糊的lena.bmp');
3、图像恢复
①维纳滤波恢复图像
I= imread('E: \lena.bmp','bmp');
H=fspecial('motion',50,45);
J=imfilter(I,H,'circular','conv');
figure;
subplot(1,2,1);
imshow(J);
title('运动模糊后的lena.bmp(角度为45)');
J1=imnoise(J,'gaussian',0,0.01);
subplot(1,2,2);
imshow(J1);
title('加噪并模糊的lena.bmp');
%figure;
J2=deconvwnr(J1,H),[]);
imshow(J2);
title('模糊噪声图像的维纳滤波复原');
figure;
noise=imnoise(zeros(size(I)),'gaussian',0,0.01);
NSR=sum(noise(:).^2)/sum(im2double(I(:)).^2);
J3=deconvwnr(J1,H,NSR);
imshow(J3);
title('引入SNR的维纳滤波复原');
②约束最小二乘方法恢复图像
I= imread('E:\lena.bmp','bmp');
I1=checkerboard(8);
PSF=fspecial('motion',50,45);
V=0.0001;
J=imfilter(I,PSF,'circular','conv'); J1=imnoise(J,'gaussian',0,0.01); figure;subplot(1,2,1);
imshow(J1);
title('模糊加噪图像');
NoisePower=V*prod(size(I));
[G,LAGRA]=deconvreg(J,PSF,NoisePower); subplot(1,2,2);
imshow(G);
title('约束最小二乘滤波复原');。