1、霍夫直線變換
霍夫變換是圖像變換中的經(jīng)典手段之一,主要用來從圖像中分離出具有某種相同特征的幾何形狀(如,直線,圓等)?;舴蜃儞Q尋找直線與圓的方法相比與其它方法可以更好的減少噪聲干擾。經(jīng)典的霍夫變換常用來檢測(cè)直線,圓,橢圓等。
然而在實(shí)現(xiàn)的圖像處理領(lǐng)域,圖像的像素坐標(biāo)P(x, y)是已知的,而r, theta則是我們要尋找的變量。如果我們能繪制每個(gè)(r, theta)值根據(jù)像素點(diǎn)坐標(biāo)P(x, y)值的話,那么就從圖像笛卡爾坐標(biāo)系統(tǒng)轉(zhuǎn)換到極坐標(biāo)霍夫空間系統(tǒng),這種從點(diǎn)到曲線的變換稱為直線的霍夫變換。變換通過量化霍夫參數(shù)空間為有限個(gè)值間隔等分或者累加格子。當(dāng)霍夫變換算法開始,每個(gè)像素坐標(biāo)點(diǎn)P(x, y)被轉(zhuǎn)換到(r, theta)的曲線點(diǎn)上面,累加到對(duì)應(yīng)的格子數(shù)據(jù)點(diǎn),當(dāng)一個(gè)波峰出現(xiàn)時(shí)候,說明有直線存在。同樣的原理,我們可以用來檢測(cè)圓,只是對(duì)于圓的參數(shù)方程變?yōu)槿缦碌仁剑?/p>
(x –a ) ^2 + (y-b) ^ 2 = r^2
其中(a, b)為圓的中心點(diǎn)坐標(biāo),r圓的半徑。這樣霍夫的參數(shù)空間就變成一個(gè)三維參數(shù)空間。給定圓半徑轉(zhuǎn)為二維霍夫參數(shù)空間,變換相對(duì)簡(jiǎn)單,也比較常用。


如上圖,假定在一個(gè)8 * 8的平面像素中有一條直線,并且從左上角(1,8)像素點(diǎn)開始分別計(jì)算θ為0°、45°、90°、135°、180°時(shí)的ρ,圖中可以看出ρ分別為1、(9√2)/2、8、(7√2)/2、-1,并給這5個(gè)值分別記一票,同理計(jì)算像素點(diǎn)(3,6)點(diǎn)θ為0°、45°、90°、135°、180°時(shí)的ρ,再給計(jì)算出來的5個(gè)ρ值分別記一票,此時(shí)就會(huì)發(fā)現(xiàn)ρ = (9√2)/2的這個(gè)值已經(jīng)記了兩票了,以此類推,遍歷完整個(gè)8 * 8的像素空間的時(shí)候ρ = (9√2)/2就記了5票, 別的ρ值的票數(shù)均小于5票,所以得到該直線在這個(gè)8 * 8的像素坐標(biāo)中的極坐標(biāo)方程為 (9√2)/2=x * Cos45°+y * Sin45°,到此該直線方程就求出來了。(PS:但實(shí)際中θ的取值不會(huì)跨度這么大,一般是PI/180)。
2、霍夫圓變換
霍夫圓變換的基本思路是認(rèn)為圖像上每一個(gè)非零像素點(diǎn)都有可能是一個(gè)潛在的圓上的一點(diǎn),跟霍夫線變換一樣,也是通過投票,生成累積坐標(biāo)平面,設(shè)置一個(gè)累積權(quán)重來定位圓。在笛卡爾坐標(biāo)系中圓的方程為:


其中(a,b)是圓心,r是半徑,也可以表述為:


所以在abr組成的三維坐標(biāo)系中,一個(gè)點(diǎn)可以唯一確定一個(gè)圓。
而在笛卡爾的xy坐標(biāo)系中經(jīng)過某一點(diǎn)的所有圓映射到abr坐標(biāo)系中就是一條三維的曲線:

經(jīng)過xy坐標(biāo)系中所有的非零像素點(diǎn)的所有圓就構(gòu)成了abr坐標(biāo)系中很多條三維的曲線。
在xy坐標(biāo)系中同一個(gè)圓上的所有點(diǎn)的圓方程是一樣的,它們映射到abr坐標(biāo)系中的是同一個(gè)點(diǎn),所以在abr坐標(biāo)系中該點(diǎn)就應(yīng)該有圓的總像素N0個(gè)曲線相交。通過判斷abr中每一點(diǎn)的相交(累積)數(shù)量,大于一定閾值的點(diǎn)就認(rèn)為是圓。
以上是標(biāo)準(zhǔn)霍夫圓變換實(shí)現(xiàn)算法,問題是它的累加面試一個(gè)三維的空間,意味著比霍夫線變換需要更多的計(jì)算消耗。Opencv霍夫圓變換對(duì)標(biāo)準(zhǔn)霍夫圓變換做了運(yùn)算上的優(yōu)化。它采用的是“霍夫梯度法”。它的檢測(cè)思路是去遍歷累加所有非零點(diǎn)對(duì)應(yīng)的圓心,對(duì)圓心進(jìn)行考量。如何定位圓心呢?圓心一定是在圓上的每個(gè)點(diǎn)的模向量上,即在垂直于該點(diǎn)并且經(jīng)過該點(diǎn)的切線的垂直線上,這些圓上的模向量的交點(diǎn)就是圓心。
霍夫梯度法就是要去查找這些圓心,根據(jù)該“圓心”上模向量相交數(shù)量的多少,根據(jù)閾值進(jìn)行最終的判斷。

轉(zhuǎn)載:
https://blog.csdn.net/jia20003/article/details/7724530
https://blog.csdn.net/ycj9090900/article/details/52944708
https://blog.csdn.net/dcrmg/article/details/52506538