資源描述:
《霍夫變換檢測直線圓流程+》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、Hough變換直線檢測是直接按照hough變換的定義來進(jìn)行的,算法如下:1)對原始的圖像進(jìn)行二值化,假設(shè)0代表背景,1代表物體特征點;2)在參數(shù)空間,里建立一個累加的數(shù)組,并且置數(shù)組中的每一個元素的初值都為零;對于二值圖像中每個以1表示的點,我們讓取遍軸上所有可能的值,并根據(jù)式(3-3)計算對應(yīng)的;再根據(jù)與的值(假設(shè)都已經(jīng)取整)對數(shù)組進(jìn)行累加計算();3)然后對數(shù)組進(jìn)行局部的峰值檢測,得到被檢測直線的參數(shù)和。上述的算法受直線中的間隙與噪聲的影響較小,魯棒性比較強,但其具有運算量太大的缺點,極端情況下,它的運算復(fù)雜度為。傳統(tǒng)隨機hough變換的具體算法如下:
2、(a)構(gòu)造一個邊緣點集,然后初始化參數(shù)單元集,循環(huán)的次數(shù)K=0;(b)從D中隨機的選取3個點;(c)由這3個點解特征的參數(shù);(d)在中尋找一個,使它滿足,如果找到則轉(zhuǎn)(f);否則就轉(zhuǎn)(e);(e)將插入到中,其對應(yīng)的計數(shù)值變?yōu)?,轉(zhuǎn)(g);(f)將所對應(yīng)的計數(shù)的值加1,如果小于指定閾值,轉(zhuǎn)(g);否則就轉(zhuǎn)(h);(g);如果,則結(jié)束;否則,轉(zhuǎn)(b);(h)是候選圓的特征參數(shù),如果該參數(shù)對應(yīng)圓上的邊緣的點數(shù),轉(zhuǎn)(i);(i)是真實的圓參數(shù),把落在參數(shù)對應(yīng)的特征上的點從中去除,然后判斷已經(jīng)檢測到的圓的數(shù)目是否已達(dá)到規(guī)定的數(shù)目,若是就結(jié)束,否則的話重置,,轉(zhuǎn)(b
3、)。其中是規(guī)定的檢測一個圓的過程中所允許采樣的最大的循環(huán)次數(shù)。為圓所必需的最小的點數(shù),通常設(shè)為,其中λ是一個固定系數(shù),是候選圓的半徑。是參數(shù)空間中的參數(shù)單元的集合,它是一個動態(tài)的鏈表結(jié)構(gòu)。是圖像空間中落到了候選圓上的點數(shù)。%p:閾值,0,1之間的數(shù)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%output%hough_space:參數(shù)空間,h(a,b,r)表示圓心在(a,b)半徑為r的圓上的點數(shù)%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)對應(yīng)到參數(shù)空間(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%打印檢測結(jié)果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+