




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数字数数字图像采集与处理工程导论结课大作业 边缘检测 学号:07101013姓名:孙睿性别:女一:图像边缘基础边缘是图像最基本的特征之一,边缘检测在图像处理和计算机视觉等领域中起着重要的作用,是图像分析、模式识别的重要部分。边缘是灰度值不连续的表现,两个具有不同灰度值的相邻区域之间总存在边缘。通常情况下,我们将信号中奇异点或突变点认为是图像中的边缘点,其附近灰度的变换可以从他相邻象素灰度分布的梯度来反映。由于边缘是图像上灰度变化最剧烈的地方,因此,常规的边缘检测是以原始图像为基础,利用图像边缘点处的灰度阶跃变化进行边缘检测,然后提取图像的边缘。但是由于众多原因,图像常受到随机噪声的干扰,而边缘
2、的噪声在空间域表现为灰度有很大的起落,在频域表现为高频分量,因此边缘检测的结果常把噪声当作边缘点检测出来,而真正的边缘由于受噪声干扰而没有检测出来。二:图像边缘检测方法1:边缘检测的实质是采用某种算法来提取出图像中对象与背景间的交界线。2:边缘检测算法有如下四个步骤原始图像平滑图像梯度或含过零点 过界点滤波增强检测滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折衷。增强:增强边缘的基础是确定图像各点邻域强度的变化值
3、。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判据是梯度幅值阂值判据。定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。边缘检测是检测图像局部显著变化的最基本运算。在一维情况下,阶跃边缘同图像的一阶导数局部峰值有关。梯度是函数变化的一种度量,而一幅图像可以看作是图像强度连续函数的取样点阵列。因此,同一维情况类似,图像灰度值的显著变化可用梯度的离散逼近函
4、数来检测。梯度是一阶导数的二维等效式,定义为向量: (3.1)性质:(1)向量G(x,y)力的方向就是函数f(x,y)增大时的最大变化率方向;(2)梯度幅值计算公式采用:,在实际应用中,通常用绝对值来近似梯度幅值:或.由向量分析可知,梯度的方向定义为:,其中a角是相对x轴的角度。3:利用Sobel算子和prewitt算子处理图像边缘Sobel算子和Prewitt算子都是一阶的微分算子,都是先对图像进行平滑处理, 虽然两者都是加权平均滤波, 但是前者邻域的像素对当前像素产生的影响不是等价的, 距离不同的像素具有不同的权值, 对算子结果产生的影响也不同。这两种算子对噪声都有一定的抑制作用, 但不能
5、完全排除检测结果中出现虚假边缘的情况。这两者对灰度渐变低噪声的图像有较好的检测效果, 但是对于混合多复杂噪声的图像处理效果就不理想了。 采用邻域可以避免在像素之间内插点上计算梯度考虑一下点周围点的排列Sobel算子是一种梯度幅值,.其中的偏导数用下式计算: 其中常数,和其他的梯度算子一样,和可用卷积模板来实现: Sobel算子把重点放在接近于模板中心的像素点Prewitt算子与Sobel算子的方程完全一样,只是常量c=1所以 Prewitt算子没有把重点放在接近模板中心的像素点此图用于说明Sobel算子和Prewitt算子的邻域像素点标记利用Sobel算子和 Prewitt算子处理图像的实验结
6、果如下:Lenna原始图像(一)各算子对lenna原始图像的处理效果如下所示:(二)对lenna原始图像加入高斯噪声:各算子对加入高斯噪声的lenna图像的处理效果如下所示:(三)对lenna原始图像加入椒盐噪声:各算子对加入椒盐噪声的lenna图像的处理效果如下所示:4:利用canny边缘检测基本原理Canny 边缘检测算子具有既能滤去噪声又保持边缘特性的边缘检测最优滤波器,其采用一阶微分滤波器。采用二维高斯函数的任意方向上的一阶方向导数为噪声滤波器, 通过与图像卷积进行滤波;然后对滤波后的图像寻找图像梯度的局部最大值,以此来确定图像边缘。根据对信噪比与定位乘积进行测度,得到最优化逼近算子。
7、步骤如下:step1:用高斯滤波器平滑图象。二维为高斯函数为: G(x,y)=exp在某一方向n上是G(x,y)的一阶方向导数为:n=,G=.n是梯度矢量,图像f(x,y)与Gn作卷积,改变n的方向,Gn*f(x,y)取得最大值时的n就是正交于检测边缘的方向。step2: 用一阶偏导的有限差分来计算梯度的幅值和方向。A(x,y)反映了图像(x,y)点处的边缘强度,是图像(x,y)点处的法向矢量。step3: 对梯度幅值进行非极大值抑制仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘, 必须保留局部梯度最大的点,而抑制非极大值,如图1。解决方法:利用梯度的方向将四个扇区标号为0到3,对应3*3
8、邻域的四种可能组合。在每一点上,邻域的中心像素M与沿着梯度线的两个像素相比。如果M的梯度值不沿梯度线的两个相邻像素梯度值大, 则令M=0,即G(x,y)=NMS(Mx,y,§x,y)。step4:用双阈值算法检测和连接边缘。减少假边缘段数量的典型方法是对G(x,y)使用一个阈值,并将低于阈值的所有值赋零值。通常选取阈值的方法:双阈值算法进行边缘判别和连接边缘。首先是边缘判别:凡是边缘强度大于高阈值的一定是边缘点;凡是边缘强度小于低阈值的一定不是边缘点;如果边缘强度大于低阈值又小于高阈值,则看这个像素的邻接像素中有没有超过高阈值的边缘点,如果有,它就是边缘点,如果没有,它就不是边缘点。
9、其次是连接边缘: 双阈值算法对非极大值抑制图像作用两个阈值1和2,且21 2,从而可以得到两个阈值边缘图像G1(x,y)和G2(x,y)。由于G2(x,y)使用高阈值得到,因而含有很少的假边缘,但有间断(不闭合)。双阈值法要在G2(x,y)中把边缘连接成轮廓, 当到达轮廓的端点时, 该算法就在G1(x,y)的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在G1(x,y)中收集边缘,直到将G1(x,y)连接起来为止。5利用canny算子处理图像的实验结果如下:三Prewitt.Sobel.canny算子进行图像边缘检测的比较Prewitt算子和Sobel算子都是对图像进行差分和滤波运算,
10、仅在平滑部分的权值选择上有些差异,因此两者均对噪声具有一定的抑制能力,但这种抗噪能力是通过像素平均来实现的,所以图像产生了一定的模糊,而且还会检测出一些伪边缘,所以检测精度比较低,该算子比较适合用于图像边缘灰度值比较尖锐且图像噪声比较小的情况。 Canny算子采用高斯函数对图像进行平滑处理,因此具有较强的去噪能力,但同样存在容易平滑掉一些边缘信息,其后所采用的一阶微分算子的方向性好,因此边缘定位精度较高。该算子与其它边缘检测算子的不同之处在于,它使用2种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘相连时才将弱边缘包含在输出图像中,因此这种方法较其它方法而言不容易被噪声“填充”更容易检测出真
11、正的弱边缘。通过仿真实验结果可以看出,该算子在上述几种边缘检测算子当中效果最好。边缘定位准确,连续性较好,虚假边缘少且边缘均具有单像素宽度。 各种边缘检测算子的优缺点比较算子优缺点比较Sobel对灰度渐变和噪声较多的图像处理效果比较好,Sobel算子对边缘定位比较准确。Prewitt对灰度渐变和噪声较多的图像处理效果较好。Canny此方法不容易受噪声的干扰,能够检测到真正的弱边缘。在edge函数中,最有效的边缘检测方法是Canny方法。该方法的优点在于使用两种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘与强边缘相连时,才将弱边缘包含在输出图像中。因此,这种方法不容易被噪声“填充”,跟容易检
12、测出真正的弱边缘。利用Sobel算子和 Prewitt算子处理图像的程序(MATLAB)附录(1)各算子对lenna原始图像处理的仿真程序:function jingdianI=imread('lenna.jpg');B2=edge(I,'sobel');B3=edge(I,'prewitt');subplot(2,3,1);imshow(B1;title('sobel算子检测');subplot(2,3,2);imshow(B2);title('prewitt算子检测');附录(2)各算子对加入高斯噪声lenna
13、图像处理的仿真程序:function jingdianI=imread('lenna.jpg');I1=imnoise(I,'gaussian');B2=edge(I1,'sobel');B3=edge(I1,'prewitt');subplot(2,3,1);imshow(B1);title('sobel算子检测');subplot(2,3,1);imshow(B2);title('prewitt算子检测');附录(3)各算子对加入椒盐噪声lenna图像处理的仿真程序:function jingd
14、ianI=imread('lenna.jpg');I2=imnoise(I,'salt & pepper');B1=edge(I2,'sobel');B2=edge(I2,'prewitt');subplot(2,3,1);imshow(B1);title('sobel算子检测');subplot(2,3,2);imshow(B2);title('prewitt算子检测');附录(4)DetectContour函数:function contourImage=DetectContour(I,
15、k) grayImage = imread('lenna.jpg');m n d=size(grayImage); work_img(1:m,1:n)=0; img=double(grayImage); r(1:8)=0; for i=2:m-1 for j=2:n-1 blk=img(i-1:i+1,j-1:j+1); p0=blk(1,1);p1=blk(1,2);p2=blk(1,3); p7=blk(2,1);p3=blk(2,3); p6=blk(3,1);p5=blk(3,2);p4=blk(3,3); r(1)=(5/8)*(p0+p1+p2)-(3/8)*(p3
16、+p4+p5+p6+p7); r(2)=r(1)+p7-p2; r(3)=r(2)+p6-p1; r(4)=r(3)+p5-p0; r(5)=r(4)+p4-p7;r(6)=r(5)+p3-p6;r(7)=r(6)+p2-p5; r(8)=r(7)+p1-p4; maxR=8*k*max(r); if maxR>255 maxR=255; end if maxR<0 maxR=0; end work_img(i,j)=255-maxR; if work_img(i,j)>150 canny边缘检测MATLAB算法过程如下:1)读入图像:clear;clc;i=imread(&
17、#39;light.jpg');k=rgb2y(i);%获取h分量,即亮度分量根据公式Brightness = 0.3 * R + 0.6 * G + 0.1 * B;计算出亮度分量y;function k=rgb2y(z)%i必须为rgb三维矩阵m,n,p=size(z);k=zeros(m,n);z=double(z);for i=1:m for j=1:n k(i,j)=0.3*z(i,j,1)+0.6*z(i,j,2)+0.1*z(i,j,3); endend2)用3x3高斯滤波器进行滤波,消除噪声;function j=gaosi(i);%i必须为二维double矩阵j=i;
18、h,w=size(i);for m=2;h-1 for n=2:w-1 j(m,n)=(i(m,n-1)+2*i(m,n)+i(m,n+1)/4;%横向高斯滤波 endend利用上面自定义的gaosi函数对图像进行二维3x3滤波,k1=gaosi(k);%横向滤波k1=k1'%对图像进行转置,为下一步纵向滤波作准备(纵向滤波=转置后横向滤波)k1=gaosi(k1);k1=k1'%还原3)针对每一个像素,计算横向与纵向两方向的微分近似,以得到像素的梯度大小和方向;p= q= 由此得到梯度的大小M和方向O: M=sqrt(pO=arctan(p,q分别为计算出的横向、纵向的微分近
19、似,由此再计算出梯度的大小和方向。%计算梯度的大小和方向h,w=size(k);for m=2:h-1 for n=2:w-1 zz1=k1(m,n-1)+k1(m+1,n-1); zz2=k1(m,n)+k1(m+1,n); zz3=k1(m,n-1)+k1(m,n); zz4=k1(m+1,n-1)+k1(m+1,n); kp(m,n)=0.5*(zz2-zz1); kq(m,n)=0.5*(zz3-zz4); kfu(m,n)=sqrt(kp(m,n)2)+(kq(m,n)2);%梯度大小 kjiao(m,n)=atan(kq(m,n)/(kp(m,n)+0.001);%梯度方向,0.0
20、01防止分母为0 endend4)对梯度进行"非极大抑制"(非局部最大值置0);1.%非极大值抑制;%将梯度方向划分为4个方向0,45,90,135(以及他们的反向延长线)for m=2:h-1 for n=2:w-1 if kjiao(m,n)>=3/8*pi kjiao(m,n)=2; else if kjiao(m,n)>=1/8*pi kjiao(m,n)=1; else if kjiao(m,n)>=-1/8*pi kjiao(m,n)=0; else if kjiao(m,n)>=-3/8*pi kjiao(m,n)=3; else kj
21、iao(m,n)=2; end end end end endend根据划分后的4个方向,判断该点是否是8邻域的局部最大值(梯度方向),比如,梯度方向为左右方向的点,判断其是否比左右两点的值来的大,如果不是,使该点的值为0.%按照各个方向分别判断k2=k1;for m=2:h-1 for n=2:w-1 if kjiao(m,n)=0 if k1(m,n)>k1(m,n-1)&&k1(m,n)>k1(m,n+1); else k2(m,n)=0; end end if kjiao(m,n)=1 if k1(m,n)>k1(m+1,n-1)&&k
22、1(m,n)>k1(m-1,n+1); else k2(m,n)=0; end end if kjiao(m,n)=2 if k1(m,n)>k1(m-1,n)&&k1(m,n)>k1(m+1,n); else k2(m,n)=0; end end if kjiao(m,n)=3 if k1(m,n)>k1(m-1,n-1)&&k1(m,n)>k1(m+1,n+1); else k2(m,n)=0; end end endend5)对梯度取两次阈值;用两个阈值t1和t2(t2>t1,一般取t2=2*t1),我们把梯度值小于t1
23、的像素的灰度设为0,得到图像1,然后我们把梯度值小于t2的像素的灰度设为0,得到图像2。由于图像2的阈值较高,噪音较少(但同时也损失了有用的边缘信息,而图像1的阈值较低,保留了较多信息,因此我们可以以图像2为基础,以图像1为补充来连接图像的边缘。k3=k2;%以t1为阈值分割后的矩阵k4=k2;%以t2为阈值分割后的矩阵t1=50;t2=2*t1;for m=2:h-1 for n=2:w-1 if kfu(m,n)<t1 k3(m,n)=0; end if kfu(m,n)<t2 k4(m,n)=0; end endend5)对边缘进行连接;a.扫描图像2,当遇到一个非零值的像素p时(跟踪以p开始点的轮廓线直到该轮廓线的终点q)b.在图像1中,考察与图像2中p点位置对应的点p'的8邻域,如果在p'点的8邻域中有非零像素q'存在,将其包括到图像2中,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年冬至节主题活动策划方案例文
- 2025年度学校教学工作方案
- 汽车使用与维护 课件 项目四 冷却系统的维护
- 汽车使用与维护 课件 1.2.3 汽车后视镜按键识别与使用
- 高三上学期《无奋斗不青春》主题班会课件
- 20253月份桉树皮药用成分提取技术保密协议
- 2025年瓶盖滴塑注胶机项目可行性研究报告
- 2025年玻纤铝箔保温风管项目可行性研究报告
- 2025年特浓牛油香粉项目可行性研究报告
- 2025年爬坡输送机项目可行性研究报告
- 地下室顶板预留洞口施工方案标准版
- 儿童常见病中医治疗
- 演讲与口才2.4劝慰与道歉
- 中国古代建筑历史图说
- 2022年宁夏粮食和物资储备局所属事业单位考试真题及答案
- 川09J139 居住建筑油烟气集中排放建筑构造(DBJT20-65)
- 浙江工商大学论文答辩汇报通用ppt模板
- 2023届湖北省武汉市高三毕业生4月调考英语试卷及参考答案
- SMT失效模式分析PFMEA
- GB/T 35856-2018飞机电气设备绝缘电阻和耐电压试验方法
- GB/T 26774-2011车辆运输车通用技术条件
评论
0/150
提交评论