OpenCV利用霍夫變換實現交通車道線檢測_第1頁
OpenCV利用霍夫變換實現交通車道線檢測_第2頁
OpenCV利用霍夫變換實現交通車道線檢測_第3頁
OpenCV利用霍夫變換實現交通車道線檢測_第4頁
OpenCV利用霍夫變換實現交通車道線檢測_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第OpenCV利用霍夫變換實現交通車道線檢測目錄一、霍夫變換二、霍夫變換直線檢測的原理三、霍夫變換直線檢測API函數接口四、霍夫直線變換實現車道線的檢測

一、霍夫變換

經典霍夫變換用來檢測圖像中的直線,后來霍夫變換經過擴展可以進行任意形狀物體的識別,例如圓和橢圓。霍夫變換運用兩個坐標空間之間的變換,將在一個空間中具有相同形狀的曲線或直線映射到另一個坐標空間的一個點上形成峰值,從而把檢測任意形狀的問題轉化為統計峰值問題。

二、霍夫變換直線檢測的原理

(1)圖像空間中的點與參數空間中的直線一一對應

在圖像空間直角坐標系x-y中,一條直線在直角坐標系下可以表示為:y=kx+b;其中常數k和b是參數,表示直線的斜率和截距。過某一點A(x0,y0)的所有直線的參數均滿足方程:y0=kx0+b;即過圖像上的一點A(x0,y0)可以確定N條直線。

如果我們將方程改寫為:b=-kx0+y0;那么該方程在參數空間k-b中就對應了一條直線。也就是說,圖像空間直角坐標系x-y中的點(x0,y0);對應了參數空間k-b中的直線b=kx0+y0;因此可以得到結論,圖像空間中的點與參數空間中的直線一一對應。

直線y=kx+b上再增加一個點B(x1,y1),B點在圖像空間直角坐標系可以確定N條直線,那么點B(x1,y1),但是在參數空間也有一條對應的直線,與A(x0,y0)確定的直線相較于M點。

(2)圖像空間中的直線與參數空間中的點一一對應

圖像空間直角坐標系x-y中的點A(x0,y0)和點B(x1,y1),在參數空間坐標系k-b中對應的直線相交于一點,這也就是說AB所確定的直線,在參數空間坐標系中對應著唯一一個點,而這個點的坐標值(k0,b0)也就是直線AB的參數。這就是直線檢測任務中的對偶性,這個性質也為我們解決直線檢測任務提供了方法,也就是把圖像空間中的直線對應到參數空間中的點,最后通過統計特性來解決問題。假如圖像空間中有兩條直線,那么最終在參數空間中就會對應到兩個峰值點,依此類推。

參數空間選擇了笛卡爾直角坐標系是為了解釋偶性和霍夫變換的基本原理,但在實際應用中,參數空間是不能選擇直角坐標系的,原始圖像直角坐標空間中的特殊直線x=c(c為常數,垂直x軸,直線的斜率為無窮大)是沒辦法在基于直角坐標系的參數空間中表示的,一般我們采用極坐標方式作為參數空間。

空間直角坐標系與極坐標系的轉換

在下圖中可以看出,參數空間的每個點(r,)都對應了圖像空間直角坐標系的一條直線,或者說圖像空間的一個點在參數空間中就對應為一條曲線。參數空間采用極坐標系,這樣就可以在參數空間表示圖像空間直角坐標系中的所有直線了。此時圖像空間直角坐標系x-y上的一個點對應到參數空間(極坐標系-)上是一條曲線,確切的說是一條正弦曲線。

經過變換,圖像空間中的每個點(x,y)就被映射為一個(r,)極坐標空間中的正弦曲線。而圖像空間直角坐標系中共線的點所對應的參數空間中正弦曲線相交于一點(r,)。這樣就把在圖像空間中檢測直線的問題,轉化為在極坐標參數空間中尋找通過點(r,)的最多正弦曲線數量的問題。霍夫空間中,曲線的交點次數越多,所代表的參數越確定(相交的曲線都是圖像空間直角坐標系上的點),畫出的圖形越飽滿。空間直角坐標系上一條直線上的所有點都轉化為參數空間上的曲線,曲線一定會交于一個共同點。

三、霍夫變換直線檢測API函數接口

OpenCV支持三種霍夫直線檢測算法:

1)StandardHoughTransform(SHT,標準霍夫變換)

2)MultiscaleHoughTransform(MSHT,多尺度霍夫變換)

3)ProgressiveProbabilityHouthTransform(PPHT,漸進概率式霍夫變換)

(1)標準霍夫變換直線檢測cv::HoughLines從平面坐標轉換到霍夫空間,最終輸出是(,r)表極坐標空間。

霍夫直線變換API函數接口

cv::HoughLines(

InputArraysrc,//輸入圖像,必須8-bit的灰度圖像

OutputArraylines,//輸出的極坐標來表示直線,經過調用HoughLines函數后儲存了霍夫線變換檢測到線條

//的輸出矢量(每一條線由具有兩個元素的矢量(rho,theta)表示)

doublerho,//生成極坐標時候的像素掃描步長

doubletheta,//生成極坐標時候的角度步長,一般取值CV_PI/180

intthreshold,//閾值,只有獲得足夠交點的極坐標點才被看成是直線

doublesrn=0;//是否應用多尺度的霍夫變換,如果不是設置0表示經典霍夫變換

doublestn=0;//是否應用多尺度的霍夫變換,如果不是設置0表示經典霍夫變換

doublemin_theta=0;//表示角度掃描范圍0~180之間,默認即可

doublemax_theta=CV_PI

)//一般情況是有經驗的開發者使用,需要自己反變換到平面空間

HoughLines函數輸出檢測到直線的矢量表示集合,每一條直線由具有兩個元素的矢量(,)表示,其中表示直線距離原點(0,0)的長度,表示直線的角度(以弧度為單位)。HoughLines函數無法輸出圖像空間中線段的長度。

(2)HoughLinesP:漸進概率式霍夫變換

cv::HoughLinesP(

InputArraysrc,//輸入圖像,必須8-bit的灰度圖像

OutputArraylines,//輸出的極坐標來表示直線

doublerho,//生成極坐標時候的像素掃描步長

doubletheta,//生成極坐標時候的角度步長,一般取值CV_PI/180

intthreshold,//閾值,只有獲得足夠交點的極坐標點才被看成是直線

doubleminLineLength=0;//最小直線長度

doublemaxLineGap=0;//最大間隔

漸進概率式霍夫變換直線檢測cv::HoughLinesP最終輸出是直線的兩個點。HoughLinesP能夠檢測出線端,即能夠檢測出圖像中直線的兩個端點,確切地定位圖像中的直線。

四、霍夫直線變換實現車道線的檢測

(1)彩色圖像RBG轉化為灰度圖Gray,opencv上需要注意顏色空間是RGB還是BGR,CImg中RGB分別對應0,1,2通道。

(2)因為霍夫圓檢測對噪聲比較敏感,所以首先要對圖像做中值濾波(或者高斯濾波)去噪,平滑圖像,消除圖像噪聲。

(3)圖像邊緣提取(梯度算子、拉普拉斯算子、canny邊緣檢測算法)

(4)圖像二值化(判斷此處是否為邊緣點,就看灰度值==255),在高斯去噪和邊界提取之后都需要二值化。

(5)映射到霍夫空間(此處準備兩個容器,一個CImg用來展示hough-space概況,一個數組hough-space用來儲存voting的值,因為投票過程往往有某個極大值超過255,多達幾千,不能直接用灰度圖來記錄投票信息)。

(6)取局部極大值,設定閾值,過濾低于閾值的像素,排除干擾直線

(7)繪制直線。

代碼實現

#include"stdafx.h"

#includeopencv2\imgproc\imgproc.hpp

#includeopencv2\opencv.hpp

#includeopencv

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論