主要內容:html
一、Hough變換的算法思想算法
二、直線檢測spa
三、圓、橢圓檢測.net
四、程序實現htm
Hough變換是圖像處理中從圖像中識別幾何形狀的基本方法之一。Hough變換的基本原理在於利用點與線的對偶性,將原始圖像空間的給定的曲線經過曲線表達形式變爲參數空間的一個點。這樣就把原始圖像中給定曲線的檢測問題轉化爲尋找參數空間中的峯值問題。也即把檢測總體特性轉化爲檢測局部特性。好比直線、橢圓、圓、弧線等。blog
霍夫變換於1962年由Paul Hough 首次提出[53],後於1972年由Richard Duda和Peter Hart推廣使用[54],經典霍夫變換用來檢測圖像中的直線,後來霍夫變換擴展到任意形狀物體的識別,多爲圓和橢圓。get
1.1 直線檢測it
設已知一黑白圖像上畫了一條直線,要求出這條直線所在的位置。咱們知道,直線的方程能夠用y=k*x+b 來表示,其中k和b是參數,分別是斜率和截距。過某一點(x0,y0)的全部直線的參數都會知足方程y0=kx0+b。即點(x0,y0)肯定了一族直線。方程y0=kx0+b在參數k--b平面上是一條直線,(你也能夠是方程b=-x0*k+y0對應的直線)。這樣,圖像x--y平面上的一個前景像素點就對應到參數平面上的一條直線。咱們舉個例子說明解決前面那個問題的原理。設圖像上的直線是y=x, 咱們先取上面的三個點:A(0,0), B(1,1), C(22)。能夠求出,過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*x+b形式的直線方程沒有辦法表示x=c形式的直線(這時候,直線的斜率爲無窮大)。因此實際應用中,是採用參數方程p=x*cos(theta)+y*sin(theta)。這樣,圖像平面上的一個點就對應到參數p---theta平面上的一條曲線上,其它的仍是同樣。
上圖(a)所示爲原始的圖像空間中一個點;(b)所示爲直角座標系當中爲過同一四條直線;(c)所示爲這四條直線在極座標參數空間能夠表示爲四個點
爲了檢測出直角座標X-Y中由點所構成的直線,能夠將極座標a-p量化成許多小格。根據直角座標中每一個點的座標(x,y),在a = 0-180°內以小格的步長計算各個p值,所得值落在某個小格內,便使該小格的累加記數器加1。當直角座標中所有的點都變換後,對小格進行檢驗,計數值最大的小格,其(a,p)值對應於直角座標中所求直線。
思路解析:
1)讀取一幅帶處理二值圖像,最好背景爲黑色;
2)獲取圖像空間的源像素數據;
3)經過量化霍夫參數空間爲有限個值間隔等分或者累加格子,即p,theta;
4)霍夫變換算法開始,每一個像素座標點P(x, y)被轉換到(r, theta)的曲線點上面,並累加到對應的格子數據點;
5)尋找最大霍夫值,設置閾值,反變換到圖像空間;
實際應用例子:車道檢測
1.2 已知半徑的圓
其實Hough變換能夠檢測任意的已知表達形式的曲線,關鍵是看其參數空間的選擇,參數空間的選擇能夠根據它的表達形式而定。好比圓的表達形式爲 ,因此當檢測某一半徑的圓的時候,能夠選擇與原圖像空間一樣的空間做爲參數空間。那麼圓圖像空間中的一個圓對應了參數空間中的一個點,參數空間中的一個點對應了圖像空間中的一個圓,圓圖像空間中在同一個圓上的點,它們的參數相同即a,b相同,那麼它們在參數空間中的對應的圓就會過同一個點(a,b),因此,將原圖像空間中的全部點變換到參數空間後,根據參數空間中點的彙集程度就能夠判斷出圖像空間中有沒有近似於圓的圖形。若是有的話,這個參數就是圓的參數。
1.3 未知半徑的圓
對於圓的半徑未知的狀況下,能夠看做是有三個參數的圓的檢測,中心和半徑。這個時候原理仍然相同,只是參數空間的維數升高,計算量增大。圖像空間中的任意一個點都對應了參數空間中的一簇圓曲線。 ,實際上是一個圓錐型。參數空間中的任意一個點對應了圖像空間中的一個圓。
1.4 橢圓
橢圓有5個自由參數,因此它的參數空間是5維的,所以他的計算量很是大,因此提出了許多的改進算法。
對於處理通常圖像,須要對圖像進行邊緣檢測和二值化處理,Hough變換的輸入是黑白二值圖像。
matlab:
http://www.mathworks.cn/cn/help/images/ref/hough.html
openCV:
http://blog.csdn.net/ccxcau/article/details/7816588
圖像空間中的在同一個圓,直線,橢圓上的點,每個點都對應了參數空間中的一個圖形,在圖像空間中這些點都知足它們的方程這一個條件,因此這些點,每一個投影后獲得的圖像都會通過這個參數空間中的點。也就是在參數空間中它們會相交於一點。因此,當參數空間中的這個相交點的越大的話,那麼說明元圖像空間中知足這個參數的圖形越飽滿。越象咱們要檢測的東西。
Hough變換可以查找任意的曲線,只要你給定它的方程。Hough變換在檢驗已知形狀的目標方面具備受曲線間斷影響小和不受圖形旋轉的影響的優勢,即便目標有稍許缺損或污染也能被正確識別。
http://blog.csdn.net/icerain_3321/article/details/1665280
http://blog.csdn.net/abcjennifer/article/details/7448513
http://blog.csdn.net/carson2005/article/details/6568414
http://blog.csdn.net/ccxcau/article/details/7816588
http://hi.baidu.com/tangsu2009/item/88475289bb40035a840fabda