Hough變換檢測直線

2021-06-18 05:39:09 字數 2112 閱讀 6999

1、基本原理

hough變換是影象處理中從影象中識別幾何形狀的基本方法之一,即它可以檢測已知形狀的目標,而且受雜訊和曲線間斷的影響小。

hough變換的基本思想是利用點-線的對偶性。如下圖1所示:

從圖1中可看出,x-y座標和k-b座標有點----線的對偶性。x-y座標中的點p1、p2對應於k-b座標中的l1、l2;而k-b座標中的點p0對應於x-y座標中的線l0 。

由於x-y座標中的垂直線的k值為無窮大,給計算帶來不便,故使用點----正弦曲線對偶變換解決這一問題。直角座標x-y中的一點(x,y),經過點----正弦曲線對偶變換:

ρ=x*cosθ+y*sinθ(ρ是該直線到原點的距離,θ是該直線的垂線與x軸的夾角)

在極座標ρ-θ中變為一條正弦曲線,θ取(0-180°)。可以證明,直角座標x-y中直線上的點經過hough變換後,它們的正弦曲線在極座標ρ-θ有乙個公共交點,如圖2所示。

也就是說,極座標ρ-θ上的一點(a,p),對應於直角座標x-y中的一條直線,而且它們是一一對應的。

為了檢測出直角座標x-y中由點所構成的直線,可以將極座標ρ-θ量化成許多小格。根據直角座標中每個點的座標(x,y),在θ = 0-180°內以小格的步長計算各個ρ值,所得值落在某個小格內,便使該小格的累加記數器加1。當直角座標中全部的點都變換後,對小格進行檢驗,計數值最大的小格,其(θ,ρ)值對應於直角座標中所求直線。

在實際的直線檢測情況中,如果超過一定數目的點擁有相同的(ρ,θ)座標,那麼就可以判定此處有一條直線。ρ-θ 座標系圖中,明顯的交匯點就標示一條檢測出的直線;

2、hough變換演算法實現

由於點斜式不能表示垂直於橫軸的直線,我們改用極座標形式:   ρ=x*cosθ+y*sinθ;

引數平面為ρ-θ,對應不是直線而是正弦曲線;

使用交點累加器,或交點統計直方圖,找出相交線段最多的引數空間的點;然後找出該點對應的xy平面的直線線段;

由此可見,hough變換的基本策略是:由影象空間中的邊緣資料點去計算引數空間中的引數點的可能軌跡,並在乙個累加器中給計算出的參考點計數,最後選出峰值。

3、matlab程式

fbin=im2bw(f,threshold);%二值化

fcanny=edge(fbin,'canny');%canny邊緣檢測

[h,theta,rho]=hough(fcanny);

figure,imshow(h,,'xdata',theta,'ydata',rho,'initialmagnification','fit');%以適當比率顯示h

xlabel('\theta'),ylabel('\rho');%給xy軸標籤

axis on, axis normal,hold on;%顯示座標軸,使以適當比率顯示

圖3:火柴原始

圖4:對映到ρ-θ座標影象

Hough 變換檢測直線

hough 變換檢測直線的基本原理是 對x y 座標系下的每一點 x,y 對應極座標下為 rho x cos theta y sin theta 1 因此,對x y平面內的每一點,對應到極座標系則為一條直線,如果直角座標系下的點共線,則在極座標的直線會相交於一點。因此,求得極座標下相交最多的點,rh...

通過hough變換檢測直線

函式功能 通過hough變換檢測直線 引數說明 imgbinaryin,表示二值圖象 width,表示圖象寬 height,表示圖象高 houghbuf,表示hough變換需要的緩衝區指標 houghwidth,表示hough變換需要的緩衝區的寬 houghheight,表示hough變換需要的緩衝...

Hough變換檢測直線和圓

1 直線是如何表示的?對於平面中的一條直線,在直角座標系中,常見的有點斜式,兩點式兩種表示方法。然而在hough變換中,考慮的是另外一種表示方式 使用極座標 r,theta 來表示一條直線。其中r為該直線到原點的距離,theta為該直線的垂線與x軸的夾角。如下圖所示。2 如果座標系中有多個點,又怎樣...