徐 洋,廖欽漁,李 銳,程安宇
(重慶郵電大學(xué)汽車(chē)電子與嵌入式系統(tǒng)工程研究中心,重慶 400065)
汽車(chē)儀表關(guān)系著駕駛狀態(tài)的正確指示,對(duì)保障行駛的安全性至關(guān)重要。因此,儀表出廠前需要對(duì)其各項(xiàng)功能進(jìn)行嚴(yán)格的檢測(cè)及校正。目前儀表的檢測(cè),國(guó)內(nèi)絕大多數(shù)仍采用人工的方法,國(guó)外研究發(fā)展相對(duì)起步較早,普遍采用電子設(shè)計(jì)自動(dòng)化、計(jì)算機(jī)輔助測(cè)試等新技術(shù),已有不少先進(jìn)的檢測(cè)儀器。機(jī)器視覺(jué)技術(shù)旨在通過(guò)計(jì)算機(jī)模擬人眼的視覺(jué)功能,獲取客觀三維世界的信息,并對(duì)其進(jìn)行測(cè)量、跟蹤、處理和識(shí)別[1]。將視覺(jué)技術(shù)應(yīng)用在汽車(chē)儀表的檢測(cè)中,不僅可以減少傳統(tǒng)人眼檢測(cè)因視野距離或疲勞疏忽等因素導(dǎo)致的缺陷和不足,而且可以大大地加快檢測(cè)速率,節(jié)省時(shí)間成本,真正實(shí)現(xiàn)系統(tǒng)化、規(guī)范化和自動(dòng)化的檢測(cè)。
圖像處理技術(shù)開(kāi)發(fā)的工具眾多,對(duì)儀表圖像的研究一般多采用LabView、MATLAB或者單純的VC++等工具[2-3]。使用這些方法雖然可以進(jìn)行相關(guān)圖像處理的研究,但是它們或者提供的是非語(yǔ)言性編程,只能做仿真,或者就是編程工作量巨大,不能實(shí)現(xiàn)簡(jiǎn)單、便捷以及即時(shí)性的綜合需求。OpenCV(Open Source Computer Vision Library)是基于Visual Studio集成開(kāi)發(fā)環(huán)境的開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù),為圖像處理技術(shù)的研究提供了方便快捷且完全免費(fèi)的平臺(tái)[4],采用其進(jìn)行圖像處理識(shí)別的研究可以提高執(zhí)行速率,減少代碼數(shù)量,符合即時(shí)、便捷的需要。
系統(tǒng)的總體設(shè)計(jì)結(jié)構(gòu)框圖如圖1所示,系統(tǒng)主要由以下幾部分組成:視頻圖像處理的控制計(jì)算機(jī)及其處理軟件,USB接口的CMOS攝像頭獲取實(shí)時(shí)的無(wú)壓縮的視頻數(shù)據(jù),攝像頭橫縱豎三方向的移動(dòng)支架,LED燈群為圖像采集提供外部光源,促使儀表轉(zhuǎn)動(dòng)的驅(qū)動(dòng)模塊,被測(cè)儀表以及其固定支撐臺(tái)。
本設(shè)計(jì)中控制計(jì)算機(jī)采用Intel公司生產(chǎn)的Pentium處理器,處理速度為2.20 GHz,內(nèi)存2.00 Gbyte,可以滿足實(shí)時(shí)采集需求。圖像處理軟件采用基于Visual Studio 2008集成開(kāi)發(fā)環(huán)境下的OpenCV庫(kù),實(shí)現(xiàn)相關(guān)函數(shù)可對(duì)采取圖像進(jìn)行預(yù)處理和識(shí)別判定。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
圖像采集部分采用Microview公司的MVC-II-3M攝像頭,這是一款遵循USB 2.0標(biāo)準(zhǔn)的高分辨力、高清晰度、高幀率一體化的攝像頭,具有高速、帶幀存、外觸發(fā)采集和閃光燈輸出功能,最高分辨力可達(dá)到2048×1536,符合儀表檢測(cè)對(duì)高分辨力的特殊要求。
本系統(tǒng)還設(shè)計(jì)了攝像頭橫縱豎(X軸,Y軸,Z軸)3個(gè)方向的自由移動(dòng)功能。當(dāng)需要在表盤(pán)上獲取某指定部分信息時(shí)可以在X軸和Y軸移動(dòng)支架調(diào)整攝像頭位置,而當(dāng)需要拉伸縮進(jìn)攝像頭與表盤(pán)相對(duì)位置時(shí)就可在Z軸調(diào)整。這樣可以隨意調(diào)整支架,從而調(diào)整攝像頭位置以獲取想要的圖像信息。
由于檢測(cè)系統(tǒng)的封閉性,內(nèi)部只靠驅(qū)動(dòng)后的儀表自帶發(fā)光,不足以給檢測(cè)環(huán)境提供充足且均勻的光源,所以需要在系統(tǒng)內(nèi)部周邊安裝光源。選取的LED燈耗電量少、發(fā)光效率高、發(fā)熱量低,能在不影響系統(tǒng)性能的情況下提供均勻穩(wěn)定的光源。
要獲取指定刻度的儀表指針指示情況,被測(cè)儀表需要一定的驅(qū)動(dòng)信號(hào)使其指針旋轉(zhuǎn)到預(yù)期指定的位置,這里采取給儀表接入信號(hào)發(fā)生器和電位調(diào)節(jié)器的方法,可以對(duì)儀表盤(pán)上不同功能的表頭進(jìn)行驅(qū)動(dòng)控制。
最后系統(tǒng)設(shè)計(jì)了固定的支撐臺(tái),通過(guò)夾具將被測(cè)儀表扣鎖在支撐臺(tái)上,這樣才可以保證檢測(cè)時(shí)圖像采集的穩(wěn)定性。
對(duì)圖像進(jìn)行處理的前提是圖像本身能夠最大程度地反映有用信息,如果圖像本身由于非客觀因素導(dǎo)致的圖像質(zhì)量低下,那么這幅圖像可以視為不合格的研究對(duì)象,后續(xù)的處理與識(shí)別也不再有意義。因此采集最佳的儀表圖像成為本設(shè)計(jì)的關(guān)鍵之一。
MVC-II-3M攝像頭提供了SDK軟件開(kāi)發(fā)工具包,可以利用其API接口進(jìn)行二次開(kāi)發(fā)。結(jié)合MVC攝像頭開(kāi)發(fā)包編程可以采集視頻圖像,該采集過(guò)程中不但可以對(duì)視頻窗口的橫縱偏移量和窗口大小進(jìn)行設(shè)置而且可以通過(guò)調(diào)節(jié)曝光時(shí)間和紅綠藍(lán)三色增益來(lái)得到滿意的圖像色彩。對(duì)攝像頭采集的視頻信息進(jìn)行抓幀處理即可獲取想要的各幅圖像,這些圖像將存入計(jì)算機(jī)緩存中以供后面處理需要。攝像頭獲取并顯示圖像的代碼如下:
其中,pFrame是OpenCV中創(chuàng)建的一個(gè)IplImage結(jié)構(gòu)體變量,camera.QueryFrame是類camera中的的幀獲取函數(shù),cvNamedWindow和cvShowImage分別為窗口命名和圖像顯示函數(shù)。
系統(tǒng)采集到的儀表圖像是RGB格式的彩色圖像,雖然里面包含了所需要的信息,但也包含了很多對(duì)于表盤(pán)和指針檢測(cè)無(wú)用的信息。同時(shí),由于外界因素的影響圖像難免存在一定的噪聲,如果不進(jìn)行處理,就會(huì)加大工作量和影響對(duì)有用信息的獲取。本實(shí)驗(yàn)只對(duì)圖像的表盤(pán)、指針等輪廓突出信息進(jìn)行檢測(cè),對(duì)圖像的顏色亮度等不做研究,所以只須將原圖像進(jìn)行去噪、灰度化、邊緣檢測(cè)便可給后續(xù)識(shí)別環(huán)節(jié)提供充足的信息。
OpenCV可以提供5種不同的圖像平滑去噪方法,所有的操作都由cvSmooth函數(shù)實(shí)現(xiàn)。高斯濾波是最常用的去噪方法,它利用卷積核與輸入圖像的每個(gè)像素點(diǎn)進(jìn)行卷積,將最終的計(jì)算結(jié)果之和作為輸出圖像的像素值。OpenCV的高斯濾波提供的幾個(gè)標(biāo)準(zhǔn)核大小3×3,5×5,7×7具有比其他核更優(yōu)的性能。OpenCV高斯去噪代碼如下:
其中,in和out分別為高斯去噪的輸入圖像和輸出結(jié)果,CV_GAUSSIAN代表去噪類型,最后的2個(gè)參數(shù)代表對(duì)圖像進(jìn)行核大小為3×3的高斯卷積。OpenCV高斯去噪的儀表圖像對(duì)比如圖2所示,左邊為原圖Original,右邊為高斯去噪后的圖Denoising。
圖2 高斯去噪效果對(duì)比圖
當(dāng)數(shù)據(jù)類型一致時(shí),OpenCV的cvCvtColor函數(shù)可將圖像從一個(gè)顏色空間轉(zhuǎn)換到另一個(gè)空間。OpenCV可實(shí)現(xiàn)RGB色彩空間到灰度空間、HSV色彩空間、HLS色彩空間、CIE色彩空間的轉(zhuǎn)換以及反變換。圖像的灰度化即是將圖像從RGB色彩空間轉(zhuǎn)換到灰度空間,OpenCV圖像灰度化代碼如下:
其中,out和out1分別為灰度變換的輸入圖像(即去噪后的圖像)和輸出結(jié)果,CV_BGR2GRAY代表轉(zhuǎn)換代碼。OpenCV灰度化的儀表圖像對(duì)比如圖3所示,左邊為去噪后的圖Denoising,右邊為灰度化后的圖Gray。
圖3 灰度化效果對(duì)比圖
邊緣檢測(cè)最常用的是Canny算法,它與拉普拉斯算法不同之一是首先在x和y方向求一階導(dǎo)數(shù),然后組合為4個(gè)方向xx,xy,yx,yy的導(dǎo)數(shù),這些方向?qū)?shù)達(dá)到局部最大值的點(diǎn)就是組成邊緣的候選點(diǎn)。Canny算法最重要的一個(gè)特點(diǎn)是其試圖將獨(dú)立邊的候選像素拼裝成輪廓,輪廓的形成是對(duì)這些像素運(yùn)用滯后性閾值,所以需要2個(gè)閾值,即上限和下限。如果一個(gè)像素的梯度高于上限閾值則被認(rèn)為是邊緣像素,如果低于下限閾值則被拋棄,如果介于二者之間,只有當(dāng)其與高于上限閾值的像素相連時(shí)才會(huì)被接受[4]。OpenCV的Canny邊緣檢測(cè)代碼如下:
其中,out1和out2分別為邊緣檢測(cè)的輸入圖像和輸出結(jié)果,cvCanny函數(shù)要求輸入一幅灰度圖,所以前面灰度化的圖像便作為該處的輸入,而函數(shù)輸出的圖也一定是灰度的(實(shí)際是二值圖像)。后面的3個(gè)參數(shù)分別為下限閾值lowThresh、上限閾值highThresh和中孔值aperture-Size。經(jīng)實(shí)驗(yàn)驗(yàn)證,上下限比值在2∶1~3∶1之間邊緣檢測(cè)效果清晰明顯,而中孔是用于函數(shù)內(nèi)部的使用。OpenCV邊緣檢測(cè)的儀表圖像對(duì)比如圖4所示,左邊為灰度化后的圖Gray,右邊為邊緣檢測(cè)的圖Canny。
指針式儀表檢測(cè)是一個(gè)復(fù)雜精細(xì)的過(guò)程,系統(tǒng)最關(guān)鍵的部分就是指針示數(shù)的判讀。由于檢測(cè)系統(tǒng)對(duì)指針的測(cè)量是多次重復(fù)的操作,所以針對(duì)同一類型儀表可以確定該表盤(pán)的中心位置,后面的檢測(cè)可以通過(guò)表盤(pán)各點(diǎn)向該中心點(diǎn)投影的方法確定指針的位置,從而判定儀表指針指示準(zhǔn)確性是否合格。
圖4 邊緣檢測(cè)效果對(duì)比圖
初步觀察儀表盤(pán)構(gòu)造特征,可以知道表盤(pán)的中心點(diǎn)應(yīng)在指針旋轉(zhuǎn)的固定軸線位置。為了精確地確定表盤(pán)的中心,這里采用多組兩線交點(diǎn)求均值的方法來(lái)找出中心點(diǎn)O。一般的研究求中心點(diǎn)只選取零刻度和滿刻度所在直線這兩線求交點(diǎn)[5],如下方程組所示
式中:x和y是二值圖像中直線上點(diǎn)的坐標(biāo);k1,b1,k2,b2代表兩條相交直線各自的斜率和y軸截距。這樣由單一的兩條特殊直線所確定的交點(diǎn)(x,y)作為表盤(pán)中心點(diǎn)難免不精準(zhǔn)。系統(tǒng)采用的多組兩線交點(diǎn)求均值的方法可以改善上述方法的誤差性。多組兩線交點(diǎn)均值法是以表盤(pán)上包括滿刻線在內(nèi)的幾個(gè)大刻度線所在直線均與零刻線所在直線做交集,分別求得交點(diǎn)(x1,y1),(x2,y2),…,(xn,yn),然后求這些交點(diǎn)的算術(shù)平均值,即橫縱坐標(biāo)的算術(shù)平均值,公式為
這樣通過(guò)多組直線交點(diǎn)求出的均值(ˉx,ˉy)作為表盤(pán)的中心點(diǎn)更具有真實(shí)性和準(zhǔn)確性。
中心投影法是將圖像上的各特征點(diǎn)向該中心點(diǎn)做投影,相當(dāng)于在極坐標(biāo)系中對(duì)平面圖像上的點(diǎn)進(jìn)行分析處理。極坐標(biāo)系中,直線用以下方程式表示
式中:x和y代表直線上點(diǎn)的坐標(biāo),ρ和θ分別代表點(diǎn)(x,y)到原點(diǎn)的距離和點(diǎn)(x,y)所在過(guò)原點(diǎn)直線與x軸的夾角,如圖5所示。極坐標(biāo)系中每一個(gè)點(diǎn)對(duì)應(yīng)一個(gè)角度θ,每個(gè)角度θ的直線上會(huì)有不同數(shù)目的特征點(diǎn)組成一個(gè)集合A(θ),當(dāng)有一個(gè)點(diǎn)投向這個(gè)角度時(shí),集合A(θ)元素增加1。這樣通過(guò)對(duì)集合A(θ)中元素個(gè)數(shù)的比較,找出局部最大值,含有最多元素個(gè)數(shù)的集合Amax(θ)所對(duì)應(yīng)的角度θ即為指針?biāo)谥本€的角度,從而便可找出指針?biāo)谖恢茫?]。如圖6中心投影示意圖所示,每一個(gè)θ角度上都有一定的點(diǎn)投影,這里示例當(dāng)θ=45°時(shí),投影的特征點(diǎn)數(shù)目最多,那么其對(duì)應(yīng)的集合A(θ)元素個(gè)數(shù)最多。
由于表盤(pán)的均勻分布性,只有指針?biāo)谖恢玫摩冉嵌人谥本€才會(huì)出現(xiàn)投影點(diǎn)明顯多于其他角度,A(θ)元素個(gè)數(shù)遠(yuǎn)遠(yuǎn)多于其他集合。前面求出了儀表的中心點(diǎn)所以只要找到了這個(gè)角度θ,便可以通過(guò)該θ值與表盤(pán)刻度的對(duì)應(yīng)關(guān)系求出指針示數(shù)值。儀表盤(pán)刻度的所在角度需要以所確定的中心點(diǎn)O為原點(diǎn)建立極坐標(biāo)系獲取。各款儀表表盤(pán)刻度與θ角度的對(duì)應(yīng)關(guān)系不同,本實(shí)驗(yàn)所測(cè)儀表盤(pán)的轉(zhuǎn)速表刻度與θ角度的對(duì)應(yīng)關(guān)系如表1所示,這里只列舉了整十的大刻度。
表1 轉(zhuǎn)速表盤(pán)刻度與θ角度的對(duì)應(yīng)關(guān)系
為了檢測(cè)儀表指針指示的準(zhǔn)確性,如果每一個(gè)刻度都檢查會(huì)浪費(fèi)很多的時(shí)間,一般方法是選取表盤(pán)上幾個(gè)特殊刻度(如零刻度、滿刻度以及其他適當(dāng)?shù)拇罂潭?做檢測(cè),這些刻度指示準(zhǔn)確與否決定著儀表檢測(cè)的結(jié)果。
將各經(jīng)過(guò)處理識(shí)別后讀取的表盤(pán)指針指示值與輸入驅(qū)動(dòng)標(biāo)準(zhǔn)信號(hào)一一做對(duì)比,根據(jù)兩者之間相差的數(shù)值便可判定該儀表指針指示的準(zhǔn)確性。
經(jīng)實(shí)驗(yàn)測(cè)試,系統(tǒng)采集儀表圖像并進(jìn)行去噪、灰度化以及邊緣檢測(cè)等預(yù)處理,運(yùn)行速率快,執(zhí)行時(shí)間可達(dá)40 ms,即時(shí)性能好。
對(duì)邊緣檢測(cè)后的二值圖像使用中心投影法找尋指針位置,圖7是儀表指針指示一定刻度時(shí),系統(tǒng)分析的表盤(pán)圖像基于中心點(diǎn)投影分布的角度θ和集合A(θ)的關(guān)系。圖7a中可以看出,θ=200°時(shí),A(θ)集合元素?cái)?shù)目最多,查詢本款儀表刻度與θ角度的對(duì)應(yīng)關(guān)系可知,該示數(shù)讀取值為0 km/h。圖7b中可以看出,θ=120°時(shí),A(θ)集合元素?cái)?shù)目最多,查詢對(duì)應(yīng)關(guān)系可知,該示數(shù)讀取值為80 km/h。
圖7 圖像中角度θ和集合A(θ)的關(guān)系
相同方法對(duì)該款儀表的0 km/h,40 km/h,80 km/h,120 km/h,160 km/h,200 km/h 以及220 km/h 這些大刻度進(jìn)行檢測(cè),并與相對(duì)應(yīng)的驅(qū)動(dòng)信號(hào)進(jìn)行對(duì)比,即可判斷該儀表盤(pán)指針指示是否準(zhǔn)確。根據(jù)標(biāo)準(zhǔn)QC/T727—2007《中華人民共和國(guó)汽車(chē)行業(yè)標(biāo)準(zhǔn):汽車(chē)摩托車(chē)用儀表》所示,汽車(chē)轉(zhuǎn)速表的基本誤差范圍應(yīng)在±2%以內(nèi),誤差在此范圍內(nèi)的儀表視為合格[7]。檢測(cè)對(duì)比結(jié)果如表2所示,各檢測(cè)刻度檢測(cè)值與標(biāo)準(zhǔn)值偏差都不大于0.02,所以該轉(zhuǎn)速表指示準(zhǔn)確性判斷結(jié)果為符合標(biāo)準(zhǔn)。另外用戶或廠商也可根據(jù)需要設(shè)定自己的標(biāo)準(zhǔn),那么按照這些特定的標(biāo)準(zhǔn)也可對(duì)指示準(zhǔn)確性進(jìn)行相應(yīng)的判斷。
表2 檢測(cè)對(duì)比結(jié)果
本文設(shè)計(jì)的基于機(jī)器視覺(jué)的汽車(chē)指針儀表檢測(cè)系統(tǒng)能夠?qū)崟r(shí)采集并處理識(shí)別待檢測(cè)儀表圖像。而使用OpenCV開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)可以根據(jù)實(shí)驗(yàn)需要隨時(shí)調(diào)用圖像處理的函數(shù)庫(kù),方便自定義算法的實(shí)現(xiàn)與驗(yàn)證。
該系統(tǒng)能夠從機(jī)器視覺(jué)的角度實(shí)現(xiàn)汽車(chē)儀表指針示數(shù)值的自動(dòng)讀取,并與標(biāo)準(zhǔn)信號(hào)作比較,從而判斷指針示數(shù)是否準(zhǔn)確。系統(tǒng)實(shí)時(shí)性強(qiáng)、識(shí)別效率良好,便于后續(xù)識(shí)別算法的改進(jìn)以及檢測(cè)功能的擴(kuò)充。
[1]GUO Lei,XU Youchun.Study on real-time distance detection based on monocular vision technique[J].Journal of Image and Graphics,2006,11(1):75-81.
[2]岳國(guó)義,李寶樹(shù),趙書(shū)濤.智能型指針式儀表識(shí)別系統(tǒng)的研究[J].儀器儀表學(xué)報(bào),2003(S2):430-431.
[3]寧志剛,汪仁煌,唐冬.基于圖像處理的高精度儀表判讀方法[J].傳感器與微系統(tǒng),2006,25(3):32-35.
[4]BRADSKI G,KAEHLER A.學(xué)習(xí)OpenCV[M].于仕琪,劉瑞禎,譯.北京:清華大學(xué)出版社,2009.
[5]何智杰,張彬,金連文.高精度指針儀表自動(dòng)讀數(shù)識(shí)別方法[J].計(jì)算機(jī)輔助工程,2006,15(3):9-12.
[6]陳彬,金連文.一種儀表指針位置檢測(cè)的中心投影法[J].計(jì)算機(jī)應(yīng)用研究,2005.
[7]國(guó)家發(fā)展和改革委員會(huì).QC/T727—2007,中華人民共和國(guó)汽車(chē)行業(yè)標(biāo)準(zhǔn):汽車(chē)摩托車(chē)用儀表[S].2008.