1、南京航空航天大学 电子信息工程学院 信息工程 041010329 某某 南京航空航天大学 电子信息工程学院 信息工程 041010329 某某 数字图像处理 实验 三 一实验内容: 55区域的邻域平均法 55中值滤波法 二实验目的: 了解各种平滑处理技术的特点和用途, 掌握平滑技术的仿真与实现方法。 学会用 Matlab中的下列函数对输入图像进行上述 2类运算。感受 不同 平滑 处理方法对最终图像效果的影响。 nlfilter; mean2; std2; fspecial; filter2; medfilt2; imnoise 三实验步骤: 1 仔细阅读 Matlab帮助文件中有关以上函数的使
2、用说明,能充分理解其使用方法并能运用它们完成实验内容。 2 将 test3_1.jpg图像文件读入 Matlab,用 nlfilter 对其进行 55邻域平均和计算邻域标准差。 显示 邻域平均 处理后的结果 ,以及 邻域 标准差图像 。 3 在 test3_1.jpg图像中添加均值为 0,方差为 0.02的高斯噪声,对噪声污染后的图像用 nlfilter进行 55邻域平均。显示处理后的结果。 (使用 imnoise命令 ) 4 将 test3_2.jpg 图像文件读入 Matlab,用 fspecial 函数生成一 55 邻域平均窗函数,再用 filter2函数求邻域平均,试比较与用 nlfi
3、lter 函数求邻域平均的速度。 5 用 medfilt2函数对 test3_2.jpg图像进行中值滤波。 显示 处理 结果。 6 编写中值滤波程序 (函数) 。 对 test3_2.jpg图像进行中值滤波。显示处理结果。 四实验报告要求: 用 imshow 函数生成各类图像 ,提交原图像和 经各种方法处理后的图像。 给出中值滤波程序。 对图像平滑结果进行分析。 附 : 源程序: %班级: 0410201 %姓名 : 某某 %学号: 041010329 clear all; clc; 南京航空航天大学 电子信息工程学院 信息工程 041010329 某某 南京航空航天大学 电子信息工程学院 信
4、息工程 041010329 某某 close all; %处理 test3_1.jpg I=imread(test3_1.jpg); I=im2double(I); %邻域平均函数“ nlfilter” tic J=nlfilter(I,5 5,mean2); toc tic T=nlfilter(I,5 5,std2); toc figure(1),subplot(2,3,1),imshow(I),title(原始图像 );axis on; subplot(2,3,2),imshow(J),title(邻域均值图像 );axis on; subplot(2,3,3),imshow(T),ti
5、tle(邻域均值标准差图像 );axis on; imwrite(J,nlfilterl滤波后 .jpg); %加噪声后用邻域平均法 I=imnoise(I,gaussian,0,0.02); J=nlfilter(I,5 5,mean2); T=nlfilter(I,5 5,std2); subplot(2,3,4),imshow(I),title(加噪图像 );axis on; subplot(2,3,5),imshow(J),title(加噪邻域均值图像 );axis on; subplot(2,3,6),imshow(T),title(加噪邻域均值标准差图像 );axis on; im
6、write(J,加噪 nlfilterl滤波后 .jpg); %处理 test3_2.jpg I2=imread(test3_2.jpg); J2=im2double(I2); %邻域平均窗函数 “ filter2” tic ave=fspecial(average,5); J2=filter2(ave,J2); 南京航空航天大学 电子信息工程学院 信息工程 041010329 某某 南京航空航天大学 电子信息工程学院 信息工程 041010329 某某 toc J3=medfilt2(J2,5 5); tic J4=nlfilter(J2,5 5,mean2); toc figure(2),
7、subplot(2,2,1),imshow(I2),title(原始图像 );axis on; subplot(2,2,2),imshow(J2),title(filter2 处理后图像 );axis on; subplot(2,2,3),imshow(J3),title(medfilt2 处理后图像 );axis on; subplot(2,2,4),imshow(J4),title(nlfilter 处理后图像 );axis on; imwrite(J2,filter2滤波后 .jpg); imwrite(J3,medfilt2滤波后 .jpg); imwrite(J4,nlfilter
8、滤波后 (2).jpg); %自编中值滤波程序 F=midf(I2,3,3); figure(3),subplot(1,2,1),imshow(I2),title(滤波前 );axis on; subplot(1,2,2),imshow(F),title(中值滤波后 );axis on; imwrite(F,自编中值滤波后 .jpg); 调用函数一: function mid=middle(F1)%求窗口元素的中值 m,n=size(F1); x=m*n; y=m*n; k=0; for i=1:m for j=1:n k=k+1; x(k)=F1(i,j);%组成一维数组 end end 南
9、京航空航天大学 电子信息工程学院 信息工程 041010329 某某 南京航空航天大学 电子信息工程学院 信息工程 041010329 某某 %选择排序 for i=1:y k=i; for j=i+1:y if x(j)x(k) k=j; end end if k=i t=x(k); x(k)=x(i); x(i)=t; end end mid=x(ceil(y/2); 调用函数二: function ave=midf(F,m,n) X,Y=size(F); for i=ceil(m/2):X-fix(m/2) for j=ceil(n/2):Y-fix(n/2) F1=F(i-fix(m/2):i+fix(m/2),j-fix(n/2):j+fix(n/2);%扣出窗口内的元素组成一矩阵 F(i,j)=middle(F1);%求该矩阵的中值 end end ave=uint8(F);