国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OpenCV的鐵路導(dǎo)軌自動(dòng)識(shí)別研究

2013-07-25 02:28余學(xué)才丁建平李亞南
關(guān)鍵詞:導(dǎo)軌圖像處理線段

黃 凱,余學(xué)才,丁建平,李亞南,唐 飛

(電子科技大學(xué)光電信息學(xué)院,四川成都610054)

0 引言

列車提速,行車密度增大使得鐵路運(yùn)輸?shù)陌踩絹碓绞艿饺藗冴P(guān)注。在鐵路運(yùn)輸環(huán)境中,鐵路導(dǎo)軌線路上的路障一直成為主要的安全隱患,而鐵路導(dǎo)軌的準(zhǔn)確識(shí)別是檢測(cè)和定位路障的基礎(chǔ)工作[1],因此如何高效且精確地識(shí)別出導(dǎo)軌位置對(duì)減少鐵路運(yùn)輸事故的發(fā)生,提高鐵路行車安全有著很重要的實(shí)際意義。

近些年,大部分提出的很多基于視覺的鐵路導(dǎo)軌識(shí)別方法,在實(shí)時(shí)性和精確性方面不能得到同時(shí)滿足,特別是在復(fù)雜的自然環(huán)境下,當(dāng)光線和天氣的情況發(fā)生變化時(shí),鐵路導(dǎo)軌的識(shí)別就會(huì)變得比較復(fù)雜。目前,常用的導(dǎo)軌識(shí)別方法有基于邊緣檢測(cè)[2-3],直方圖均衡化和全局最優(yōu)閾值分割[4]等。

文獻(xiàn)[5]在對(duì)道路標(biāo)識(shí)線識(shí)別的研究中提出了基于方向和長度上的線段判別算法[5]。本文在此基礎(chǔ)上,利用OpenCV圖像處理函數(shù)庫,通過對(duì)其算法進(jìn)行相關(guān)優(yōu)化改進(jìn),并采用安裝在列車頭部上方的紅外熱像儀來得到紅外視頻圖像,減少外界復(fù)雜環(huán)境的變化對(duì)導(dǎo)軌圖像處理的影響[6],以實(shí)現(xiàn)快速準(zhǔn)確地自動(dòng)識(shí)別出鐵路導(dǎo)軌。

1 OpenCV平臺(tái)簡(jiǎn)介

OpenCV包含有基于C/C++語言的開源圖像處理函數(shù)庫,實(shí)現(xiàn)了數(shù)字圖像處理和計(jì)算機(jī)視覺方面的很多算法,涵蓋了如醫(yī)學(xué)成像,信息安全,用戶界面,攝像機(jī)標(biāo)定,立體視覺和機(jī)器人等計(jì)算機(jī)視覺的許多應(yīng)用領(lǐng)域。OpenCV的設(shè)計(jì)目標(biāo)是執(zhí)行速度盡量快,主要關(guān)注實(shí)時(shí)應(yīng)用,采用優(yōu)化C代碼編寫,能夠充分利用多核處理器的優(yōu)勢(shì),可以運(yùn)行在Linux/Windows/Mac等操作系統(tǒng)上[7]。在VC++環(huán)境下使用時(shí),可以方便地調(diào)用OpenCV相關(guān)庫函數(shù),使得VC在數(shù)字圖像處理方面的功能得到了極大地?cái)U(kuò)充,優(yōu)化了相關(guān)代碼的編寫,降低了VC的開發(fā)難度,使得相關(guān)程序的開發(fā)周期縮短。

2 基于OpenCV的導(dǎo)軌自動(dòng)識(shí)別系統(tǒng)設(shè)計(jì)

基于OpenCV平臺(tái)的導(dǎo)軌自動(dòng)識(shí)別系統(tǒng)設(shè)計(jì)流程圖如圖1所示。

圖1 導(dǎo)軌識(shí)別系統(tǒng)設(shè)計(jì)流程

2.1 導(dǎo)軌圖像獲取及預(yù)處理

當(dāng)紅外熱像儀作為輸入設(shè)備時(shí),OpenCV中HighGUI工具包提供了一種簡(jiǎn)單的方式來處理從中實(shí)時(shí)讀入的視頻流,即函數(shù)cvCreateCameraCapture(),函數(shù)參數(shù)為攝像設(shè)備的ID,返回值為CvCapture*指針。之后的處理同視頻文件類似,之后可以使用cvQueryFrame()函數(shù)來獲取視頻中的圖像序列幀,其函數(shù)參數(shù)為CvCapture結(jié)構(gòu)的指針,用來將下一幀視頻文件載入內(nèi)存,返回一個(gè)對(duì)應(yīng)當(dāng)前幀的指針。圖2為從視頻流中提取出的一幀圖像。

圖2 視頻提取出的直道導(dǎo)軌圖像

為了使方案滿足實(shí)時(shí)性的要求,提高圖像處理速度,對(duì)其預(yù)處理的第一步是灰度化處理,使之成為8位的灰度圖像,以此來減少處理導(dǎo)軌圖像的數(shù)據(jù)量。OpenCV在向灰度轉(zhuǎn)換時(shí),灰度值的計(jì)算使用加權(quán)平均值法:R=G=B=(0.299)R+(0.587)G+(0.114)B。

由于相關(guān)儀器設(shè)備的自身及外界環(huán)境的限制,還有圖像在形成和處理時(shí)不可避免的存在著一些干擾信息,使得紅外圖像存在一定的噪聲,噪聲的存在使圖像質(zhì)量變差,掩蓋目標(biāo)特征,給后續(xù)的圖像分析處理帶來不便。因此,需要去除參雜的噪聲來改善導(dǎo)軌圖像的質(zhì)量。本文采用的圖像平滑處理方式為高斯濾波,它采用卷積核來與輸入圖像的每一個(gè)點(diǎn)進(jìn)行卷積,將最終的計(jì)算結(jié)果之和作為輸出圖像的像素值。處理結(jié)果如圖3所示。

圖3 經(jīng)預(yù)處理得到的直道導(dǎo)軌圖像

2.2 導(dǎo)軌圖像的邊緣提取

在導(dǎo)軌識(shí)別過程中,圖像的邊緣提取至關(guān)重要。在灰度圖像中,所謂邊緣就是圖像中局部區(qū)域灰度值變化顯著的部分,它集中了目標(biāo)的重要特征信息。邊緣的準(zhǔn)確提取對(duì)于后續(xù)導(dǎo)軌的自動(dòng)識(shí)別至關(guān)重要。

Canny方法使用拉普拉斯算子,在灰度圖像的處理中有著廣泛的應(yīng)用,無論在邊緣定位精度還是抗噪的能力上都有著明顯優(yōu)勢(shì),與其他邊緣檢測(cè)方法的不同之處在于,首先采用高斯濾波器來對(duì)圖像進(jìn)行平滑,并用高斯算子的一階微分來計(jì)算像素點(diǎn)的梯度幅值以及方向,對(duì)所得梯度幅值進(jìn)行非極大值抑制,來確定邊緣的像素點(diǎn)。最后它使用雙閾值方法分別檢測(cè)圖像的強(qiáng)邊緣和弱邊緣,并且僅當(dāng)弱邊緣與強(qiáng)邊緣相連時(shí)才將弱邊緣包含在輸出圖像中[8]。經(jīng)邊緣提取后導(dǎo)軌圖像如圖4所示。

2.3 導(dǎo)軌的自動(dòng)識(shí)別

2.3.1 鏈碼跟蹤提取線段

目前常用的直線段提取方法有Hough變換,Hough變換實(shí)質(zhì)為把圖像空間中每一個(gè)像素點(diǎn)映射為參數(shù)平面內(nèi)對(duì)應(yīng)的直線,最后通過統(tǒng)計(jì)特性來解決問題,但是由于這種空間映射關(guān)系使得計(jì)算復(fù)雜度增大,實(shí)時(shí)性不高,且這種方式不能用來獲得線段的端點(diǎn)以及長度信息。另一種廣泛使用的是鏈碼跟蹤算法,通過鏈碼表的使用,來提取線段信息,不僅方法簡(jiǎn)單,且能獲得線段的長度,方向信息,非常適合對(duì)線段進(jìn)行后續(xù)的判別處理[9]。

圖4 Canny邊緣提取直道導(dǎo)軌結(jié)果

鏈碼是圖像處理中出現(xiàn)較早的概念,根據(jù)中心像素指向它的領(lǐng)域八個(gè)鄰點(diǎn)的方向來定義的,取值為0~7。本文選用OpenCV中如圖5所示的鏈碼表,當(dāng)鏈碼值加1,所指方向順時(shí)針旋轉(zhuǎn)45°。由圖5可知,可以根據(jù)鏈碼表的特點(diǎn)用來計(jì)算跟蹤到的線段長度,當(dāng)出現(xiàn)偶數(shù)號(hào)鏈碼值時(shí),表示連接的兩像素距離為1,出現(xiàn)奇數(shù)號(hào)鏈碼值時(shí)表示連接的兩像素距離為√2。

圖5 Freeman鏈碼對(duì)應(yīng)的8個(gè)方向

本方案采用由文獻(xiàn) [10]孫涵等人在新的基于鏈碼的快速直線檢測(cè)算法中提出的直線近似度公式[10]:設(shè)鏈碼串的實(shí)際長度Len(ps,pe),兩個(gè)端點(diǎn)ps,pe之間的理想直線距離 ps-pe,則該段鏈碼串的直線近似度表示為 S=可知,當(dāng)S值越大時(shí),代表該段鏈碼串越接近理想直線。由于實(shí)際中鐵路導(dǎo)軌線的形狀并不可能有較大的彎曲,所以在此基礎(chǔ)上,本方案預(yù)設(shè)的閾值ST較小,這樣可同時(shí)確保遇到彎道導(dǎo)軌時(shí)候也能準(zhǔn)確檢測(cè)到曲線信息。在利用鏈碼跟蹤線段過程采用按“向右看“準(zhǔn)則進(jìn)行,通常將鏈碼信息保存在一維數(shù)組中,如整型數(shù)組code[],它的前兩個(gè)元素存放鏈碼串中首位像素的起始位置坐標(biāo)(x,y),第三元素存放鏈碼串中總的像素個(gè)數(shù),從第四位元素開始存放鏈碼序列。

2.3.2 長度及直線近似度的判斷

從圖像左下開始逐點(diǎn)向右逐行向上進(jìn)行掃描,為避免像素重復(fù)檢測(cè),提高跟蹤時(shí)的速度,除了對(duì)掃描過的像素進(jìn)行標(biāo)記,可根據(jù)上次鏈碼值來計(jì)算下次的檢測(cè)起點(diǎn),結(jié)合OpenCV鏈碼對(duì)應(yīng)方向,當(dāng)進(jìn)入鏈碼為奇數(shù)時(shí),待測(cè)始點(diǎn)的鏈碼為前者減2加8,為偶數(shù)時(shí)則減1加8,這里加8是為確保鏈碼值保持在0~7之間。對(duì)鏈碼跟蹤線段形成的鏈碼串進(jìn)行分析處理,計(jì)算鏈碼串跟蹤到的線段的實(shí)際長度和理想長度,其中實(shí)際長度由鏈碼表中鏈碼值計(jì)算得出,而理想長度則由該線段的終點(diǎn)和起點(diǎn)坐標(biāo)計(jì)算求出。將實(shí)際長度Len(ps,pe)與所設(shè)閾值LT相比,如果小于閾值,則表示線段長度過短,對(duì)識(shí)別導(dǎo)軌作用不大,或是雜而亂的干擾線段可直接去除。反之,繼續(xù)計(jì)算出直線段近似度,并與所設(shè)閾值ST相比,如小于閾值ST,則進(jìn)一步過濾掉不符合要求的線段[11-12]。

2.3.3 利用統(tǒng)計(jì)鏈碼值次數(shù)判別線段

考慮到紅外熱像儀位于列車頭部正上方,所以列車行駛方向應(yīng)與鐵路導(dǎo)軌線方向基本保持相同,或者兩者之間的夾角在一很小范圍之內(nèi)。結(jié)合鏈碼跟蹤線段時(shí)的優(yōu)勢(shì),提出在上一步鏈碼跟蹤線段得到鏈碼串的同時(shí),利用統(tǒng)計(jì)所有鏈碼值出現(xiàn)的次數(shù),并進(jìn)行比較,得到的最大值可以代表線段的主要方向,來進(jìn)行方向上判斷,具體算法步驟如下:

步驟1 建立一個(gè)一維數(shù)組a[8]并初始化為0,數(shù)組八個(gè)元素分別用來存放鏈碼串中鏈碼值出現(xiàn)的次數(shù),如a[i]=Ni,Ni為i出現(xiàn)的次數(shù),i為0~7的鏈碼值,即圖5中的對(duì)應(yīng)的八個(gè)方向。

步驟2 由于當(dāng)前鏈碼串信息存放于code[]中,所以從第四個(gè)元素開始計(jì)數(shù),鏈碼值i出現(xiàn)一次,相對(duì)應(yīng)數(shù)組元素a[i]加1。

步驟3 新建一整形變量Max,并賦初值為a[0]。

步驟4 將Max分別與a[1]至a[7]進(jìn)行大小比較,若Max小于后者,則將后者值賦予Max。

步驟5 經(jīng)過步驟4之后,此時(shí)a[0]至a[7]中最大值已賦予Max,結(jié)合實(shí)際鐵路導(dǎo)軌線總體方向可以由0或1或7來表示,來判斷最終賦予Max最大值的是否為a[0],a[1],a[7]三者之一,否的話則表示此線段方向不對(duì),不是正常的鐵路導(dǎo)軌線,則應(yīng)消除此線段。效果如圖6所示。

2.3.4 斷線的連接

經(jīng)過以上方法對(duì)導(dǎo)軌圖像處理之后,可以得到主要以鐵路導(dǎo)軌線為主的輪廓線,但是由于噪聲的干擾和前期進(jìn)行的處理常常會(huì)出現(xiàn)線段輕微斷線的現(xiàn)象,即一條線段中會(huì)有少許的像素缺失。針對(duì)這種斷線情況提出了在斷線連接前后,統(tǒng)計(jì)線段鏈碼值出現(xiàn)次數(shù),利用最大值的改變來衡量斷線連接是否合理、準(zhǔn)確。經(jīng)斷線連接后的效果如圖7所示。

具體的算法表示如下:

步驟1 從左下逐點(diǎn)向右逐行向上掃描全圖,對(duì)得到的當(dāng)前鏈碼串進(jìn)行判斷。

步驟2 對(duì)當(dāng)前鏈碼串中所有鏈碼值出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計(jì),通過比較得到的最大值來確定線段的主要方向。并取得當(dāng)前線段的終點(diǎn)像素坐標(biāo),以此坐標(biāo)為中心在一定范圍內(nèi)查找此線段外未標(biāo)記的像素點(diǎn),這里采用6×6的矩形范圍。

步驟3 若存在這樣的一個(gè)像素點(diǎn),保存其坐標(biāo)值,并利用OpenCV的畫線函數(shù)連接這兩點(diǎn)。

步驟4 對(duì)斷點(diǎn)連接后,所形成的新線段進(jìn)行鏈碼跟蹤,統(tǒng)計(jì)鏈碼串中鏈碼值出現(xiàn)的次數(shù),得到最大值,從而獲得新線段的主要方向。

步驟5 比較前后方向上的改變,求出差的絕對(duì)值若小于2,則表示方向接近,此次斷線連接合理。否則,刪除由畫線函數(shù)連接兩點(diǎn)之間的線段。繼續(xù)尋找下一像素點(diǎn),若存在則進(jìn)入步驟3,不存在則進(jìn)入步驟1繼續(xù)循環(huán),直到圖像被全部掃描完畢。

3 實(shí)驗(yàn)結(jié)果

經(jīng)過以上步驟處理過的鐵路導(dǎo)軌線在圖中應(yīng)為最長線段,所以最后一步再去除相對(duì)較短的線條。在原圖中用加粗的實(shí)線顯示出標(biāo)識(shí)的鐵路導(dǎo)軌線如圖8所示。

圖8 直道導(dǎo)軌原圖中所標(biāo)識(shí)出的鐵路導(dǎo)軌線

對(duì)彎道導(dǎo)軌的情況,采用本文圖像處理方法,實(shí)驗(yàn)結(jié)果如圖9彎道導(dǎo)軌檢測(cè)效果所示。

4 圖像處理部分具體的OpenCV函數(shù)實(shí)現(xiàn)

(1)圖像的灰度化,cvCvtColor(src,dst,CV_BGR2GRAY);將原始圖像幀轉(zhuǎn)為8位灰度圖。

(2)平滑濾波,cvSmooth(src,dst,CV_GAUSSIAN,3,3,0,0);對(duì)圖像高斯濾波。

(3)Canny算 子 邊 緣 提 取 cvCanny(src,dst,lowThresh,highThresh,3);參數(shù) lowThresh,highThresh分別為低,高閾值,通常高低閾值之比在2倍到3倍之間。

(4)輪廓提取 cvFindContours(dst,storage,&contours,sizeof(CvChain),CV_RETR_LIST,CV_CHAIN_CODE);對(duì)斷線連接后的導(dǎo)軌進(jìn)行輪廓提取。

(5)畫輪廓線 cvDrawContours(src,contours,CV_RGB(255,0,0),CV_RGB(255,0,0),100,3,8);在原圖中用指定類型的實(shí)線標(biāo)識(shí)出導(dǎo)軌輪廓線。

5 結(jié)束語

本文利用圖像處理相關(guān)知識(shí),對(duì)鐵路導(dǎo)軌的自動(dòng)識(shí)別進(jìn)行了詳細(xì)的研究。因基于OpenCV平臺(tái)下,采用OpenCV函數(shù)庫中的優(yōu)化函數(shù),使得本方案在實(shí)時(shí)應(yīng)用性方面表現(xiàn)出色,采用鏈碼跟蹤線段時(shí),利用統(tǒng)計(jì)鏈碼值出現(xiàn)次數(shù)來完成了在方向上對(duì)線段的判斷和斷線的連接,最終實(shí)現(xiàn)了在原圖中準(zhǔn)確標(biāo)識(shí)出導(dǎo)軌輪廓線,為后續(xù)鐵路導(dǎo)軌線路上路障檢測(cè)和定位工作的開展奠定了基礎(chǔ)。

圖9 彎道導(dǎo)軌檢測(cè)效果

[1]REN Zhong.Railway recognition based on prior knowledge[D].Wuhan:Wuhan University of Technology,2007(in Chinese).[任重.基于先驗(yàn)知識(shí)的鐵軌識(shí)別 [D].武漢:武漢理工大學(xué),2007.]

[2]CHAI Shihong.Railway recognition based on edge detection [J].Railway Computer Application,2008,18(4):1-3(in Chinese).[柴世紅.基于邊緣檢測(cè)的鐵軌識(shí)別 [J].鐵路計(jì)算機(jī)應(yīng)用,2008,18(4):1-3.]

[3]LOU Ruixia.Study on video surveillance technology for railway roadblock[D].Chengdu:Southwest Jiaotong University,2006(in Chinese).[樓瑞霞.鐵路路障視頻監(jiān)測(cè)技術(shù)[D].成都:西南交通大學(xué),2006.]

[4]GUAN Peng,GU Xiaodong,ZHANG Liming.Automatic railroad detection approach based on image processing[J].Computer Engineering,2007,33(19):207-212(in Chinese).[關(guān)鵬,顧曉東,張立明.一種基于圖像處理的鐵軌自動(dòng)檢測(cè)方法 [J].計(jì)算機(jī)工程,2007,33(19):207-212.]

[5]WU Zhe,SUN Han.Lane mark identification algorithm based on fast line detection [J].Computer Technology And Development,2009,19(5):48-51(in Chinese).[吳哲,孫涵.基于快速直線段提取的道路標(biāo)識(shí)線識(shí)別算法[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009,19(5):48-51.]

[6]SUN Tongyi,LI Lin.Realization of moving targets detecting algorithm in infrared video images based on OpenCV [J].Informatization Research,2010,36(11):12-13(in Chinese).[孫統(tǒng)義,李林.基于OpenCV的紅外運(yùn)動(dòng)目標(biāo)檢測(cè)方法及實(shí)現(xiàn)[J].信息化研究,2010,36(11):12-13.]

[7]YU Shiqi,LIU Ruizhen.Learning OpenCV(Chinese version)[M].Beijing:Tsinghua University Press,2009(in Chinese).[于仕琪,劉瑞禎.學(xué)習(xí)OpenCV(中文版)[M].北京:清華大學(xué)出版社,2009.]

[8]ZHOU Changfa,Image processing programming with VC++[M].3rd ed.Beijing:Publishing House of Electronics Industry,2006(in Chinese).[周長發(fā),精通Visual C++圖像處理編程[M].3版.北京:電子工業(yè)出版社,2006.]

[9]Rafael C Gonzalez,Richard E Woods.Digital image processing[M].3rd ed.Science Press,2011.

[10]SUN Han,RENMingwu,YANGJingyu,A fast and practical algorithm for line detection [J].Application Research of Computers,2006,23(2):256-260(in Chinese).[孫涵,任明武,楊靜宇.一種快速實(shí)用的直線檢測(cè)算法[J].計(jì)算機(jī)應(yīng)用研究,2006,23(2):256-260.]

[11]WANG Songbo.A method of traffic lane detection and tracking[J].Computer Engineering and Applications,2011,47(3):244-248(in Chinese).[王松波.一種車道線檢測(cè)與跟蹤方法[J].計(jì)算機(jī)工程與應(yīng)用,2011,47(3):244-248.]

[12]LU Guangquan,XU Hongguo,LI Yibing.Line segment detection based on chain code detection [J].Computer Engineering,2006,32(14):1-3(in Chinese).[魯光泉,許洪國,李一兵.基于鏈碼檢瀏的直線段檢瀏方法 [J].計(jì)算機(jī)工程,2006,32(14):1-3.]

猜你喜歡
導(dǎo)軌圖像處理線段
棒與導(dǎo)軌問題分類例析
人工智能輔助冠狀動(dòng)脈CTA圖像處理和診斷的研究進(jìn)展
畫出線段圖來比較
電梯導(dǎo)軌支架檢驗(yàn)探討
基于ARM嵌入式的關(guān)于圖像處理的交通信號(hào)燈識(shí)別
怎樣畫線段圖
我們一起數(shù)線段
數(shù)線段
基于圖像處理的機(jī)器人精確抓取的設(shè)計(jì)與實(shí)現(xiàn)
機(jī)器學(xué)習(xí)在圖像處理中的應(yīng)用
襄樊市| 榆林市| 保康县| 礼泉县| 台江县| 成武县| 新安县| 土默特左旗| 瑞昌市| 边坝县| 砀山县| 贡山| 长沙县| 班玛县| 三门县| 广汉市| 兴和县| 永康市| 义乌市| 资溪县| 临清市| 芦溪县| 宝丰县| 屏南县| 龙江县| 北安市| 彩票| 聂拉木县| 百色市| 郎溪县| 邢台市| 富宁县| 庐江县| 托里县| 称多县| 慈溪市| 江孜县| 准格尔旗| 彭山县| 汽车| 灵寿县|