徐 洋,廖欽漁,李 銳,程安宇
(重慶郵電大學汽車電子與嵌入式系統工程研究中心,重慶 400065)
汽車儀表關系著駕駛狀態的正確指示,對保障行駛的安全性至關重要。因此,儀表出廠前需要對其各項功能進行嚴格的檢測及校正。目前儀表的檢測,國內絕大多數仍采用人工的方法,國外研究發展相對起步較早,普遍采用電子設計自動化、計算機輔助測試等新技術,已有不少先進的檢測儀器。機器視覺技術旨在通過計算機模擬人眼的視覺功能,獲取客觀三維世界的信息,并對其進行測量、跟蹤、處理和識別[1]。將視覺技術應用在汽車儀表的檢測中,不僅可以減少傳統人眼檢測因視野距離或疲勞疏忽等因素導致的缺陷和不足,而且可以大大地加快檢測速率,節省時間成本,真正實現系統化、規范化和自動化的檢測。
圖像處理技術開發的工具眾多,對儀表圖像的研究一般多采用LabView、MATLAB或者單純的VC++等工具[2-3]。使用這些方法雖然可以進行相關圖像處理的研究,但是它們或者提供的是非語言性編程,只能做仿真,或者就是編程工作量巨大,不能實現簡單、便捷以及即時性的綜合需求。OpenCV(Open Source Computer Vision Library)是基于Visual Studio集成開發環境的開源計算機視覺庫,為圖像處理技術的研究提供了方便快捷且完全免費的平臺[4],采用其進行圖像處理識別的研究可以提高執行速率,減少代碼數量,符合即時、便捷的需要。
系統的總體設計結構框圖如圖1所示,系統主要由以下幾部分組成:視頻圖像處理的控制計算機及其處理軟件,USB接口的CMOS攝像頭獲取實時的無壓縮的視頻數據,攝像頭橫縱豎三方向的移動支架,LED燈群為圖像采集提供外部光源,促使儀表轉動的驅動模塊,被測儀表以及其固定支撐臺。
本設計中控制計算機采用Intel公司生產的Pentium處理器,處理速度為2.20 GHz,內存2.00 Gbyte,可以滿足實時采集需求。圖像處理軟件采用基于Visual Studio 2008集成開發環境下的OpenCV庫,實現相關函數可對采取圖像進行預處理和識別判定。

圖1 系統總體結構框圖
圖像采集部分采用Microview公司的MVC-II-3M攝像頭,這是一款遵循USB 2.0標準的高分辨力、高清晰度、高幀率一體化的攝像頭,具有高速、帶幀存、外觸發采集和閃光燈輸出功能,最高分辨力可達到2048×1536,符合儀表檢測對高分辨力的特殊要求。
本系統還設計了攝像頭橫縱豎(X軸,Y軸,Z軸)3個方向的自由移動功能。當需要在表盤上獲取某指定部分信息時可以在X軸和Y軸移動支架調整攝像頭位置,而當需要拉伸縮進攝像頭與表盤相對位置時就可在Z軸調整。這樣可以隨意調整支架,從而調整攝像頭位置以獲取想要的圖像信息。
由于檢測系統的封閉性,內部只靠驅動后的儀表自帶發光,不足以給檢測環境提供充足且均勻的光源,所以需要在系統內部周邊安裝光源。選取的LED燈耗電量少、發光效率高、發熱量低,能在不影響系統性能的情況下提供均勻穩定的光源。
要獲取指定刻度的儀表指針指示情況,被測儀表需要一定的驅動信號使其指針旋轉到預期指定的位置,這里采取給儀表接入信號發生器和電位調節器的方法,可以對儀表盤上不同功能的表頭進行驅動控制。
最后系統設計了固定的支撐臺,通過夾具將被測儀表扣鎖在支撐臺上,這樣才可以保證檢測時圖像采集的穩定性。
對圖像進行處理的前提是圖像本身能夠最大程度地反映有用信息,如果圖像本身由于非客觀因素導致的圖像質量低下,那么這幅圖像可以視為不合格的研究對象,后續的處理與識別也不再有意義。因此采集最佳的儀表圖像成為本設計的關鍵之一。
MVC-II-3M攝像頭提供了SDK軟件開發工具包,可以利用其API接口進行二次開發。結合MVC攝像頭開發包編程可以采集視頻圖像,該采集過程中不但可以對視頻窗口的橫縱偏移量和窗口大小進行設置而且可以通過調節曝光時間和紅綠藍三色增益來得到滿意的圖像色彩。對攝像頭采集的視頻信息進行抓幀處理即可獲取想要的各幅圖像,這些圖像將存入計算機緩存中以供后面處理需要。攝像頭獲取并顯示圖像的代碼如下:

其中,pFrame是OpenCV中創建的一個IplImage結構體變量,camera.QueryFrame是類camera中的的幀獲取函數,cvNamedWindow和cvShowImage分別為窗口命名和圖像顯示函數。
系統采集到的儀表圖像是RGB格式的彩色圖像,雖然里面包含了所需要的信息,但也包含了很多對于表盤和指針檢測無用的信息。同時,由于外界因素的影響圖像難免存在一定的噪聲,如果不進行處理,就會加大工作量和影響對有用信息的獲取。本實驗只對圖像的表盤、指針等輪廓突出信息進行檢測,對圖像的顏色亮度等不做研究,所以只須將原圖像進行去噪、灰度化、邊緣檢測便可給后續識別環節提供充足的信息。
OpenCV可以提供5種不同的圖像平滑去噪方法,所有的操作都由cvSmooth函數實現。高斯濾波是最常用的去噪方法,它利用卷積核與輸入圖像的每個像素點進行卷積,將最終的計算結果之和作為輸出圖像的像素值。OpenCV的高斯濾波提供的幾個標準核大小3×3,5×5,7×7具有比其他核更優的性能。OpenCV高斯去噪代碼如下:

其中,in和out分別為高斯去噪的輸入圖像和輸出結果,CV_GAUSSIAN代表去噪類型,最后的2個參數代表對圖像進行核大小為3×3的高斯卷積。OpenCV高斯去噪的儀表圖像對比如圖2所示,左邊為原圖Original,右邊為高斯去噪后的圖Denoising。

圖2 高斯去噪效果對比圖
當數據類型一致時,OpenCV的cvCvtColor函數可將圖像從一個顏色空間轉換到另一個空間。OpenCV可實現RGB色彩空間到灰度空間、HSV色彩空間、HLS色彩空間、CIE色彩空間的轉換以及反變換。圖像的灰度化即是將圖像從RGB色彩空間轉換到灰度空間,OpenCV圖像灰度化代碼如下:

其中,out和out1分別為灰度變換的輸入圖像(即去噪后的圖像)和輸出結果,CV_BGR2GRAY代表轉換代碼。OpenCV灰度化的儀表圖像對比如圖3所示,左邊為去噪后的圖Denoising,右邊為灰度化后的圖Gray。

圖3 灰度化效果對比圖
邊緣檢測最常用的是Canny算法,它與拉普拉斯算法不同之一是首先在x和y方向求一階導數,然后組合為4個方向xx,xy,yx,yy的導數,這些方向導數達到局部最大值的點就是組成邊緣的候選點。Canny算法最重要的一個特點是其試圖將獨立邊的候選像素拼裝成輪廓,輪廓的形成是對這些像素運用滯后性閾值,所以需要2個閾值,即上限和下限。如果一個像素的梯度高于上限閾值則被認為是邊緣像素,如果低于下限閾值則被拋棄,如果介于二者之間,只有當其與高于上限閾值的像素相連時才會被接受[4]。OpenCV的Canny邊緣檢測代碼如下:

其中,out1和out2分別為邊緣檢測的輸入圖像和輸出結果,cvCanny函數要求輸入一幅灰度圖,所以前面灰度化的圖像便作為該處的輸入,而函數輸出的圖也一定是灰度的(實際是二值圖像)。后面的3個參數分別為下限閾值lowThresh、上限閾值highThresh和中孔值aperture-Size。經實驗驗證,上下限比值在2∶1~3∶1之間邊緣檢測效果清晰明顯,而中孔是用于函數內部的使用。OpenCV邊緣檢測的儀表圖像對比如圖4所示,左邊為灰度化后的圖Gray,右邊為邊緣檢測的圖Canny。
指針式儀表檢測是一個復雜精細的過程,系統最關鍵的部分就是指針示數的判讀。由于檢測系統對指針的測量是多次重復的操作,所以針對同一類型儀表可以確定該表盤的中心位置,后面的檢測可以通過表盤各點向該中心點投影的方法確定指針的位置,從而判定儀表指針指示準確性是否合格。

圖4 邊緣檢測效果對比圖
初步觀察儀表盤構造特征,可以知道表盤的中心點應在指針旋轉的固定軸線位置。為了精確地確定表盤的中心,這里采用多組兩線交點求均值的方法來找出中心點O。一般的研究求中心點只選取零刻度和滿刻度所在直線這兩線求交點[5],如下方程組所示

式中:x和y是二值圖像中直線上點的坐標;k1,b1,k2,b2代表兩條相交直線各自的斜率和y軸截距。這樣由單一的兩條特殊直線所確定的交點(x,y)作為表盤中心點難免不精準。系統采用的多組兩線交點求均值的方法可以改善上述方法的誤差性。多組兩線交點均值法是以表盤上包括滿刻線在內的幾個大刻度線所在直線均與零刻線所在直線做交集,分別求得交點(x1,y1),(x2,y2),…,(xn,yn),然后求這些交點的算術平均值,即橫縱坐標的算術平均值,公式為

這樣通過多組直線交點求出的均值(ˉx,ˉy)作為表盤的中心點更具有真實性和準確性。
中心投影法是將圖像上的各特征點向該中心點做投影,相當于在極坐標系中對平面圖像上的點進行分析處理。極坐標系中,直線用以下方程式表示

式中:x和y代表直線上點的坐標,ρ和θ分別代表點(x,y)到原點的距離和點(x,y)所在過原點直線與x軸的夾角,如圖5所示。極坐標系中每一個點對應一個角度θ,每個角度θ的直線上會有不同數目的特征點組成一個集合A(θ),當有一個點投向這個角度時,集合A(θ)元素增加1。這樣通過對集合A(θ)中元素個數的比較,找出局部最大值,含有最多元素個數的集合Amax(θ)所對應的角度θ即為指針所在直線的角度,從而便可找出指針所在位置[6]。如圖6中心投影示意圖所示,每一個θ角度上都有一定的點投影,這里示例當θ=45°時,投影的特征點數目最多,那么其對應的集合A(θ)元素個數最多。


由于表盤的均勻分布性,只有指針所在位置的θ角度所在直線才會出現投影點明顯多于其他角度,A(θ)元素個數遠遠多于其他集合。前面求出了儀表的中心點所以只要找到了這個角度θ,便可以通過該θ值與表盤刻度的對應關系求出指針示數值。儀表盤刻度的所在角度需要以所確定的中心點O為原點建立極坐標系獲取。各款儀表表盤刻度與θ角度的對應關系不同,本實驗所測儀表盤的轉速表刻度與θ角度的對應關系如表1所示,這里只列舉了整十的大刻度。

表1 轉速表盤刻度與θ角度的對應關系
為了檢測儀表指針指示的準確性,如果每一個刻度都檢查會浪費很多的時間,一般方法是選取表盤上幾個特殊刻度(如零刻度、滿刻度以及其他適當的大刻度)做檢測,這些刻度指示準確與否決定著儀表檢測的結果。
將各經過處理識別后讀取的表盤指針指示值與輸入驅動標準信號一一做對比,根據兩者之間相差的數值便可判定該儀表指針指示的準確性。
經實驗測試,系統采集儀表圖像并進行去噪、灰度化以及邊緣檢測等預處理,運行速率快,執行時間可達40 ms,即時性能好。
對邊緣檢測后的二值圖像使用中心投影法找尋指針位置,圖7是儀表指針指示一定刻度時,系統分析的表盤圖像基于中心點投影分布的角度θ和集合A(θ)的關系。圖7a中可以看出,θ=200°時,A(θ)集合元素數目最多,查詢本款儀表刻度與θ角度的對應關系可知,該示數讀取值為0 km/h。圖7b中可以看出,θ=120°時,A(θ)集合元素數目最多,查詢對應關系可知,該示數讀取值為80 km/h。

圖7 圖像中角度θ和集合A(θ)的關系
相同方法對該款儀表的0 km/h,40 km/h,80 km/h,120 km/h,160 km/h,200 km/h 以及220 km/h 這些大刻度進行檢測,并與相對應的驅動信號進行對比,即可判斷該儀表盤指針指示是否準確。根據標準QC/T727—2007《中華人民共和國汽車行業標準:汽車摩托車用儀表》所示,汽車轉速表的基本誤差范圍應在±2%以內,誤差在此范圍內的儀表視為合格[7]。檢測對比結果如表2所示,各檢測刻度檢測值與標準值偏差都不大于0.02,所以該轉速表指示準確性判斷結果為符合標準。另外用戶或廠商也可根據需要設定自己的標準,那么按照這些特定的標準也可對指示準確性進行相應的判斷。

表2 檢測對比結果
本文設計的基于機器視覺的汽車指針儀表檢測系統能夠實時采集并處理識別待檢測儀表圖像。而使用OpenCV開源計算機視覺庫可以根據實驗需要隨時調用圖像處理的函數庫,方便自定義算法的實現與驗證。
該系統能夠從機器視覺的角度實現汽車儀表指針示數值的自動讀取,并與標準信號作比較,從而判斷指針示數是否準確。系統實時性強、識別效率良好,便于后續識別算法的改進以及檢測功能的擴充。
[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]岳國義,李寶樹,趙書濤.智能型指針式儀表識別系統的研究[J].儀器儀表學報,2003(S2):430-431.
[3]寧志剛,汪仁煌,唐冬.基于圖像處理的高精度儀表判讀方法[J].傳感器與微系統,2006,25(3):32-35.
[4]BRADSKI G,KAEHLER A.學習OpenCV[M].于仕琪,劉瑞禎,譯.北京:清華大學出版社,2009.
[5]何智杰,張彬,金連文.高精度指針儀表自動讀數識別方法[J].計算機輔助工程,2006,15(3):9-12.
[6]陳彬,金連文.一種儀表指針位置檢測的中心投影法[J].計算機應用研究,2005.
[7]國家發展和改革委員會.QC/T727—2007,中華人民共和國汽車行業標準:汽車摩托車用儀表[S].2008.