ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:125.09KB ,
资源ID:13031989      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13031989.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(canny 算子实现图像边缘检测(详细过程附源码Word文档下载推荐.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

canny 算子实现图像边缘检测(详细过程附源码Word文档下载推荐.docx

1、i=imread(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); endendfunction j=gaosi(i

2、);%i必须为二维double矩阵j=i;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;%横向高斯滤波利用上面自定义的gaosi函数对图像进行二维3x3滤波,k1=gaosi(k);%横向滤波k1=k1;%对图像进行转置,为下一步纵向滤波作准备(纵向滤波=转置后横向滤波)k1=gaosi(k1);%还原利用上式,易知p,q分别为计算出的横向、纵向的微分近似,由此再计算出梯度的大小和方向。%计算梯度的大小和方向h,w=size(k);for m=2: zz1=k1(m,n-1)+k1(m+1,n-

3、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.001防止分母为01.先将梯度方向归类为四个主要方向,左右、上下、左斜、右斜。%非极大值抑制%首先将梯度方向划分为4个方向0,45,90,135(以及他们的反向延长线) if

4、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;=-3/8*pi kjiao(m,n)=3; else kjiao(m,n)=2; end end根据划分后的4个方向,判断该点是否是8邻域的局部最大值(梯度方向),比如,梯度方向为左右方向的点,判断其是否比左右两点的值来的大,如果不是,使该点的值为0.%按照各个方向分别判断k2=k1; if kjiao(m,n)=0 if k1(m,n)k1(m,n-1)&k1(m,n)

5、k1(m,n+1); else k2(m,n)=0; end end if kjiao(m,n)=1k1(m+1,n-1)&k1(m-1,n+1); if kjiao(m,n)=2k1(m-1,n)&k1(m+1,n); if kjiao(m,n)=3k1(m-1,n-1)&k1(m+1,n+1);用两个阈值t1和t2(t2t1,一般取t2=2*t1),我们把梯度值小于t1的像素的灰度设为0,得到图像1,然后我们把梯度值小于t2的像素的灰度设为0,得到图像2。由于图像2的阈值较高,噪音较少(但同时也损失了有用的边缘信息,而图像1的阈值较低,保留了较多信息,因此我们可以以图像2为基础,以图像1为

6、补充来连接图像的边缘。%两次阈值分割k3=k2;%以t1为阈值分割后的矩阵k4=k2;%以t2为阈值分割后的矩阵t1=50;t2=2*t1; if kfu(m,n)t1 k3(m,n)=0;t2 k4(m,n)=0;a.扫描图像2,当我们遇到一个非零值的像素p时(跟踪以p为开始点的轮廓线直到该轮廓线的终点q;b.在图像1中,考察与图像2中p点位置对应的点p的8邻域,如果在p点的8邻域中有非零像素q存在,将其包括到图像2中,作为点r,从r开始(重复第a步,直到我们在图像1和图像2中都无法继续为止;c.我们已经结束了对包含p的轮廓线的连接,将这条轮廓标记为已访问过,回到第a步,寻找下一条轮廓线,重

7、复第(a)(b)(c)步直到图像2中再也找不到新轮廓线为止.findline.m:function ff,flag1=findline(k3,k4,flag,m,n)flag1=flag; m1=m+1;n1=n+1; while(m=m1|n=n1)%若m和n都不发生变化,表明line已到终点 flagg=0; for i=1:3 if(flagg=1) break; end for j=1: if k3(m-2+i,n-2+j)=0 k4(m-2+i,n-2+j)=255; m1=m-2+i;n1=n-2+j;%新的m,n点 flag1(m,n)=1;%标记已检测过 flagg=1;bre

8、ak; end m=m1;n=n1; ff=k4;主函数里写上:figure;subplot(221);imshow(i);title(原图像subplot(222);imshow(k3,);阈值为50的分割图像subplot(223);imshow(k4,);阈值为100的分割图像flag=zeros(h,w);%标记该点是否以检测过,1表示检测过 if k4(m,n)=0&flag(m,n)=0 k4,flag=findline(k3,k4,flag,m,n);end subplot(224);修正后的分割图像至此,程序完成。效果如下:至于程序中阈值的求取,大家自己定义就好了。希望前辈们能给点学习图像处理的经验,谢谢了。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1