孫建延,時(shí) 偉,李建峰 SUN Jian-yan, SHI Wei, LI Jian-feng
(1. 中州大學(xué) 工程技術(shù)學(xué)院,鄭州 450044;2. 防空兵學(xué)院,鄭州 450052)
車位檢測(cè)技術(shù)是智能停車場(chǎng)管理系統(tǒng)中的關(guān)鍵技術(shù),與現(xiàn)有的地感線圈、紅外線和超聲波等檢測(cè)技術(shù)相比[1],視頻檢測(cè)技術(shù)具有檢測(cè)器安裝方便、易于維護(hù),無(wú)需破壞路面,對(duì)周圍環(huán)境沒(méi)有影響等優(yōu)勢(shì);圖像的信息量豐富,視頻監(jiān)測(cè)直觀可靠,現(xiàn)已被逐漸使用。
由于汽車種類、形狀、大小、顏色各異,直接對(duì)獲取的圖片進(jìn)行分析判斷車位是否空閑相當(dāng)復(fù)雜,對(duì)系統(tǒng)內(nèi)存和運(yùn)算能力要求高。若在停車位畫一個(gè)特征圓,在斜前方對(duì)該目標(biāo)圓進(jìn)行視頻檢測(cè)。當(dāng)圖片中沒(méi)有目標(biāo)圓,表明該車位被占用,否則車位空閑。由于拍攝角度問(wèn)題,特征圓被扭曲成橢圓,最終對(duì)空閑車位的檢測(cè)轉(zhuǎn)化為對(duì)圖片中是否含有橢圓的檢測(cè)。該方法簡(jiǎn)單,計(jì)算所需要的資源少,檢測(cè)速度快。
本文采用USB攝像頭對(duì)停車位進(jìn)行視頻采集,通過(guò)圖像處理技術(shù), 對(duì)橢圓特征信息進(jìn)行提取,確定停車位的使用情況,如圖1所示。
與攝像頭被安放在待檢測(cè)車位的正上方(如攝像頭1)相比,把攝像頭安放在車位的斜前方通過(guò)增加偏移角度和拍攝距離增大可視范圍,獲取更多的檢測(cè)車位(如攝像頭2)。
圖1 停車位拍攝示意圖
為了加快橢圓檢測(cè)速度,提高檢測(cè)的準(zhǔn)確性,若采用傳統(tǒng)Hough變換和隨機(jī)Hough變換等方法[2]對(duì)圖片中的橢圓進(jìn)行檢測(cè),需要較長(zhǎng)的運(yùn)算時(shí)間,并且需要消耗較多的內(nèi)存。目前采用較多的方法是隨機(jī)橢圓檢測(cè)法,其結(jié)合了最小二乘法和隨機(jī)檢測(cè)的方法可以快速檢測(cè)多個(gè)橢圓[3,4],該方法需要隨機(jī)采樣6個(gè)點(diǎn)對(duì)橢圓進(jìn)行檢測(cè),6個(gè)點(diǎn)同時(shí)落在同一個(gè)橢圓上的概率小,導(dǎo)致較多的無(wú)效采樣,增加了算法的時(shí)間復(fù)雜度。因此從處理效率和節(jié)省能源兩方面考慮限制了算法在嵌入式停車場(chǎng)車位實(shí)時(shí)管理的需求。
本系統(tǒng)在隨機(jī)最小二乘法擬合的基礎(chǔ)上,基于橢圓的中心對(duì)稱特性和旋轉(zhuǎn)不變性進(jìn)行橢圓邊緣點(diǎn)檢測(cè)[4],提高了采樣點(diǎn)落在同一個(gè)橢圓上的概率, 所需要的計(jì)算量小,變量少,可以使用內(nèi)存較小的ARM系統(tǒng)。
如圖2所示,橢圓是一種存在兩條正交對(duì)稱軸的圖形, 通過(guò)圖形中心的直線與邊界的兩個(gè)交點(diǎn)P1和P2互為對(duì)偶點(diǎn)[4,5],其外法線方向相反,切線斜率相等。當(dāng)圖形或圖像發(fā)生平移、縮放或旋轉(zhuǎn)后,對(duì)偶點(diǎn)仍然互為對(duì)偶點(diǎn),即關(guān)于橢圓中心的對(duì)稱特性和旋轉(zhuǎn)不變性。
對(duì)獲取的圖片進(jìn)行預(yù)處理。首先將圖片轉(zhuǎn)換成灰度圖像,然后對(duì)圖片進(jìn)行高斯濾波去除噪聲,并且進(jìn)行二值化處理,使用Canny算子提取邊緣[6],獲取圖像的邊緣點(diǎn)集E。
在邊緣點(diǎn)中,基于橢圓的旋轉(zhuǎn)不變性,利用對(duì)偶點(diǎn)切線斜率相等的性質(zhì)選取對(duì)偶點(diǎn),依次選取3對(duì)對(duì)偶點(diǎn),共6個(gè)點(diǎn),使用最小二乘法擬合算法擬合一個(gè)橢圓。為了得到較好的擬合效果,采樣對(duì)偶點(diǎn)要考慮均勻分布,選點(diǎn)時(shí)使用距離閾值限制。
另外,由于噪聲干擾,擬合得到的橢圓未必是真實(shí)橢圓。采用8鄰域膨脹法統(tǒng)計(jì)落在此橢圓上的邊緣點(diǎn)數(shù)目N和橢圓的周長(zhǎng)L驗(yàn)證此橢圓是否為真實(shí)橢圓。根據(jù)先驗(yàn)知識(shí),當(dāng)N/L<0.9時(shí),則此橢圓為虛假橢圓,否則為真實(shí)橢圓并從邊緣點(diǎn)集中剔除落在橢圓上的邊緣點(diǎn)。判斷剩余邊緣點(diǎn)的數(shù)目,如果剩余點(diǎn)數(shù)過(guò)少,則認(rèn)為剩余點(diǎn)數(shù)不足以構(gòu)成一個(gè)橢圓退出檢測(cè),否則繼續(xù)進(jìn)行檢測(cè)。
橢圓檢測(cè)算法流程如圖3所示。
圖2 橢圓上對(duì)偶點(diǎn)示意圖
系統(tǒng)采用FriendlyARM公司的Tiny6410開(kāi)發(fā)板為硬件系統(tǒng),以Linux操作系統(tǒng)為軟件系統(tǒng)構(gòu)建停車位視頻實(shí)時(shí)檢測(cè)平臺(tái)。
系統(tǒng)硬件平臺(tái)采用S3C6410A處理器,主頻為533MHz, 板 載256M DDR RAM和256M SLC Nand Flash,具有高性能、低功耗、體積小、接口豐富等優(yōu)點(diǎn)。帶有以太網(wǎng)接口和USB主從接口,LCD采用4.3寸觸摸屏,用于現(xiàn)場(chǎng)監(jiān)控效果的調(diào)試。采用USB攝像頭,分辨率為130萬(wàn)像素,通過(guò)V4L2的驅(qū)動(dòng)程序控制攝像頭進(jìn)行拍攝。詳細(xì)內(nèi)容參看FriendlyARM公司的Tiny6410 硬件說(shuō)明手冊(cè)。
系統(tǒng)軟件基于Intel的開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)OpenCV,以及用于Linux的開(kāi)源視頻設(shè)備內(nèi)核驅(qū)動(dòng)V4L2設(shè)計(jì)。
平臺(tái)采用NFS網(wǎng)絡(luò)文件系統(tǒng)作為根文件系統(tǒng)進(jìn)行應(yīng)用程序開(kāi)發(fā),使用NFS實(shí)現(xiàn)ARM板和PC上位機(jī)之間的數(shù)據(jù)交換。其關(guān)鍵是設(shè)置好PC NFS服務(wù)和開(kāi)發(fā)板的啟動(dòng)參數(shù),參看Tiny6410 Linux開(kāi)發(fā)指南。
程序共分為三個(gè)部分:系統(tǒng)控制程序、停車位拍照程序和圖片檢測(cè)程序。
OpenCV是一個(gè)跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),它由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法[8]。
在ARM中編譯OpecnCV,建立運(yùn)行環(huán)境。通過(guò)NFS調(diào)用ARM,在ARM下掛載本地文件夾,將OpenCV下載到該文件夾中,切換到OpenCV的文件夾下依次運(yùn)行configure、make、make install指令后,將編譯生成的lib文件拷貝到ARM的lib根目錄下,以后使用了OpenCV的程序經(jīng)過(guò)編譯之后就能夠在ARM下順利運(yùn)行。
V4L2(Video4linux2)是Linux下用于獲取視頻和音頻數(shù)據(jù)的API接口,通過(guò)使用視頻采集設(shè)備和驅(qū)動(dòng)程序,可以實(shí)現(xiàn)視頻采集、實(shí)時(shí)播放等功能[9]。在Linux中視頻設(shè)備作為設(shè)備文件,可以像訪問(wèn)普通文件一樣對(duì)其進(jìn)行讀寫。通過(guò)調(diào)用V4L2,使得應(yīng)用程序有發(fā)現(xiàn)設(shè)備和操作設(shè)備的能力。Linux為攝像頭設(shè)備提供了一系列編程接口及數(shù)據(jù)接口函數(shù),通過(guò)調(diào)用這些函數(shù)可以進(jìn)行打開(kāi),捕獲,讀取,關(guān)閉設(shè)備等操作,以及設(shè)置視頻和圖像參數(shù)。
系統(tǒng)控制程序流程如圖4所示,負(fù)責(zé)系統(tǒng)的邏輯,包括系統(tǒng)的初始化,維持系統(tǒng)的運(yùn)行,系統(tǒng)的關(guān)閉,以及為拍照程序和橢圓檢測(cè)程序服務(wù)。
圖4 系統(tǒng)控制程序流程
對(duì)系統(tǒng)的狀態(tài)進(jìn)行初始化后,經(jīng)橢圓檢測(cè)后對(duì)停車位設(shè)置一個(gè)標(biāo)志位,每次當(dāng)車位變化的時(shí)候,改變?cè)摌?biāo)志位,即每次對(duì)車位狀態(tài)進(jìn)行判斷的時(shí)候,首先將結(jié)果與系統(tǒng)中保存的狀態(tài)進(jìn)行比較。
當(dāng)檢測(cè)結(jié)果發(fā)現(xiàn)狀態(tài)變化時(shí),不能簡(jiǎn)單的更改車位的狀態(tài),需要進(jìn)行多次檢測(cè)(5次),并且不再以10秒為單位進(jìn)行判斷,而是每次檢測(cè)完就直接拍攝下一張圖片判斷,通過(guò)統(tǒng)計(jì)對(duì)檢測(cè)結(jié)果判斷車位是否有變化,以防誤判。
使用V4L2內(nèi)核驅(qū)動(dòng)程序,操作攝像頭對(duì)目標(biāo)停車位進(jìn)行拍攝,如圖5所示[9]。
圖5 停車位視頻采集圖片流程
首先,通過(guò)調(diào)用open()函數(shù)打開(kāi)視頻設(shè)備文件,成功后返回的文件描述符代表捕獲的硬件設(shè)備;然后調(diào)用ioctl()函數(shù)命令參數(shù)(VIDIOCGCAP、VIDIOCGPICT、VIDIOCGMBUF、VIDIOCSPICT、VIDIOC_QUERYSTD)獲取設(shè)備信息、采集的圖像屬性、圖像緩沖區(qū)幀信息、檢測(cè)當(dāng)前設(shè)備支持的標(biāo)準(zhǔn)和設(shè)置屬性和采集方式;利用v4l2_requestbuffers類型結(jié)構(gòu)體變量為視頻設(shè)備分配內(nèi)存,即分配的緩存數(shù)量;調(diào)兩個(gè)ioctl()函數(shù)命令(VIDIOC_DQBUF、VIDIOC_QBUF)來(lái)獲取數(shù)據(jù);當(dāng)整個(gè)系統(tǒng)的工作完成之后,調(diào)用close()函數(shù)來(lái)關(guān)閉視頻設(shè)備。
基于橢圓對(duì)稱性和最小二乘法擬合算法對(duì)拍攝圖片進(jìn)行橢圓檢測(cè),通過(guò)對(duì)圖片中是否含有橢圓來(lái)判斷車位是否被占用。算法流程如圖3所示。
橢圓檢測(cè)系統(tǒng)又分為以下四個(gè)模塊:預(yù)處理模塊、采樣模塊、最小二乘法擬合模塊和橢圓的驗(yàn)證模塊。輸入圖片依次經(jīng)過(guò)四個(gè)模塊處理之后,輸出圖片中是否存在橢圓。各模塊通過(guò)指向圖片的IplImage*類型指針變量實(shí)現(xiàn)數(shù)據(jù)傳遞,進(jìn)而實(shí)現(xiàn)對(duì)圖片的處理,而且模塊化后的程序便于修改和升級(jí)處理。
試驗(yàn)時(shí),首先利用筆記本視頻應(yīng)用程序調(diào)整好攝像頭的角度位置,使拍攝的效果清晰良好,以防橢圓畸變太大,不能正確檢測(cè)。然后把攝像頭連接到ARM系統(tǒng),對(duì)地面停車位進(jìn)行多次檢測(cè),觀察輸出是否正確。如果多次檢測(cè)結(jié)果正確,則認(rèn)為攝像頭位置固定好。
由于橢圓檢測(cè)最多需要2秒,因此以10秒為間隔進(jìn)行拍攝,此頻率可以滿足停車場(chǎng)檢測(cè)的需要。每張圖片大小為8KB左右,由于系統(tǒng)分配的存儲(chǔ)空間有限,不能對(duì)每次拍攝的結(jié)果都進(jìn)行存儲(chǔ),并且停車場(chǎng)車位的狀態(tài)變化頻率較低,因此可以僅在每次檢測(cè)到車位變化的時(shí)候?qū)Ξ?dāng)時(shí)拍攝的圖片進(jìn)行存貯。
系統(tǒng)對(duì)隨機(jī)產(chǎn)生的多橢圓圖進(jìn)行測(cè)試驗(yàn)證,共200張圖片,每張圖片上隨機(jī)產(chǎn)生3到4個(gè)橢圓。其中具有3個(gè)橢圓的圖片有89張,4個(gè)橢圓的圖片有111張。
表1 統(tǒng)計(jì)橢圓檢測(cè)的正確率
由于隨機(jī)生成的橢圓,有的相距太近,以及接近重合現(xiàn)象,容易出現(xiàn)的錯(cuò)誤大部分上是檢測(cè)到的橢圓個(gè)數(shù)少于真實(shí)的橢圓個(gè)數(shù)。
為了檢測(cè)高斯噪聲對(duì)檢測(cè)效果的影響,為橢圓圖片添加不同方差的噪聲。對(duì)6張圖片分別添加樣本方差為[0.1, 0.3, …1.1]的零均值高斯噪聲進(jìn)行了實(shí)驗(yàn)。如圖6所示。
圖6 添加方差為0.1和1.1的高斯噪聲的灰度圖
當(dāng)噪聲方差為0.1時(shí),圖片灰度化之后相對(duì)于背景噪聲,橢圓的邊緣仍然很清晰,噪聲點(diǎn)的干擾小,能順利的提取出邊緣。當(dāng)噪聲方差1.1時(shí),圖片灰度化之后相對(duì)于背景目標(biāo)橢圓已經(jīng)變得很模糊,很難從圖片中提取邊緣,造成較大的檢測(cè)誤差。因此方差越大,目標(biāo)橢圓越不清晰,對(duì)檢測(cè)精度影響越大。
在對(duì)停車場(chǎng)進(jìn)行車位檢測(cè)的過(guò)程中,由于踩壓磨損,光線等原因,待檢測(cè)橢圓會(huì)逐漸變得模糊,不同的光照條件對(duì)目標(biāo)車位的檢測(cè)也有很大的影響,因此對(duì)不同的自然環(huán)境下拍攝的圖片進(jìn)行了統(tǒng)計(jì)分析。錯(cuò)誤出現(xiàn)較多的情況是空閑車位被檢測(cè)成占用,而車位被占用時(shí),檢測(cè)結(jié)果的正確率是相當(dāng)高的。在觀測(cè)角比較好的情況下,檢測(cè)誤報(bào)率在2%以下。
在橢圓褪色或被遮擋的情況下,檢測(cè)效果取決于剩余的橢圓部分能在多大程度上保持橢圓的形狀特性。如果目標(biāo)橢圓仍能保持橢圓的基本形狀,那么目標(biāo)橢圓就能被檢測(cè)出來(lái)。否則,系統(tǒng)很難通過(guò)車位上是否有橢圓來(lái)判斷車位被占用,需要借助其它圖像特征算法進(jìn)行識(shí)別。
本文采用USB普通攝像頭實(shí)現(xiàn)了停車場(chǎng)車位檢測(cè)系統(tǒng)設(shè)計(jì),包括系統(tǒng)結(jié)構(gòu)和基本算法流程,
以及具體試驗(yàn)過(guò)程。使用橢圓對(duì)稱性和最小二乘法擬合隨機(jī)橢圓檢測(cè)算法提高檢測(cè)效率,降低了系統(tǒng)復(fù)雜度。通過(guò)對(duì)多種自然環(huán)境下檢測(cè)結(jié)果顯示該系統(tǒng)完全能應(yīng)用到實(shí)際車位檢測(cè)系統(tǒng)中。
[1] 蔣大林, 鄧紅麗. 基于視頻圖像的多特征車位檢測(cè)算法[J]. 北京工業(yè)大學(xué)學(xué)報(bào), 2008, 34(2): 137-140.
[2] 邢誠(chéng), 沈琦, 譚小波, 等. 一種基于隨機(jī) Hough變換的橢圓檢測(cè)方法[J]. 計(jì)算機(jī)與數(shù)字工程, 2008, 36(1): 23-25.
[3] 陳海峰, 雷華, 孔燕波, 等. 基于最小二乘法的改進(jìn)的隨機(jī)橢圓檢測(cè)算法[J]. 浙江大學(xué)學(xué)報(bào):工學(xué)版, 2008, 42(8):1360-1364.
[4] 呂洪赫, 姚振杰, 易衛(wèi)東. 基于對(duì)稱性的最小二乘擬合隨機(jī)橢圓檢測(cè)算法[J]. 電子測(cè)量技術(shù), 2011, 34(5): 37-41.
[5] 周小明, 劉明, 徐飛. 一種基于長(zhǎng)軸和對(duì)偶性的橢圓檢測(cè)新算法[J]. 光學(xué)技術(shù), 2007, 33(5): 763-765.
[6] 李滾, 嚴(yán)發(fā)寶, 蘇艷蕊, 等. 基于Canny算子的自適應(yīng)雙閾值油罐油位紅外成像檢測(cè)[J]. 電子測(cè)量與儀器學(xué)報(bào),2009, 23(9): 44-49.
[7] 李曉光, 吉滎廷, 張立峰. 基于嵌入式LINUX和ARM9的視頻采集系統(tǒng)[J]. 電子測(cè)量技術(shù), 2009, 32(2): 102-104.
[8] 劉瑞禎, 于仕琪. OpenCV教程—基礎(chǔ)篇[M]. 北京: 北京航空航天大學(xué)出版社, 2008.
[9] 黃睿邦, 湯榮江, 李文亮. Linux下基于Video4Linux的USB攝像頭視頻采集實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī), 2009, (309): 182-185.