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. 越界處理,顯示霍夫變換處理以後的圖像