资源描述:
《霍夫变换检测直线圆流程+.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Hough变换直线检测是直接按照hough变换的定义来进行的,算法如下:1)对原始的图像进行二值化,假设0代表背景,1代表物体特征点;2)在参数空间,里建立一个累加的数组,并且置数组中的每一个元素的初值都为零;对于二值图像中每个以1表示的点,我们让取遍轴上所有可能的值,并根据式(3-3>计算对应的;再根据与的值(假设都已经取整>对数组进行累加计算(>;b5E2RGbCAP3)然后对数组进行局部的峰值检测,得到被检测直线的参数和。上述的算法受直线中的间隙与噪声的影响较小,鲁棒性比较强,但其具有运算量太大的缺点,极端情况下
2、,它的运算复杂度为。p1EanqFDPw传统随机hough变换的具体算法如下:(a>构造一个边缘点集,然后初始化参数单元集,循环的次数K=0;(b>从D中随机的选取3个点;(c>由这3个点解特征的参数;(d>在中寻找一个,使它满足,如果找到则转(f>;否则就转(e>;(e>将插入到中,其对应的计数值变为1,转(g>;(f>将所对应的计数的值加1,如果小于指定阈值,转(g>;否则就转(h>;(g>;如果,则结束;否则,转(b>;(h>是候选圆的特征参数,如果该参数对应圆上的边缘的点数,转(i>;(i>是真实的圆参数,把落
3、在参数对应的特征上的点从中去除,然后判断已经检测到的圆的数目是否已达到规定的数目,若是就结束,否则的话重置,,转(b>。DXDiTa9E3d其中是规定的检测一个圆的过程中所允许采样的最大的循环次数。为圆所必需的最小的点数,3/3通常设为,其中λ是一个固定系数,是候选圆的半径。是参数空间中的参数单元的集合,它是一个动态的链表结构。是图像空间中落到了候选圆上的点数。RTCrpUDGiT%p:阈值,0,1之间的数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%output%hough_space:参数空
4、间,h(a,b,r>表示圆心在(a,b>半径为r的圆上的点数%hough_circl:二值图像,检测到的圆%para:检测到的圆的圆心、半径[m,n]=size(BW>。size_r=round((r_max-r_min>/step_r>+1。size_angle=round(2*pi/step_angle>。hough_space=zeros(m,n,size_r>。[rows,cols]=find(BW>。ecount=size(rows>。%Hough变换%将图像空间(x,y>对应到参数空间(a,b,r>%a=x
5、-r*cos(angle>%b=y-r*sin(angle>fori=1:ecount forr=1:size_r fork=1:size_angle a=round(rows(i>-(r_min+(r-1>*step_r>*cos(k*step_angle>>。 b=round(cols(i>-(r_min+(r-1>*step_r>*sin(k*step_angle>>。 if(a>0&a<=m&b>0&b<=n>
6、 hough_space(a,b,r>=hough_space(a,b,r>+1。 end end endend%搜索超过阈值的聚集点max_para=max(max(max(hough_space>>>。index=find(hough_space>=max_para*p>。length=size(index>。hough_circle=false(m,n>。fori=1:ecount fork=1:length par3=floor(index(k>/(m*n>
7、>+1。 par2=floor((index(k>-(par3-1>*(m*n>>/m>+1。 par1=index(k>-(par3-1>*(m*n>-(par2-1>*m。 3/3if((rows(i>-par1>^2+(cols(i>-par2>^2<(r_min+(par3-1>*step_r>^2+5&... (rows(i>-par1>^2+(cols(i>-par2>^2>(r_min+(par3-1>*step_r>^2-5>
8、 hough_circle(rows(i>,cols(i>>=true。 end endend%打印检测结果fork=1:length par3=floor(index(k>/(m*n>>+1。 par2=floor((index(k>-(par3-1>*(m*n>>/m>+1。 par1=ind