霍夫變換

Hough Transform 霍夫變換檢測直線

從理論到代碼,再從代碼到理論

(1)理論之通俗理解:

1.在圖像中檢測直線的問題,其實質是找到構成直線的所有的像素點。那麼問題就是從找到直線,變成找到符合y=mx+c的所有(x,y)的點的問題。

2.進行座標系變化y=mx+c,變成c=-xm+b。直線上的點(x1,y1),在轉換座標系後爲一條直線。這個原理應該是高中的。

  

3.直線上每一個點在MC座標系中都表現爲直線,而且,這些直線都相交於一個點,(m,c)。找到所有點的問題,轉變爲尋找直線的問題。

4.對於圖像中的每一個點,在MC座標系中對應着很多的直線。找到直線的交點,就對應着找到圖像中的直線。

實際在使用這一原理的時候,不是採用直線的斜率和截距公式,而是用

如何實現:

1.       將θ角在-90度到90度的範圍裏,劃分爲很多區間,對所有的像素點(x,y)在所有θ角的時候,求出ρ.從而累加ρ值出現的次數。高於某個閾值的ρ就是一個直線。

2.       這個過程就類似於如下一個二維的表格,橫座標就是θ角,ρ就是到直線的最短距離。

橫座標θ不斷變換,對於所有的不爲0的像素點,計算出ρ,找到ρ在座標(θ,ρ)的位置累加1.

3.       上圖中局部最大的就是找到的直線的θ和ρ的值。

圖像處理之霍夫變換(直線檢測算法)

霍夫變換是圖像變換中的經典手段之一,主要用來從圖像中分離出具有某種相同特徵的幾何

形狀(如,直線,圓等)。霍夫變換尋找直線與圓的方法相比與其它方法可以更好的減少噪

聲干擾。經典的霍夫變換常用來檢測直線,圓,橢圓等。

 

霍夫變換算法思想:

以直線檢測爲例,每個像素座標點經過變換都變成都直線特質有貢獻的統一度量,一個簡單

的例子如下:一條直線在圖像中是一系列離散點的集合,通過一個直線的離散極座標公式,

可以表達出直線的離散點幾何等式如下:

X *cos(theta) + y * sin(theta)  = r 其中角度theta指r與X軸之間的夾角,r爲到直線幾何垂

直距離。任何在直線上點,x, y都可以表達,其中 r, theta是常量。該公式圖形表示如下:

然而在實現的圖像處理領域,圖像的像素座標P(x, y)是已知的,而r, theta則是我們要尋找

的變量。如果我們能繪製每個(r, theta)值根據像素點座標P(x, y)值的話,那麼就從圖像笛卡

爾座標系統轉換到極座標霍夫空間系統,這種從點到曲線的變換稱爲直線的霍夫變換。變換

通過量化霍夫參數空間爲有限個值間隔等分或者累加格子。當霍夫變換算法開始,每個像素

座標點P(x, y)被轉換到(r, theta)的曲線點上面,累加到對應的格子數據點,當一個波峯出現

時候,說明有直線存在。同樣的原理,我們可以用來檢測圓,只是對於圓的參數方程變爲如

下等式:

(x –a ) ^2 + (y-b) ^ 2 = r^2其中(a, b)爲圓的中心點座標,r圓的半徑。這樣霍夫的參數空間就

變成一個三維參數空間。給定圓半徑轉爲二維霍夫參數空間,變換相對簡單,也比較常用。

 

編程思路解析:

1.      讀取一幅帶處理二值圖像,最好背景爲黑色。

2.      取得源像素數據

3.      根據直線的霍夫變換公式完成霍夫變換,預覽霍夫空間結果

4.       尋找最大霍夫值,設置閾值,反變換到圖像RGB值空間(程序難點之一)

5.      越界處理,顯示霍夫變換處理以後的圖像




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章