|
引言 本文采用ARM+DSP雙核架構(gòu)的OMAP3530系列的處理器,道路圖像處理部分由支持浮點(diǎn)運(yùn)算的DSP核來完成,圖像采集工作和系統(tǒng)的控制工作由ARM核來完成,這樣的作業(yè)分配提高了系統(tǒng)的實(shí)時(shí)性、集成性和可靠性。 車道線識(shí)別算法研究 本文提出的車道線識(shí)別算法的流程如下圖1所示,首先通過OV7670攝像頭捕獲道路圖像,然后按照流程圖中的步驟處理圖像,最后得到清晰的車道標(biāo)志線,為以后智能車輛路徑規(guī)劃和避障提供支持。 道路圖像灰度化 圖像灰度變換是對圖像像素進(jìn)行拉伸,從而擴(kuò)大圖像的灰度級(jí)范圍,進(jìn)一步擴(kuò)展圖像的對比度、增加圖像的動(dòng)態(tài)范圍、使圖像更加清晰、特征更加明顯,是圖像增強(qiáng)的有效手段。我們采集到的道路圖像是彩色圖像,顏色模型采用RGB模型。由于人眼對顏色的敏感度不同,等量的紅、藍(lán)、綠混合不能得到對應(yīng)亮度相同的灰度值,大量的實(shí)驗(yàn)數(shù)據(jù)表明,當(dāng)使用0.3份紅色、0.59份綠色、0.11份藍(lán)色混合后可以得到最合理的灰度圖像,即如公式(1)所示: 灰度值=0.3R+0.59G+0.11B(1) 根據(jù)公式(1)就可以算出當(dāng)前像素對應(yīng)的灰度值,將其作為圖像中彩色像素對應(yīng)的灰度值。 道路圖像濾波 原始圖像都或多或少的存在噪聲干擾,噪聲影響了后續(xù)圖像的分析。這就要求在分析圖像之前對圖像進(jìn)行濾波,去除噪聲和假輪廓,圖像濾波的過程就是讓圖像的低頻成分通過,阻止屬于高頻部分中的噪聲信號(hào),也就是平時(shí)所說的低通濾波。但是在圖像平滑過程中也阻止了高頻部分的圖像邊緣,使得圖像邊緣模糊化。所以應(yīng)找到能消除噪聲,同時(shí)盡量保持圖像細(xì)節(jié),邊緣輪廓的算法,又要保證智能車輛視覺導(dǎo)航系統(tǒng)對實(shí)時(shí)性的要求。中值濾波能夠在抑制高頻信號(hào)中的隨機(jī)噪聲的同時(shí)不使邊緣模糊,可以抑制隨機(jī)的點(diǎn)狀噪聲,抑制持續(xù)期小于1/2窗口的脈沖信號(hào),但不影響斜坡信號(hào)和階躍信號(hào),能夠削弱三角信號(hào)中的頂部峰值信號(hào),因而受到歡迎,它屬于非線性濾波。 中值濾波是將鄰域中的像素按灰度級(jí)排序,取其中間值為輸出像素。中值計(jì)算過程中使用到的像素?cái)?shù)和鄰域的空間范圍影響到中值濾波的效果。本文采用3×3方形中值濾波模板對圖像進(jìn)行預(yù)處理既能取得較好的濾波效果,又能節(jié)省運(yùn)算時(shí)間。 圖像邊緣增強(qiáng) 在車輛視覺導(dǎo)航系統(tǒng)中,道路邊緣信息可以提供路徑保持和路徑跟蹤的位置信息,是實(shí)現(xiàn)車輛自主導(dǎo)航功能不可或缺的。邊緣增強(qiáng)的目的在于突出道路的邊緣信息,以利于道路車道線的識(shí)別,有助于克服道路光照不均的影響。我們對濾波后的圖像從水平和垂直兩個(gè)方向進(jìn)行邊緣增強(qiáng),可以得到非常好的效果。 圖像邊緣檢測 在圖像的多目標(biāo)檢測和識(shí)別技術(shù)中,邊緣檢測作為一種預(yù)處理算法在機(jī)器視覺技術(shù)中占有重要地位。邊緣檢測的算法很多,參考各種算法的優(yōu)缺點(diǎn),并結(jié)合道路檢測的復(fù)雜性,我們這里選用Sobel算子。 Sobel邊緣算子是一種一階差分算子。它可以有效地消除道路圖像中的大部分無用信息。它可以有效的抑制圖像中的噪聲,它的計(jì)算量比較小,容易實(shí)現(xiàn),對于實(shí)時(shí)性要求比較高的系統(tǒng),該算法有很大的優(yōu)勢。 車道標(biāo)志線提取 本文重點(diǎn)討論道路區(qū)域車道線的提取。日常生活中最常見的路面邊界是直線,車輛主要也是在直線路面上行駛的。平時(shí)見到的直線路面邊界是成一定角度的兩條直線,根據(jù)三維空間點(diǎn)投影到二維平面的特點(diǎn),直線路面邊界在二維平面上形成兩條相交的直線,直線路面邊緣提取算法如下: (1)根據(jù)二維直線路面的實(shí)際情況,建立X-Y坐標(biāo)系,并給出恰當(dāng)?shù)穆访孢吘壗馕龇匠獭?br /> (2)根據(jù)圖像的特點(diǎn),取一組合理的ρ、θ范圍和步長,設(shè)置累加器為零。將圖像的解析方程轉(zhuǎn)化成極坐標(biāo)下的形式,即ρ=xcosθ+ysinθ,如圖2所示,ρ為原點(diǎn)到直線垂直距離,θ為X軸與垂線之間的夾角。 (3)對梯度圖上超過門限值的每個(gè)點(diǎn)作Hough變換,并對相應(yīng)的累加器加1. (4)找出累加器A(ρ,θ)上的極大值ρM、θM.通過這兩個(gè)值可以找出圖像中極有可能的邊界。 (5)去除干擾。根據(jù)三維物體在攝像機(jī)上成像的特點(diǎn),三維空間中平行的路面邊緣在二維平面形成兩條成一定角度的相交直線,如圖3中虛線所示。但由于路面噪聲的影響,在累加器A(ρ,θ)上的極大值ρM、θM周圍存在多個(gè)較大值,它們在X-Y軸上對應(yīng)的直線如圖3中兩條實(shí)線所示,顯然這不是要求的邊緣,所以將累加器ρM、θM周圍點(diǎn)置0. (6)找出累加器A(ρ,θ)上次大值ρM、θM.A(ρ,θ)上的次大值對應(yīng)圖像中路面的另一條邊界。 (7)得到相應(yīng)的X-Y上對應(yīng)直線方程。進(jìn)一步可以得到:b=-ρ/sinθ,k=ctgθ通過這兩個(gè)方程式得到ρ、θ值之后,可以求得相應(yīng)的k、b值。 由于圖像的連續(xù)性,圖像序列中車道線的位置不會(huì)發(fā)生突變,我們在識(shí)別一幀圖像的車道線時(shí)是以上一幀的識(shí)別結(jié)果為依據(jù),動(dòng)態(tài)地規(guī)劃搜索區(qū)域,動(dòng)態(tài)地規(guī)劃Hough變化的ρ和θ值,這樣就減少了計(jì)算量,提高了算法的實(shí)時(shí)性,也可提高可靠性。 系統(tǒng)硬件設(shè)計(jì) 本文選取ICETEK-OMAP3530-Mini開發(fā)板為實(shí)驗(yàn)平臺(tái),該開發(fā)板是由北京瑞泰創(chuàng)新科技有限責(zé)任公司與美國德州儀器公司合作推出,是一個(gè)開放的OMAP3530的硬件平臺(tái),它是以TI最新的、高性能的ARM CortexA8處理器OMAP3530為核心,以DSP64x+內(nèi)核作為強(qiáng)勁的輔助圖像處理,優(yōu)化硬件2D/3D加速器,形成一個(gè)精簡完備的計(jì)算機(jī)系統(tǒng)。 選用CMOS攝像頭OV7670.OV7670是Omnivision公司生產(chǎn)的一款30萬像素的彩色圖像傳感器芯片,體積小、工作電壓低,提供單片VGA攝像頭和影像處理器的所有功能。其特點(diǎn)有:靈敏度高,適合低亮度下使用;標(biāo)準(zhǔn)串行攝像頭控制總線(SCCB),兼容IIC接口;自動(dòng)曝光控制;自動(dòng)增益控制;自動(dòng)白平衡;自動(dòng)消除燈光條紋;自動(dòng)黑電平校準(zhǔn);圖像格式可以是原始RGB、RGB(4:2:2)、RGB565/555/444、YUV(4:2:2)、YCbCr(4:2:2)。OV7670與ICETEK-OMAP3530-Mini板通過USB接口連接在一起。 系統(tǒng)軟件設(shè)計(jì) OMAP3530是一款雙核微處理器,由ARM核和DSP核兩部分組成,二者之間軟件的編程和運(yùn)行都是相互獨(dú)立的,通過DSP/BIOS Link完成雙核之間的通信。ARM端采用嵌入式Linux操作系統(tǒng),動(dòng)態(tài)創(chuàng)建、控制和刪除DSP節(jié)點(diǎn),實(shí)現(xiàn)數(shù)據(jù)的高效傳輸。DSP端采用DSP/BIOS實(shí)時(shí)操作系統(tǒng),支持eXPressDSP實(shí)時(shí)軟件技術(shù),由DSP/BIOS實(shí)時(shí)內(nèi)核、可重構(gòu)的DSP算法和第三方軟件模塊組成。 由系統(tǒng)結(jié)構(gòu)可見,軟件設(shè)計(jì)主要包括:ARM端引導(dǎo)程序和Linux系統(tǒng)的移植;捕獲道路圖像程序。 ARM端引導(dǎo)程序和Linux系統(tǒng)的移植 為便于項(xiàng)目的開發(fā)和調(diào)試,ICETEK-OMAP3530-Mini板采用SD卡啟動(dòng),本系統(tǒng)中使用的X-Loader的版本是x-loader1.4.2,U-boot的版本是Uboot-2009.01,Linux內(nèi)核的版本是Linux-2.6.28,Busybox的版本是busybox-1.12.2,該過程的主要步驟如下: (1)在開發(fā)主機(jī)Linux PC里安裝交叉編譯工具; (2)交叉編譯X-Loader,生成鏡像文件x-load.bin.ift,然后轉(zhuǎn)化為SD卡啟動(dòng)用程序MLO; (3)交叉編譯U-boot,生成u-boot.bin和mkimage工具; (4)驅(qū)動(dòng)配置并交叉編譯內(nèi)核,生成內(nèi)核鏡像文件uImage; (5)利用Busybox制作文件系統(tǒng); (6)將上述生成的二進(jìn)制文件復(fù)制到SD. 捕獲道路圖像 Linux系統(tǒng)對視頻設(shè)備的操作提供了兩套API,分別是Video 4 Linux(簡稱V4L)和Video 4 Linux 2(簡稱V4L2)。早期開發(fā)的V4L存在很多缺陷,Bill Dirks等人對其進(jìn)行了重新設(shè)計(jì),更名為V4L2,相比于V4L有很好的擴(kuò)展性和靈活性,并且支持更多的硬件設(shè)備。這兩套API不兼容,本文采用V4L2進(jìn)行USB攝像頭視頻編程。 利用V4L2提供的接口,我們可以編寫出具有視頻采集功能的測試代碼。下面就主要的環(huán)節(jié)做一些說明。 (1)打開視頻設(shè)備 cameraFd=open(“/dev/video0”, O_RDWR, O); (2)查詢設(shè)備屬性 通過調(diào)用ioctl函數(shù)和接口命令VIDIOC_QUERYCAP,查詢攝像頭的信息,見程序段1. ——————————————————————— if (ioctl(fd, VIDIOC_QUERYCAP, == -1) { … } else {… if ((cap.capabilities V4L2_CAP_VIDEO_CAPTURE) == V4L2_CAP_VIDEO_ CAPTURE) { …} if ((cap.capabilities V4L2_CAP_STREAMING) == V4L2_CAP_STREAMING) { …} } while(ioctl(fd,VIDIOC_ENUM_FMT, {…} ——————————————————————— 程序段1查詢攝像頭屬性 (3)設(shè)置像素格式 一般的USB攝像頭都會(huì)支持YUV,可能還會(huì)支持其他更多的格式。通過上一步對攝像頭所支持像素格式的查詢,下面利用ioctl函數(shù)對格式進(jìn)行設(shè)置,見程序段2.——————————————————————— fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; fmt.fmt.pix.height = IMAGEHEIGHT; fmt.fmt.pix.width = IMAGEWIDTH; fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; ioctl(fd, VIDIOC_S_FMT, ——————————————————————— 程序段2設(shè)置像素格式 (4)申請緩存區(qū),并獲取每個(gè)緩存的信息 V4l2捕獲的數(shù)據(jù),是存放在內(nèi)核空間里的,用戶不能直接訪問該段內(nèi)存,必須通過某些方法來轉(zhuǎn)換地址。這里我們采用mmap映射方式,相關(guān)代碼見程序段3. 圖1車道線識(shí)別算法流程圖 圖2路面邊緣示意圖 圖3干擾直線 ——————————————————————— req.count=4; req.type=V4L2_BUF_TYPE_VIDEO_CAPTURE; req.memory=V4L2_MEMORY_MMAP; ioctl(fd,VIDIOC_REQBUFS, ——————————————————————— 程序段3映射內(nèi)核空間到用戶空間 (5)開始采集視頻 type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ioctl (fd, VIDIOC_STREAMON, (6)取出緩沖區(qū)中已經(jīng)采樣的緩存 ioctl(fd,VIDIOC_DQBUF, (7)停止采集和關(guān)閉設(shè)備 int close_v4l2(void) { ioctl(fd, VIDIOC_STREAMOFF, …} 實(shí)驗(yàn)測試 本文設(shè)計(jì)的視頻圖像采集模塊及測試演示系統(tǒng)實(shí)物圖如圖4所示。 在學(xué)校外的新蘭路上采集到了回旋曲線、拋物線、直線三種結(jié)構(gòu)化道路圖像,對采集到的三種道路圖像應(yīng)用車道線識(shí)別算法處理,提取出車道標(biāo)志線,效果圖如5所示。從效果圖中可以看出該算法基本上對由光照的強(qiáng)弱、對陰影區(qū)域和對道路的質(zhì)量等造成的問題影響不大,表現(xiàn)出很好的識(shí)別效果。 圖4視頻圖像采集演示系統(tǒng) 圖5三種結(jié)構(gòu)化道路車道線提取效果圖 (一)識(shí)別效果分析此分析的實(shí)驗(yàn)是在MATLAB上進(jìn)行的。測試評(píng)估是通過本文的識(shí)別算法的效果與人工掃描獲得的圖像真實(shí)值進(jìn)行比較得出算法的各項(xiàng)指標(biāo)。判斷識(shí)別正確與否的原則是: (1)當(dāng)識(shí)別的結(jié)果與實(shí)際值誤差在0.5m之內(nèi),并且角度變化在8°之內(nèi)的目標(biāo)認(rèn)為是正確識(shí)別,否則認(rèn)為是誤識(shí)別。 (2)真實(shí)值中存在而系統(tǒng)沒有識(shí)別出來的認(rèn)為是漏檢,誤檢和漏檢都認(rèn)為是錯(cuò)誤識(shí)別。 (3)真實(shí)值中沒有,但是系統(tǒng)識(shí)別出來的車道線算是誤識(shí)別。 根據(jù)本文提出的車道線識(shí)別算法,分別選取了上述三種結(jié)構(gòu)化道路場景的500幀圖像進(jìn)行測試,識(shí)別率對照表如下所示。 (二)響應(yīng)速度分析 運(yùn)行MATLAB軟件需要耗費(fèi)很多的系統(tǒng)資源,使得算法在其下的運(yùn)行速度比較慢,所以不適合用MATLAB進(jìn)行算法的響應(yīng)速度測試。本文提出的算法先用C語言實(shí)現(xiàn),然后在Linux環(huán)境下使用gettimeofday()函數(shù)來計(jì)算運(yùn)行時(shí)間。本文算法在Ubuntu Linux平臺(tái)上的處理時(shí)間平均約為27.8ms. 本文提出的車道線識(shí)別算法在識(shí)別能力和響應(yīng)速度上都比以往的算法有所提高,能夠滿足實(shí)際應(yīng)用的需要,但性能還需要進(jìn)一步的優(yōu)化。 結(jié)束語 基于達(dá)芬奇技術(shù)的OMAP3530實(shí)現(xiàn)了車道線識(shí)別檢測的功能。ARM核控制OV7670攝像頭捕獲到道路圖像,然后經(jīng)由DSP/BIOS Link傳輸?shù)紻SP核,由DSP核完成車道線的識(shí)別檢測,最后提取到清晰的車道標(biāo)志線。試驗(yàn)結(jié)果表明,本算法可以保證車道線識(shí)別的準(zhǔn)確性、實(shí)時(shí)性和魯棒性,能夠滿足實(shí)際需要。 表1兩種算法識(shí)別率對照表 |