09CK数字图像处理实验报告二msl.docx
《09CK数字图像处理实验报告二msl.docx》由会员分享,可在线阅读,更多相关《09CK数字图像处理实验报告二msl.docx(18页珍藏版)》请在冰豆网上搜索。
09CK数字图像处理实验报告二msl
数字图像处理
实验报告二
2011/12/10
测控0901
林杰
实验2图像平滑实验
一、实验目的
1.通过实验掌握图像去噪的基本方法;
2.学会根据情况选用不同方法。
二、实验的硬件、软件平台
硬件:
计算机
软件:
操作系统:
WINDOWS7
应用软件:
MATLAB
三、实验内容及要求
1.实验内容
请在如下面方法中选择多个,完成图像去噪操作,并进行分析、比较。
(1)对静态场景的多幅图片取平均;
(2)空间域模板卷积(不同模板、不同尺寸);
(3)频域低通滤波器(不同滤波器模型、不同截止频率);
(4)中值滤波方法。
2.实验要求
(1)图片可根据需要选取;
(2)对不同方法和同一方法的不同参数的实验结果进行分析和比较,如空间域卷积模板可有高斯型模板、矩形模板、三角形模板和自己根据需求设计的模板等;模板大小可以是3×3,5×5,7×7或更大。
频域滤波可采用矩形或巴特沃斯等低通滤波器模型,截止频率也是可选的。
(3)分析比较不同方法的结果。
四、思考题
1.不同空间域卷积器模板的滤波效果有何不同?
2.空间域卷积器模板的大小的滤波效果有何影响?
3.用多幅图像代数平均的方法去噪对图像有何要求?
4.不同频域滤波器的效果有何不同?
五、实验报告要求
1.列出程序清单并进行功能注释;
2.说明不同方法去噪效果;
3.对去噪方法进行详细分析对比。
******************对静态场景的多幅图片取平均************************
实验代码如下
clc
clearall
a1=imread('lenna_noise1.bmp');%读入图片
a2=imread('lenna_noise2.bmp');
a3=imread('lenna_noise3.bmp');
a4=imread('lenna_noise4.bmp');
a5=imread('lenna_noise5.bmp');
a6=imread('lenna_noise6.bmp');
a7=imread('lenna_noise7.bmp');
a8=imread('lenna_noise8.bmp');
b1=double(a1)/255;%变换图像数据类型
b2=double(a2)/255;
b3=double(a3)/255;
b4=double(a4)/255;
b5=double(a5)/255;
b6=double(a6)/255;
b7=double(a7)/255;
b8=double(a8)/255;
c=(b1+b2+b3+b4+b5+b6+b7+b8)/8;%八幅图取平均
subplot(331),imshow(a1);%三行三列,显示图像1-8
subplot(332),imshow(a2);subplot(333),imshow(a3);subplot(334),imshow(a4);subplot(335),imshow(a5);
subplot(336),imshow(a6);subplot(337),imshow(a7);
subplot(338),imshow(a8);
subplot(339),imshow(c)%%显示平均后的图像
******************空间域模板卷积(不同模板、不同尺寸)***************
%%邻域模板
clc
clearall
i=imread('Panda_jiaoyan.bmp');%读入图像
i=double(i)/255;%变换数据类型
subplot(221);
imshow(i);%显示图像
title('原图像');h=1/5*[010;101;010];%定义4邻域平均模板
a=filter2(h,i);%进行滤波
subplot(222);
imshow(a);%显示图像
title('4邻域平均模板');
subplot(223);
h=1/12*[0110;1111;1111;0110];%定义8邻域平均模板
a=filter2(h,i);
imshow(a);title('8邻域平均模板');
subplot(224);
h=1/12*[01110;11111;11111;01110];%定义12邻域平均模板
a=filter2(h,i);
imshow(a);
title('12邻域平均模板')
%%高斯模板
clc
clearall%高斯模板
i=imread('Panda_jiaoyan.bmp');%读入图像
i=double(i)/255;%数值转换
subplot(231);
imshow(i);%显示图像%选用3*3的高斯模板
title('原图像(高斯模板)')
h=fspecial('gaussian');%产生预定义滤波器
%格式为b=fspecial(A,[m,n]);这里[m,n]是邻域大小,默认值为【3,3】
a=filter2(h,i);%对图像进行卷积滤波的函数格式:
A=filter2(h,B)
%其函数返回图像B经算子h滤波后的图像给A
subplot(232);imshow(a);title('3*3')
subplot(233);h=fspecial('gaussian',[55]);a=filter2(h,i);imshow(a);
title('5*5')%选用5*5的高斯模板
subplot(234);h=fspecial('gaussian',[77]);%选用7*7的高斯模板
a=filter2(h,i);imshow(a);title('7*7')
subplot(235);h=fspecial('gaussian',[99]);%选用9*9的高斯模板
a=filter2(h,i);imshow(a);title('9*9')
subplot(236);
h=fspecial('gaussian',[1111]);%选用11*11的高斯模板
a=filter2(h,i);imshow(a)
title('11*11')
加权模板
%加权模板
i=imread('Panda_jiaoyan.bmp');%读入图像
i=double(i)/255;%数据类型转换?
subplot(1,3,1);
imshow(i);%显示图像
title('原图像')
h=1/10*[111;121;111];%选用3*3的加权平均模板
a=filter2(h,i);
subplot(1,3,2);
imshow(a);
title('3*3的加权平均模板')
subplot(1,3,3);
h=1/48*[01210;12421;24842;12421;01210];%选用5*5的加权平均模板
a=filter2(h,i);
imshow(a);
title('5*5的加权平均模板')
******************中值滤波方法完成图像去噪操作***********************
clc
clearall%高斯模板
i=imread('Panda_jiaoyan.bmp');%读入图像
i=double(i)/255;%数值转换
subplot(221);
imshow(i);%显示图像
title('原图像(中值)')
a=medfilt2(i,[33]);%%中值滤波函数medfilt2,m行n列的滤波器
subplot(222);imshow(a);title('3*3')
subplot(223);
a=medfilt2(i,[55]);imshow(a);title('5*5')%选用5*5
subplot(224);a=medfilt2(i,[77]);imshow(a);
title('7*7')
******频域低通滤波器(不同滤波器模型、不同截止频率)完成图像去噪操作**
clc
clearall%高斯模板
i=imread('noise1.bmp');%读入图像
i=double(i)/255;%数值转换
figure;imshow(i);%显示图像
title('原图像')
figure;%%%理想低通滤波器
[f1,f2]=freqspace(25,'meshgrid');%频率响应的频率空间
Hd=zeros(25,25);
d=sqrt(f1.^2+f2.^2)<0.1;%低通滤波器的响应
Hd(d)=1;mesh(f1,f2,Hd)
figure;
a=filter2(Hd,i);
imshow(a);
%%截止频率为20Hz
i=imread('noise1.bmp');%读入图像
subplot(2,3,1);%显示2行3列第一幅图像
imshow(i);%显示图像
a=fft2(double(i));%进行傅里叶变换
subplot(2,3,2);%显示2行3列第二幅图像
imshow(abs(a),[]);%显示实数部分
s=log(1+abs(a));%进行对数运算,降低灰度值
subplot(2,3,3);%显示2行3列第三幅图像
imshow(abs(s),[]);%显示降低灰度后的傅里叶频谱
fc=fftshift(a);%把频谱移中
s=log(a+abs(fc));%把移中的频谱进行对数运算,提高灰度
subplot(2,3,4);%显示2行3列第四幅图像
imshow(abs(s),[]);%显示图像
[m,n]=size(fc);%获取频谱图大小
fori=1:
m%进行点运算
forj=1:
n%计算频率平面道远点的距离
u=floor(i-m/2);v=floor(j-n/2);d=(u^2+v^2)^0.5;
h(i,j)=1/(1+(d/20)^2);%定义巴特沃斯低通滤波器
fe(i,j)=h(i,j)*fc(i,j);%进行巴特沃斯低通滤波
end
end
[m,n]=size(fc);%获取频谱图大小
fori=1:
m%进行点运算
forj=1:
n
u=floor(i-m/2);%计算频率平面道远点的距离
v=floor(j-n/2);
d=(u^2+v^2)^0.5;
ifd<20%定义理想低通滤波器
h(i,j)=1;
else
h(i,j)=0;
end
fa(i,j)=h(i,j)*fc(i,j);
end
end
FF=ifftshift(fe);%对经巴特沃斯处理的频谱进行逆移中
ff=real(ifft2(FF));%取傅里叶逆变换的实数部分
AA=ifftshift(fa);%对经理想滤波处理的频谱进行逆移中
aa=real(ifft2(AA));%取傅里叶逆变换的实数部分
subplot(2,3,5);%显示2行3列第五幅图像
imshow(uint8(ff));%显示图像
subplot(2,3,6);%显示2行3列第六幅图像
imshow(uint8(aa));%显示图像
%%%%截止频率为70
i=imread('noise1.bmp');%读入图像
subplot(2,3,1);%显示2行3列第一幅图像
imshow(i);%显示图像
a=fft2(double(i));%进行傅里叶变换
subplot(2,3,2);%显示2行3列第二幅图像
imshow(abs(a),[]);%显示实数部分
s=log(1+abs(a));%进行对数运算,降低灰度值
subplot(2,3,3);%显示2行3列第三幅图像%获取频谱图大小
imshow(abs(s),[]);%显示降低灰度后的傅里叶频谱
fc=fftshift(a);%把频谱移中
s=log(a+abs(fc));%把移中的频谱进行对数运算,提高灰度
subplot(2,3,4);%显示2行3列第四幅图像
imshow(abs(s),[]);%显示图像
[m,n]=size(fc);%获取频谱图大小
fori=1:
m%进行点运算
forj=1:
n
u=floor(i-m/2);%计算频率平面道远点的距离
v=floor(j-n/2);
d=(u^2+v^2)^0.5;
h(i,j)=1/(1+(d/80)^2);%定义巴特沃斯低通滤波器
fe(i,j)=h(i,j)*fc(i,j);%进行巴特沃斯低通滤波
end
end
[m,n]=size(fc);fori=1:
m%进行点运算
forj=1:
n
u=floor(i-m/2);%计算频率平面道远点的距离
v=floor(j-n/2);
d=(u^2+v^2)^0.5;
ifd<70%定义理想低通滤波器
h(i,j)=1;
else
h(i,j)=0;
end
fa(i,j)=h(i,j)*fc(i,j);
end
end
FF=ifftshift(fe);%对经巴特沃斯处理的频谱进行逆移中
ff=real(ifft2(FF));%取傅里叶逆变换的实数部分
AA=ifftshift(fa);%对经理想滤波处理的频谱进行逆移中
aa=real(ifft2(AA));%取傅里叶逆变换的实数部分
subplot(2,3,5);%显示2行3列第五幅图像
imshow(uint8(ff));%显示图像
subplot(2,3,6);%显示2行3列第六幅图像
imshow(uint8(aa));%显示图像
*************自定义滤波器*************************************
clc
clearall
i=imread('noise1.bmp');%读入图像
i=double(i)/255;%数值转换
figure;
[f1,f2]=freqspace(21,'meshgrid');%频率响应的频率空间
Hd=ones(21);
r=sqrt(f1.^2+f2.^2);
Hd((r<0.08)|(r>0.3))=0;%所需的滤波器
subplot(131),mesh(f1,f2,Hd)
win=fspecial('gaussian',21,2);%高斯滤波器
win=win./max(win(:
));%归一化
subplot(132),mesh(win)%高斯滤波器
h=fwind2(Hd,win);%产生的滤波器
subplot(133),freqz2(h)%产生滤波器的频率响应
figure;
subplot(121),
imshow(i);
title('原图像')
a=filter2(h,i);
subplot(122),
imshow(a);title('变换后')
*******************带通*********************************
clc
clearall
i=imread('noise1.bmp');%读入图像
i=double(i)/255;%数值转换
figure;%%%平流层抽样法设计二位带通滤波器
Hd=zeros(11,11);Hd(4:
8,4:
8)=1;
[f1,f2]=freqspace(11,'meshgrid');%频率响应的频率空间
subplot(221),mesh(f1,f2,Hd),%绘出所需的频率响应
axis([-11-1101.2]),colormap(jet(64))
h=fsamp2(Hd);%频率抽样法产生滤波器
subplot(222),freqz2(h,[3232]),%滤波器的频率响应
axis([-11-1101.2])
subplot(223)
imshow(i);
title('原图像')
subplot(224)
a=filter2(h,i);
imshow(a);title('带通变换后图像')