在圖像處理和計算機視覺領域中,如何從當前的圖像中提取所需要的特征信息是圖像識別的關鍵所在。在許多應用場合中需要快速准確地檢測出直線或者圓。其中一種非常有效的解決問題的方法是霍夫(Hough)變換,其為圖像處理中從圖像中識別幾何形狀的基本方法之一,應用很廣泛,也有很多改進算法。最基本的霍夫變換是從黑白圖像中檢測直線(線段)。
1 簡單介紹
霍夫變換(Hough Transform)是圖像處理中的一種特征提取技術,該過程在一個參數空間中通過計算累計結果的局部最大值得到一個符合該特定形狀的集合作為霍夫變換結果。
霍夫變換於1962年由PaulHough首次提出,最初的Hough變換是設計用來檢測直線和曲線,起初的方法要求知道物體邊界線的解析方程,但不需要有關區域位置的先驗知識。這種方法的一個突出優點是分割結果的Robustness,即對數據的不完全或噪聲不是非常敏感。然而,要獲得描述邊界的解析表達常常是不可能的。 后於1972年由Richard Duda & Peter Hart推廣使用,經典霍夫變換用來檢測圖像中的直線,后來霍夫變換擴展到任意形狀物體的識別,多為圓和橢圓。霍夫變換運用兩個坐標空間之間的變換將在一個空間中具有相同形狀的曲線或直線映射到另一個坐標空間的一個點上形成峰值,從而把檢測任意形狀的問題轉化為統計峰值問題。
2 Hough變換的基本思想
設已知一黑白圖像上畫了一條直線,要求出這條直線所在的位置。
我們知道,直線的方程可以用
來表示,其中 k 和 b 是參數,分別是斜率和截距。
過某一點 \((x_0, y_0)\) 的所有直線的參數都會滿足方程 \(y_0 = k\cdot x_0+b\) (由於 \(y=k\cdot x+b\) 過點 \((x_0, y_0)\), 所以將\((x_0, y_0)\) 代入就好), 即點 \((x_0,y_0)\) 確定了一簇直線。
方程 \(y_0=k\cdot x_0+b\) (寫成 \(b=-x_0 \cdot k+y_0\) 更好理解) 在 k-b 坐標系下是一條直線, 這樣,圖像在x-y坐標系中的一個前景像素點就對應到 k-b參數空間上的一條直線。
我們舉個例子說明解決前面那個問題的原理。設圖像上的直線是 y=x, 我們先取上面的三個點:A(0,0), B(1,1), C(2,2)。可以求出,過A點的直線的參數要滿足方程b=0, 過B點的直線的參數要滿足方程1=k+b, 過C點的直線的參數要滿足方程2=2k+b, 這三個方程就對應着參數平面上的三條直線,而這三條直線會相交於一點(k=1,b=0)。 同理,原圖像上直線y=x上的其它點(如(3,3),(4,4)等) 對應參數平面上的直線也會通過點(k=1,b=0)。這個性質就為我們解決問題提供了方法,就是把圖像平面上的點對應到參數平面上的線,最后通過統計特性來解決問題。假如圖像平面上有兩條直線,那么最終在參數平面上就會看到兩個峰值點,依此類推。

簡而言之,Hough變換思想為:在原始圖像坐標系下的一個點對應了參數坐標系中的一條直線,同樣參數坐標系的一條直線對應了原始坐標系下的一個點,然后,原始坐標系下呈現直線的所有點,它們的斜率和截距是相同的,所以它們在參數坐標系下對應於同一個點。這樣在將原始坐標系下的各個點投影到參數坐標系下之后,看參數坐標系下有沒有聚集點,這樣的聚集點就對應了原始坐標系下的直線。
在實際應用中,\(y=k\cdot x+b\)形式的直線方程沒有辦法表示x=c形式的直線(這時候,直線的斜率為無窮大)。所以實際應用中,是采用參數方程\(p=x\cdot cos(\theta)+y \cdot sin(\theta)\)。這樣,圖像平面上的一個點就對應到參數p---theta平面上的一條曲線上,其它的還是一樣。
三 算法流程
在實際操作時,步驟如下:
1、得到圖像的邊緣信息;
2、對邊緣圖像中的每一個點,在k-b空間中畫出一條直線;
3、對各直線上的點,我們采取“投票”(vote)的方法,即累加:有直線經過這一點,這一點的值加1;
4、遍歷k-b空間,找出局部極大值點,這些點的坐標(k,b)就是原圖像中可能的直線的斜率和截距。
霍夫變換的計算量和存儲都是很大的。
四 Hough變換推廣
1、已知半徑的圓
其實Hough變換可以檢測任意的已知表達形式的曲線,關鍵是看其參數空間的選擇,參數空間的選擇可以根據它的表達形式而定。比如圓的表達形式為,所以當檢測某一半徑的圓的時候,可以選擇與原圖像空間同樣的空間作為參數空間。那么圓圖像空間中的一個圓對應了參數空間中的一個點,參數空間中的一個點對應了圖像空間中的一個圓,圓圖像空間中在同一個圓上的點,它們的參數相同即a,b相同,那么它們在參數空間中的對應的圓就會過同一個點(a,b),所以,將原圖像空間中的所有點變換到參數空間后,根據參數空間中點的聚集程度就可以判斷出圖像空間中有沒有近似於圓的圖形。如果有的話,這個參數就是圓的參數。
2、未知半徑的圓
對於圓的半徑未知的情況下,可以看作是有三個參數的圓的檢測,中心和半徑。這個時候原理仍然相同,只是參數空間的維數升高,計算量增大。圖像空間中的任意一個點都對應了參數空間中的一簇圓曲線。 ,其實是一個圓錐型。參數空間中的任意一個點對應了圖像空間中的一個圓。
3、橢圓
橢圓有5個自由參數,所以它的參數空間是5維的,因此他的計算量非常大,所以提出了許多的改進算法。
五 總結
圖像空間中的在同一個圓,直線,橢圓上的點,每一個點都對應了參數空間中的一個圖形,在圖像空間中這些點都滿足它們的方程這一個條件,所以這些點,每個投影后得到的圖像都會經過這個參數空間中的點。也就是在參數空間中它們會相交於一點。所以,當參數空間中的這個相交點的越大的話,那么說明元圖像空間中滿足這個參數的圖形越飽滿。越象我們要檢測的東西。
Hough變換能夠查找任意的曲線,只要你給定它的方程。Hough變換在檢驗已知形狀的目標方面具有受曲線間斷影響小和不受圖形旋轉的影響的優點,即使目標有稍許缺損或污染也能被正確識別。