Canny算子提取边缘Matlab源代码.doc

上传人:飞****9 文档编号:136107427 上传时间:2020-06-24 格式:DOC 页数:3 大小:70KB
返回 下载 相关 举报
Canny算子提取边缘Matlab源代码.doc_第1页
第1页 / 共3页
Canny算子提取边缘Matlab源代码.doc_第2页
第2页 / 共3页
Canny算子提取边缘Matlab源代码.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《Canny算子提取边缘Matlab源代码.doc》由会员分享,可在线阅读,更多相关《Canny算子提取边缘Matlab源代码.doc(3页珍藏版)》请在金锄头文库上搜索。

1、Canny算子提取边缘Matlab源代码介绍function e=canny_edge(I,sigma)%functione=edge(I,canny,thresh,sigma);%该函数实现Canny算子提取边缘点%输入图像为I,标准差sigma,输出为边缘图像em,n=size(I);Rr=2:m-1;cc=2:n-1;e=repmat(logical(uint8(0),m,n);%产生同样大小的边缘图像e,初始化为1 ,即初始化边缘GaussianDieOff=-0.001;%设定高斯函数消失门限PercentOfPixelsNotEdges=-7;%用于计算边缘门限ThresholdR

2、atio=-4;%设置两个门限的比例%首先设计高斯滤波器和它的微分pw=1:30;%设定滤波器宽度ssq=sigma*sigma;%计算方差width=max(find(exp(-(pw.*pw)/(2*sigma*sigma)GaussianDieOff);%计算滤波算子宽度t=(-width:width);len=2*width+1;t3=t-.5;t;t+.5;%对每个像素左右各半个像素位置的值进行平均gau=sum(exp(-(t3.*t3)/(2*ssq)./(6*pi*ssq);%一维高斯滤波器dgau=(-t.*exp(-(t.*t)/(2*ssq)/ssq).;%高斯滤波器的微

3、分ra=size(I,1);ca=size(I,2);ay=255*double(I);ax=255*double(I);h=conv(gau,dgau);%利用高斯函数滤除噪声和用高斯算子的一阶微分对图像滤波合并为一个算子ax=conv2(ax,h,same).;%产生x方向滤波ay=conv2(ay,h,same);%产生y方向滤波mag=sqrt(ax.*ax)+(ay.*ay);%计算滤波结果的幅度magmax=max(mag(:);if magmax0mag=mag/magmax;%对滤波幅度进行归一化end%下面根据滤波幅度的概率密度计算滤波门限counts,x=imhist(ma

4、g,64);%计算滤波结果的幅度的直方图highThresh=min(find(cumsum(counts)PercentOfPixelsNotEdges*m*n)/64;%通过设定非边缘点的比例来确定高门限lowThresh=ThresholdRatio*highThresh;%设置低门限为高门限乘以比例因子thresh=lowThresh,highThresh;%下面进行非极大抑制%大于高门限的点归于强边缘图像%小于低门限的点归于弱边缘图像idxStrong=;for dir=1:4idxLocalMax=cannyFindLocalMaxima(dir,ax,ay,mag);idxWeak=idxLocalMax(mag(idxLocalMax)lowThresh);e(idxWeak)=1;idxStrong=idxStrong;idxWeak(mag(idxWeak)highThresh);endrstrong=rem(idxStrong-1,m)+1;%rem是求余数cstrong=floor(idxStrong-1)/m)+1;%向-取整e=bwselect(e,cstrong,rstrong,8);%通过形态学算子将两幅图像的边缘进行连接

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号