欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MATLAB数字图像处理实验二

程序员文章站 2022-04-01 10:29:04
...

MATLAB数字图像处理实验二

实验一:给出不同的参数,模拟图像的高斯模糊图并显示;
实验二:给出不同的参数,模拟图像的运动模糊图并显示;
实验三:对2中的图像进行反滤波、维纳滤波并显示滤波后在结果;
实验四:对2中的图像加不同的噪声后进行反滤波、维纳滤波并显示滤波后在结果。

%%实验一
I=imread('hei.png');
subplot(221),imshow(I),title('原图');
I1=imfilter(I,fspecial('gaussian',[5 5],0.1));
subplot(222),imshow(I1),title('0.1的gaussian模糊');
I1=imfilter(I,fspecial('gaussian',[5 5],0.5));
subplot(223),imshow(I1),title('0.5的gaussian模糊');
I1=imfilter(I,fspecial('gaussian',[5 5],1.0));
subplot(224),imshow(I1),title('1.0的gaussian模糊');

%%
%%实验二
I=imread('hei.png');
subplot(221),imshow(I),title('原图');
I=imfilter(I,fspecial('motion',1));
%%fspecial('motion',len,theta)逆时针方向以theta角度运动了len个像素
subplot(222),imshow(I),title('0°方向运动1个像素');
I=imfilter(I,fspecial('motion',3,2));
subplot(223),imshow(I),title('2°方向运动3个像素');
I=imfilter(I,fspecial('motion',9,20));
subplot(224),imshow(I),title('20°方向运动9个像素');
%%
%%实验三
I=imread('hei.png');
I1=imfilter(I,fspecial('gaussian',[5 5],1.0));
x=rgb2gray(I1); 
x1=x(:,:,1);
x1=double(x1);
[r,r1]=size(x1);
y1=fftshift(fft2(x1));
[r,r1]=size(y1);
subplot(221),imshow(x1,[]),title('原始的图像');

m=1:r; 
m1=1:r1; 
[m,m1]=meshgrid(m,m1);%生成网格空间 
noise=20.*imnoise(zeros(r,r1),'gaussian');%高斯噪声
subplot(222),imshow(noise,[]),title('参数为0的guassian噪音');

a=double(21/100);%x方向的最大移动量为ra的0.21倍,可调
b=double(21/100);%y方向的最大移动量为ca的0.21倍,可调
t=double(88/100);%移动到最大所需的时间默认为0.88
f=ones(r,r1);
g=(m-r/2-1).*a+(m1-r1/2-1).*b+eps;
f=t.*sin(pi.*g).*exp(-j.*pi.*g)./(pi.*g);
h=f'.*y1;
tu=ifft2(h);
tu=abs(tu)+noise;
y1=h./f';
subplot(223);
imshow(abs(ifft2(y1)),[]);
title('逆滤波');
h=fftshift(fft2(tu));
x=fftshift(fft2(noise));
K=x.*conj(x)./(y1.*conj(y1));%计算K值
w=(f.*conj(f))'.*h./(f.*(f.*conj(f)+K'))';
weina=abs(ifft2(w));
subplot(224);
imshow(weina,[]);
title('维纳滤波');
%%
%%实验四
clear;
clc;
I=imread('hei.png');
I1=imfilter(I,fspecial('gaussian',[5 5],1.0));
x=rgb2gray(I1); 
x1=x(:,:,1);
x1=double(x1);
[r,r1]=size(x1);
y1=fftshift(fft2(x1));
[r,r1]=size(y1);
subplot(221),imshow(x1,[]),title('原始的图像');
m=1:r; 
m1=1:r1; 
[m,m1]=meshgrid(m,m1);%生成网格空间 
noise=20.*imnoise(zeros(r,r1),'gaussian',0,0.006);%高斯噪声
subplot(222),imshow(noise,[]),title('参数为0.0006的guassian噪音');
a=double(21/100);%x方向的最大移动量为ra的0.21倍,可调
b=double(21/100);%y方向的最大移动量为ca的0.21倍,可调
t=double(88/100);%移动到最大所需的时间默认为0.88
f=ones(r,r1);
g=(m-r/2-1).*a+(m1-r1/2-1).*b+eps;
f=t.*sin(pi.*g).*exp(-j.*pi.*g)./(pi.*g);
h=f'.*y1;
tu=ifft2(h);
tu=abs(tu)+noise;
y1=h./f';
subplot(223),imshow(abs(ifft2(y1)),[]);title('逆滤波');
h=fftshift(fft2(tu));
x=fftshift(fft2(noise));
K=x.*conj(x)./(y1.*conj(y1));%计算K值
w=(f.*conj(f))'.*h./(f.*(f.*conj(f)+K'))';
weina=abs(ifft2(w));
subplot(224),imshow(weina,[]),title('维纳滤波');