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