資源描述:
《圖像處理之霍夫變換》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、圖像處理之霍夫變換(直線檢測(cè)算法)霍夫變換是圖像變換中的經(jīng)典手段之一,主要用來從圖像中分離出具有某種相同特征的幾何形狀(如,直線,圓等)?;舴蜃儞Q尋找直線與圓的方法相比與其它方法可以更好的減少噪聲干擾。經(jīng)典的霍夫變換常用來檢測(cè)直線,圓,橢圓等。?霍夫變換算法思想:以直線檢測(cè)為例,每個(gè)像素坐標(biāo)點(diǎn)經(jīng)過變換都變成都直線特質(zhì)有貢獻(xiàn)的統(tǒng)一度量,一個(gè)簡單的例子如下:一條直線在圖像中是一系列離散點(diǎn)的集合,通過一個(gè)直線的離散極坐標(biāo)公式,可以表達(dá)出直線的離散點(diǎn)幾何等式如下:X*cos(theta)+y*sin(theta)?=r其中角度thet
2、a指r與X軸之間的夾角,r為到直線幾何垂直距離。任何在直線上點(diǎn),x,y都可以表達(dá),其中r,theta是常量。該公式圖形表示如下:然而在實(shí)現(xiàn)的圖像處理領(lǐng)域,圖像的像素坐標(biāo)P(x,y)是已知的,而r,theta則是我們要尋找的變量。如果我們能繪制每個(gè)(r,theta)值根據(jù)像素點(diǎn)坐標(biāo)P(x,y)值的話,那么就從圖像笛卡爾坐標(biāo)系統(tǒng)轉(zhuǎn)換到極坐標(biāo)霍夫空間系統(tǒng),這種從點(diǎn)到曲線的變換稱為直線的霍夫變換。變換通過量化霍夫參數(shù)空間為有限個(gè)值間隔等分或者累加格子。當(dāng)霍夫變換算法開始,每個(gè)像素坐標(biāo)點(diǎn)P(x,y)被轉(zhuǎn)換到(r,theta)的曲線點(diǎn)上面
3、,累加到對(duì)應(yīng)的格子數(shù)據(jù)點(diǎn),當(dāng)一個(gè)波峰出現(xiàn)時(shí)候,說明有直線存在。同樣的原理,我們可以用來檢測(cè)圓,只是對(duì)于圓的參數(shù)方程變?yōu)槿缦碌仁剑?x–a)^2+(y-b)^2=r^2其中(a,b)為圓的中心點(diǎn)坐標(biāo),r圓的半徑。這樣霍夫的參數(shù)空間就變成一個(gè)三維參數(shù)空間。給定圓半徑轉(zhuǎn)為二維霍夫參數(shù)空間,變換相對(duì)簡單,也比較常用。?編程思路解析:1.??????讀取一幅帶處理二值圖像,最好背景為黑色。2.??????取得源像素?cái)?shù)據(jù)3.??????根據(jù)直線的霍夫變換公式完成霍夫變換,預(yù)覽霍夫空間結(jié)果4.???????尋找最大霍夫值,設(shè)置閾值,反變換到
4、圖像RGB值空間(程序難點(diǎn)之一)5.??????越界處理,顯示霍夫變換處理以后的圖像?關(guān)鍵代碼解析:直線的變換角度為[0~PI]之間,設(shè)置等份為500為PI/500,同時(shí)根據(jù)參數(shù)直線參數(shù)方程的取值范圍為[-r,r]有如下霍夫參數(shù)定義:[java]?viewplaincopy1.//?prepare?for?hough?transform??2.int?centerX?=?width?/?2;??3.int?centerY?=?height?/?2;??1.double?hough_interval?=?PI_VALUE/(do
5、uble)hough_space;??2.??????3.int?max?=?Math.max(width,?height);??4.int?max_length?=?(int)(Math.sqrt(2.0D)?*?max);??5.hough_1d?=?new?int[2?*?hough_space?*?max_length];??實(shí)現(xiàn)從像素RGB空間到霍夫空間變換的代碼為:[java]?viewplaincopy1.//?start?hough?transform?now....??2.int[][]?image_2d?=
6、?convert1Dto2D(inPixels);??3.for?(int?row?=?0;?row?
7、?not?know?the?theta?angle?and?r?value,???9.????????//?we?have?to?calculate?all?hough?space?for?each?pixel?point??10.????????//?then?we?got?the?max?possible?theta?and?r?pair.??11.????????//?r?=?x?*?cos(theta)?+?y?*?sin(theta)??12.????????for(int?cell=0;?cell?
8、space;?cell++?)?{??13.????????????max?=?(int)((col?-?centerX)?*?Math.cos(cell?*?hough_interval)?+?(row?-?centerY)?*?Math.sin(cell?*?hough_