《数字图像处理报告(完成版).doc》由会员分享,可在线阅读,更多相关《数字图像处理报告(完成版).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数字图像处理实验报告姓名:班级:学号:专业:指导教师:实验日期:实验一 边缘检测一、基本原理本实验主要是对图像的边缘进行提取,通过对边缘的分析来分析图像的特征。首先,了解一些术语的定义:边缘点:图像中具有坐标i,j且处在强度显著变化的位置上的点。边缘段:对应于边缘点坐标i,j及其方位,边缘的方位可能是梯度角。边缘检测器:从图像中提取边缘(边缘点和边缘段)集合的算法。轮廓:边缘列表,或者是一条表示边缘列表的拟合曲线。边缘连接:从无序边缘表形成有序边缘表的过程,习惯上,边缘表的表示采用顺时针方向来排序。边缘跟踪:一个用来确定轮廓的图像(指滤波后的图像)搜索过程。边缘就是图像中包含的对象的边界所对应
2、的位置。物体的边缘以图像局部特性的不连续性的形式出现的,例如,灰度值的突变,颜色的突变,纹理结构的突变等。从本质上说,边缘就意味着一个区域的终结和另外一个区域的开始。图像边缘信息在图像分析和人的视觉中十分重要,是图像识别中提取图像特征的一个重要属性。边缘检测(edge detection)在图像处理和对象识别领域中都是一个重要的基本问题。由于边缘的灰度不连续性,可以使用求导数的方法检测到。最早的边缘检测方法都是基于像素的数值导数的运算。本实验主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny算子运算,比较处理结果。边缘检测有三个共性准则,
3、1,好的检测结果,或者说对边缘的误测率尽可能低,就是在图像边缘出现的地方检测结果中不应该没有;另一方面不要出现虚假的边缘。2,对边缘的定位要准确,也就是我们标记出的边缘位置要和图像上真正边缘的中心位置充分接近。3,对同一边缘要有尽可能低的响应次数,也就是检测响应最好是单像素的。二、对图像进行各种算子运算本实验中主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny算子运算。Matlab代码:clear all;close all;warning off all;I = imread(cameraman.tif); %没有噪声时的检测结果BW_
4、sobel = edge(I,sobel);BW_prewitt = edge(I,prewitt);BW_roberts = edge(I,roberts);BW_laplace = edge(I,log);BW_canny = edge(I,canny);figure(1);subplot(2,3,1),imshow(I),xlabel(原始图像);subplot(2,3,2),imshow(BW_sobel),xlabel(sobel检测);subplot(2,3,3),imshow(BW_prewitt),xlabel(prewitt检测);subplot(2,3,4),imshow(
5、BW_roberts),xlabel(roberts检测);subplot(2,3,5),imshow(BW_laplace),xlabel(laplace检测);subplot(2,3,6),imshow(BW_canny),xlabel(canny检测);%加入高斯噪声(=0,2=0.01)检测结果I_g1 = imnoise(I,gaussian,0,0.01);BW_sobel = edge(I_g1,sobel);BW_prewitt = edge(I_g1,prewitt);BW_roberts = edge(I_g1,roberts);BW_laplace = edge(I_g1
6、,log);BW_canny = edge(I_g1,canny);figure(2);subplot(2,3,1),imshow(I_g1),xlabel(加入高斯噪声(=0,2=0.01)图像);subplot(2,3,2),imshow(BW_sobel),xlabel(sobel检测);subplot(2,3,3),imshow(BW_prewitt),xlabel(prewitt检测);subplot(2,3,4),imshow(BW_roberts),xlabel(roberts检测);subplot(2,3,5),imshow(BW_laplace),xlabel(laplace
7、检测);subplot(2,3,6),imshow(BW_canny),xlabel(canny检测);%加入高斯噪声(=0,2=0.02)检测结果I_g2 = imnoise(I,gaussian,0,0.02);BW_sobel = edge(I_g2,sobel);BW_prewitt = edge(I_g2,prewitt);BW_roberts = edge(I_g2,roberts);BW_laplace = edge(I_g2,log);BW_canny = edge(I_g2,canny);figure(3);subplot(2,3,1),imshow(I_g2),xlabel
8、(加入高斯噪声(=0,2=0.02)图像);subplot(2,3,2),imshow(BW_sobel),xlabel(sobel检测);subplot(2,3,3),imshow(BW_prewitt),xlabel(prewitt检测);subplot(2,3,4),imshow(BW_roberts),xlabel(roberts检测);subplot(2,3,5),imshow(BW_laplace),xlabel(laplace检测);subplot(2,3,6),imshow(BW_canny),xlabel(canny检测);实验结果:三、实验分析:通过对上述几种算子的研究,我
9、们可以发现,Prewit t 算子和Sobel 算子都是对图像进行差分和滤波运算,仅在平滑部分的权值选择上有些差异,但是图像产生了一定的模糊, 而且有些边缘还检测不出来,所以检测精度比较低, 该类算子比较适用于图像边缘灰度值比较明显的情况。Robert s 算子检测精度比较高, 但容易丢失一部分边缘, 使检测的结果不完整,同时图像没经过平滑处理,不能抑制噪声,所以该算子对具有陡峭的低噪声图像响应最好。Laplace算子通过高斯函数对图像进行了平滑处理,对噪声的抑制作用比较明显, 但处理的同时也可能将原有的边缘平滑, 造成某些边缘无法检测到。此外,噪声对其影响也较大,检测到的图细节很丰富,同时就
10、可能出现伪边缘。但是,如果要降低伪边缘的话,又可能使检测精度下降,丢失很多真边缘。因此, 对于不同图像应选择不同参数。Canny 算子也采用高斯函数对图像进行平滑处理,也具有较强的去噪能力, 但同样可能会丢失一些边缘信息,但是,从图中可以看出,Canny 算子比Laplace算子的检测边缘的精度要高些。通过实验结果可以看出,该算子在上述几种边缘检测算子当中效果最好。通过上述实验结果我们可以发现,在加入高斯噪声以后,canny算子的去噪能力减弱,对边缘检测的效果不太明显。相反,从图中可以发现sobel算子和prewitt算子对噪声的过滤作用较为明显。基本上能够检测出较为完整的边缘信号。自编代码:
11、clc;close all%图读取显示c=imread(cameraman.tif);subplot(1,3,1);imshow(c) M,N=size(c);%得到一个M+2*N+2的矩阵,为模板卷积做准备cc=zeros(M+2,N+2); %初始化矩阵for i=1:M for j=1:N cc(i+1,j+1)=c(i,j); endendcc(1,1)=c(1,1); %四个角的赋值cc(1,M+2)=c(1,M);cc(M+2,1)=c(M,1);cc(M+2,N+2)=c(M,N);for i=1:M %四边的赋值 cc(i+1,1)=c(i,1);endfor i=1:N cc
12、(1,i+1)=c(1,i);endfor i=1:N cc(M+2,i+1)=c(M,i);endfor i=1:M cc(i+1,N+2)=c(i,N);end c1=zeros(M,N); %初始化一个新矩阵,用来存放水平模板卷积后的值c2=zeros(M,N); %初始化一个新矩阵,用来存放垂直模板卷积后的值c3=zeros(M,N); %初始化一个新矩阵,用来存放以2为范数(欧式距离)计算的值c4=zeros(M,N); %初始化一个新矩阵,用来存放以1为范数(城区距离)计算的值%差分模板 d1=-1,0,1;-1,0,1;-1,0,1; %水平模板d2=1,1,1;0,0,0;-1
13、,-1,-1; %垂直模板%水平方向for m=2:M+1for n=2:N+1 c1(m-1,n-1)=(d1(1,1)*cc(m-1,n-1)+d1(1,2)*cc(m-1,n)+d1(1,3)*cc(m-1,n+1). + d1(2,1)*cc(m,n-1)+d1(2,2)*cc(m,n)+d1(2,3)*cc(m,n+1)+. d1(3,1)*cc(m+1,n-1)+d1(3,2)*cc(m+1,n)+d1(3,3)*cc(m+1,n+1)/9; endend%垂直方向for m=2:M+1for n=2:N+1 c2(m-1,n-1)=(d2(1,1)*cc(m-1,n-1)+d2(
14、1,2)*cc(m-1,n)+d2(1,3)*cc(m-1,n+1)+.d2(2,1)*cc(m,n-1)+d2(2,2)*cc(m,n)+d2(2,3)*cc(m,n+1)+d2(3,1)*cc(m+1,n-1)+d2(3,2)*cc(m+1,n)+d2(3,3)*cc(m+1,n+1)/9; endend%以2为范数(欧式距离)计算的值for i=1:M for j=1:N c3(i,j)=abs(c1(i,j)+abs(c2(i,j); end end %结果显示subplot(1,3,2);imshow(uint8(c3); %由于之前已经转化为双精度,所以要用uint8显示。%以1为
15、范数(城区距离)计算的值for i=1:M for j=1:N c4(i,j)=(c1(i,j)2+(c2(i,j)2)(1/2); end end %结果显示subplot(1,3,3);imshow(uint8(c4); %由于之前已经转化为双精度,所以要用uint8显示。四、实验结果:实验二 数字图像的空间域滤波一、实验目的1、 理解图像空间域滤波的原理;2、 掌握图像均值滤波、中值滤波的原理与实现方法;3、 掌握上述方法的改进方法。二、 实验原理均值滤波的主要步骤为:(1) 将模板在途中漫游,并将模板中心与途中某个象素位置重合;(2) 将模板上系数与模板下对应象素相乘;(3) 将所有乘
16、积相加;(4) 将和(模板的输出响应)赋给途中对应模板中心位置的象素。中值滤波的主要步骤为:(1)将模板在途中漫游,并将模板中心与途中某个象素位置重合;(2)读取模板下各对应象素的灰度值;(3)将这些灰度值从小到大排成1列;(4)找出这些值里排在中间的1个;(5) 将这个中间值赋给对应模板中心位置的象素。三、实验内容基本要求:1、 自己编程实现图像的均值滤波;2、 自己编程实现图像的中值滤波;利用matlab图像处理工具箱中的函数实现图像的上述处理均值滤波处理含有椒盐噪声图像程序代码(1):模板运算f=imread(lena sp.bmp);f=double(f);row,col=size(f
17、); r=1;for i=2:row-1 for j=2:col-1g(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)/9; g=uint8(g); endendsubplot(121);imshow(uint8(f);title(椒盐噪声图像);subplot(122);imshow(g);title(均值滤波处理后的图像)(2):mean函数均值滤波f=imread(lena sp.bmp);f=double(f);row,col=size(f); g=
18、size(f);for i=2:row-1 for j=2:col-1t=f(i-1:i+1,j-1:j+1);t=double(t);g(i,j)=mean(mean(t);g(i,j)=uint8(g(i,j); endendsubplot(121);imshow(uint8(f);title(椒盐噪声图像);subplot(122);imshow(uint8(g);title(均值滤波处理后的图像) (3) 可变模板处理f=imread(lena gauss.bmp);f=double(f);row,col=size(f); r=1; g=size(f);for i=2:row-1 fo
19、r j=2:col-1 s=0; s=double(s); for m=-r:r for n=-r:r s=s+f(i+m,j+n); end end g(i,j)=s/power(r+2),2); endendsubplot(121);imshow(uint8(f);title(椒盐噪声图像);subplot(122);imshow(uint8(g);title(均值滤波处理后的图像) 均值滤波处理含有加性高斯噪声图像程序代码(1):模板运算f=imread(lena gauss.bmp);f=double(f);row,col=size(f); r=1;for i=2:row-1 for
20、j=2:col-1g(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)/9; g=uint8(g); endendsubplot(121);imshow(uint8(f);title(加性高斯噪声图像);subplot(122);imshow(g);title(均值滤波处理后的图像)(2):mean函数均值滤波f=imread(lena gauss.bmp);f=double(f);row,col=size(f); r=1; g=size(f);for i=2
21、:row-1 for j=2:col-1t=f(i-1:i+1,j-1:j+1);t=double(t);g(i,j)=mean(mean(t);g(i,j)=uint8(g(i,j); endendsubplot(121);imshow(uint8(f);title(加性高斯噪声图像);subplot(122);imshow(uint8(g);title(均值滤波处理后的图像)(3) :可变模板处理f=imread(lena gauss.bmp);f=double(f);row,col=size(f); r=1; g=size(f);for i=2:row-1 for j=2:col-1 s
22、=0; s=double(s); for m=-r:r for n=-r:r s=s+f(i+m,j+n); end end g(i,j)=s/power(r+2),2); endendsubplot(121);imshow(uint8(f);title(加性高斯噪声图像);subplot(122);imshow(uint8(g);title(均值滤波处理后的图像) 中值滤波(椒盐噪声图像处理)f=imread(lena sp.bmp);f=double(f);row,col=size(f); g=size(f); r=1;for i=r+1:row-r for j=r+1:col-r t=f
23、(i-r:i+r,j-r:j+r); id=0; for tm=1:5 m=0; for k=1:9 if(mt(k) m=t(k); id=k; end end t(id)=0; end g(i,j)=m; endendsubplot(121);imshow(uint8(f);title(原图像);subplot(122);imshow(uint8(g);title(中值滤波处理后的图像)R=1时的图像 R=5中值滤波(加性高斯噪声)f=imread(lena gauss.bmp);f=double(f);row,col=size(f); g=size(f); r=1;for i=r+1:r
24、ow-r for j=r+1:col-r t=f(i-r:i+r,j-r:j+r); id=0; for tm=1:5 m=0; for k=1:9 if(mt(k) m=t(k); id=k; end end t(id)=0; end g(i,j)=m; endendsubplot(121);imshow(uint8(f);title(原图像);subplot(122);imshow(uint8(g);title(中值滤波处理后的图像)R=5 不同领域运算结果比较r=2f=imread(lena sp.bmp);f=double(f);row,col=size(f); r=2; g=size(f);for i=r+1:row-r for j=r+1:col-r s=0; s=double(s); for m=-r:r for n=-r:r s=s+f(i+m,j+n); end end g(i,j)=s/power(r+2),2); endendsubplot(121);imshow(uint8(f);title(椒盐噪声图像);subplot(122);imshow(uint8(g);title(均值滤波处理后的图像)R=3R=8