资源描述:
《边缘检测与hough变换实验报告matlab》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、边缘检测与Hough变换实验目的:写一段代码实现一幅罔像,其中分为以下两个步骤1.使用Matlab中的canny算子进行边缘检测,可以让使用者交互式的输入不同的Sigma的值实现边缘检测。2.运用Hough变换来找到最突出的边緣,在图像中找到并画出最长的直线。实验原理:canny算子边缘检测的基本原理是:采用二维高斯函数的任一方向上的一阶方向导数为噪声滤波器,通过与图像f(X,y)卷积进行滤波,然后对滤波后的图像寻找图像梯度的局部极大值,以确定图像边缘。Canny边缘检测算子是一种最优边缘检测算子。其实现步骤如下:1)用高斯滤波器平滑图
2、像2)计算滤波后图像梯度的幅值和方向3)对梯度幅值应用非极大值抑制,其过程为找出图像梯度中的局部极大值点,把其他非局部极大值置零,以得到细化的边缘;4)再用双阈值算法检测和连接边缘;使用canny算子的edge函数调用格式为BW=edge(l/canny');BW=edge(l/canny',thresh,sigma);BW=edge(l/canny',thresh);[BW,threshold]=edge(l,'canny'2.Hough变换时最常用的直线提取方法,它的基本思想是:将直线上每一个数据点变换为参数平面屮的一条直线或曲线,
3、利用共线的数据点对应的参数曲线相交于参数空间中一点的关系,使得直线提取问题转化为计数问题。Hough变换提取直线的主要优点是受直线巾的间隙和噪声影响较小。Hough检测直线的Matlab实现:在Matlab图像处理工具箱中提供了3个与Hough变换有关的函数,分别为hough函数,houghpeaks函数和houghlines函数。hough函数的调用格式为[H,theta,rho]=hough(BW);其中BW为二值图像,H为Hough变换矩阵,theta为变换轴间隔e,「ho为元素个数。Houghpeaks函数是用来提取Hough变
4、换后参数下•面上的峰值点。其调用格式为peaks=houghpeaks(H,numpeaks},其中,H为Hough函数的输出,参数平而的技术结來矩阵,参数numpeaks为指定要提取的峰值数目,默汄值为1:输出参数peaks为Q*2维峰值位置矩阵,其中Q为提取的峰值数0,peaks的第q行分别存储第q个峰值的行和列坐标。Hough函数用于在图像中提取参数平面上的峰值点对应的直线。其调用格或为lines=houghlines(BW,theta,rho,peaks)Lines=houghlines(…,paraml,vall,param2
5、,val2)其中,BW与Hough函数的BW相同,为二值图象。theta和rho为hough函数返冋的输出,指示0轴和P轴各个单元对应的值。Peaks力houghpeaks闲数返回的输出,指示峰值的行和列坐細,houghlines函数将根据这些峰值提取直线。Param和val是参数对,用于指定是否合并或保留直线段的相关参数,其取值有两种。当param='MinLength'时,bal指定合并后的直线被保留的门限长度,长度小于val的直线被舍去。当paramr'FillGap'时,val指定直线段被合并的门限间隔。如果两条斜率和截距均相同
6、的直线段间隔小于val给点的值,则它们被合并为一条直线。实验程序与实验结果如下:%canny算子边缘检测clearall;ll=imread(,F:robotlmagessniper.jpg');I=rgb2gray(ll);%彩色图像灰度化imshow(ll);titlef原始图像•);BW1=edge(l/Canny',0.4,0.5);%edge调用Canny为检测算子判别阈值为0.5figure,imshow(BWl);title(1阈值为0.4,sigma值为0.5的Canny算子边缘检测图像’);BW2=edge(l/
7、Canny',0.4,0.8);%edge调用Canny为检测算子判别阈值为0.8figure,imshow(BW2);title(1阈值为0.4,sigma值为0.8的Canny算子边缘检测图像');BW20=edge(l/Canny .4,l);%edge调用Canny为检测算子判别阈值为1figure,imshow(BW20);title(1阈值为0.4,sigma值为1的Canny算子边缘检测图像•);BW21=edge(lZCanny .4,1.5>;%edge调用Canny力检测算子判别阈值力1.5figureJmsho
8、w(BW21);title(1阈值为0.4,sigma值为1.5的Canny算子边缘检测阁像’);BW22=edge(l/Canny .4,2);%edge调用Canny为检测算子判别阈值为2figure