郝永飛,唐旭晟,程良利
(福州大學 機械工程及自動化學院,福建 福州 350108)
作為汽車的信息顯示中心,汽車儀表負責將汽車的狀態(tài)實時反饋給駕駛員,因此,汽車儀表的檢測對于汽車駕駛的安全性和正確性至關(guān)重要[1]。其中,指針檢測是汽車儀表檢測的重要環(huán)節(jié),如速度表、轉(zhuǎn)速表、油量表等都是通過指針來顯示。
傳統(tǒng)的汽車儀表檢測主要還是由人眼目測,存在效率低、易出錯的缺陷。而將機器視覺技術(shù)應(yīng)用于儀表檢測中,無疑能夠克服人工檢測的不足,實現(xiàn)儀表的自動化檢測。目前,國內(nèi)外學者在指針識別方面做了許多研究。
SELVATHAI T等人[2]使用Hough圓變換提取了儀表中心坐標,通過Hough累加空間中峰值的位置定位指針,并利用其相對坐標系的角度識別讀數(shù);Hough變換的魯棒性強,但其計算量大,且需要較大的存儲空間。周泓等人[3]根據(jù)指針顏色特征信息,把儀表圖像從RGB模型轉(zhuǎn)換到HSI模型,將色調(diào)和飽和度分量作為特征參數(shù),提取了指針區(qū)域,采用Hough變換提取了指針直線,并識別了其讀數(shù)。吳歡歡等人[4]利用圖像減影法獲取了指針區(qū)域,隨后通過定位圓法確定了指針位置,并對讀數(shù)進行了識別;但該圖像減影法受圖像噪聲的影響較大。鄭文學等人[5]采用模板匹配和極坐標變換等方法對指針讀數(shù)進行了識別;但其模板的匹配需要預(yù)先標定儀表模板,因此,模板的好壞直接影響著指針檢測的效率。
筆者基于迭代加權(quán)的最小二乘法擬合指針直線,通過最小距離和的交點法定位回轉(zhuǎn)中心后,實現(xiàn)對指針讀數(shù)的識別。
儀表檢測系統(tǒng)主要由4個部分組成:檢測軟件、儀表驅(qū)動系統(tǒng)、機器視覺系統(tǒng)和儀表工裝系統(tǒng)。
系統(tǒng)總體框架如圖1所示。
圖1 檢測系統(tǒng)總體框架
該系統(tǒng)的計算機采用i7-9700K處理器,處理速度為3.60 GHz,能夠滿足實時采集需求。基于Visual Studio 2015平臺,筆者采用MFC作為圖形界面開發(fā)框架,開發(fā)了儀表檢測軟件;同時采用OpenCV視覺算法庫,實現(xiàn)了對儀表圖像的預(yù)處理和識別判定。系統(tǒng)中的檢測軟件主要負責控制驅(qū)動信號的發(fā)送、儀表圖像的采集和儀表檢測算法的執(zhí)行等操作。
儀表驅(qū)動系統(tǒng)的作用是代替汽車實現(xiàn)對儀表的驅(qū)動,即在檢測軟件的控制下,通過輸出驅(qū)動信號,來模擬汽車儀表在實際工作時的各類狀況信息。該系統(tǒng)主要包含脈沖信號、三態(tài)門信號、電壓信號和電機驅(qū)動信號等,以滿足大部分儀表的信號需求。
機器視覺系統(tǒng)采用德國The Imaging Source公司的DFK 33GP006彩色工業(yè)相機,該相機遵循Gige接口標準,支持外觸發(fā)以及數(shù)字I/O輸入,最高分辨率可達到2 592×1 944,能夠滿足儀表檢測的實際需求。
鏡頭選用OptoEngineering鏡頭,型號為EN5MP1216,最大畸變0.35%。相機結(jié)合固定焦距鏡頭形成圖像采集模塊,通過網(wǎng)卡接口與工控機進行圖像信息傳輸。相機通過開關(guān)式磁力座固定在設(shè)備頂部,并使鏡頭豎直向下正對儀表工裝。該系統(tǒng)在封閉的室內(nèi)檢測儀表,利用儀表自帶的背景光作為光源,獲取的圖像質(zhì)量能夠滿足檢測的需要,并安裝碗型LED光源為沒有背景光的儀表補充照明。
儀表工裝系統(tǒng)主要用于對儀表進行固定,防止儀表在檢測過程中移動或偏轉(zhuǎn),且能使儀表每次被放下時都正面豎直向上。針對不同的表型,需設(shè)計特定的工裝,以保證儀表放置的一致性。同時,筆者在工裝上安裝傳感器來判斷是否存在儀表、儀表是否被檢測。
檢測軟件主界面如圖2所示。
圖2 軟件主界面
圖2中,界面主要分為操作區(qū)、圖像顯示區(qū)、測試點顯示區(qū)、檢測報告顯示區(qū)和狀態(tài)顯示區(qū)5個部分。操作區(qū)主要負責儀表檢測的啟動,設(shè)備啟動后,在圖像顯示區(qū)可實時顯示儀表狀態(tài),設(shè)備按照測試點顯示區(qū)中配置好的檢測項對當前儀表進行檢測,并將檢測結(jié)果顯示在檢測報告顯示區(qū)。
儀表檢測之前,首先要在參數(shù)配置界面中配置被檢儀表的基本參數(shù)和檢測項參數(shù)。表型基本參數(shù)主要為:表型名稱、表型類型、供電電壓等。檢測項參數(shù)則是根據(jù)儀表特性來定義的檢測項目,如指示燈檢測、指針檢測、段式計數(shù)識別等。
筆者主要介紹儀表的指針檢測。
汽車儀表形式多樣,而且儀表指針的類型也各不相同。為了實現(xiàn)指針檢測的通用性,在該系統(tǒng)中,筆者依據(jù)儀表指針顏色與其背景的關(guān)系,將各類儀表分為如下兩類:
(1)A類。指針顏色與背景色差異明顯;
(2)B類。指針的顏色與背景色相近,對比度不明顯。
該系統(tǒng)采集的A、B類儀表圖像如圖3所示。
圖3 指針儀表圖像
儀表指針檢測前,首先由人工確定該類儀表的指針類型,并在軟件中預(yù)先配置相應(yīng)的儀表參數(shù)。
指針檢測流程如圖4所示。
圖4 指針檢測流程圖
3.1.1 指針粗定位
指針粗定位是將指針從背景中分離出來,得到清晰完整的指針區(qū)域。其詳細算法步驟如下:
(1)圖像灰度化。為減少處理的數(shù)據(jù)量,筆者首先將采集的儀表圖像轉(zhuǎn)為灰度圖像,即基于心理學對彩色圖像的RGB 3個分量進行加權(quán)平均,選取3個分量的權(quán)值比為3 ∶6 ∶1[6],即:
Gray=0.299R+0.587G+0.114B
(1)
式中:Gray—加權(quán)平均后的灰度值;R—彩色圖像的紅色分量;G—彩色圖像的綠色分量;B—彩色圖像的藍色分量。
(2)圖像濾波。由于采集到的儀表圖像可能含有脈沖噪聲,采用中值濾波處理圖像,濾波模板選用尺寸大小為3*3正方形模板;
(3)對比度拉伸。對比度拉伸[7]是通過縮放圖像的灰度值來提高目標區(qū)域與背景區(qū)域的對比度。此處筆者采用線性灰度拉伸,其定義如下:
g=G*Mult+Add
(2)
式中:g—縮放后的灰度值;G—原圖像灰度值;Mult—灰度值縮放因子;Add—灰度值偏移量。
(4)圖像二值化。筆者采用最大類間方差法[8]來進行圖像二值化處理。其基本思想是將目標與背景的分割閾值記作T,則類間方差可表述為:
g=ω0ω1(μ0-μ1)2
(3)
式中:g—類間方差;ω0—目標像素點在整幅圖像的分布概率;ω1—背景像素點在整幅圖像的分布概率;μ0—目標像素點的平均灰度;μ1—背景像素點的平均灰度。
筆者通過遍歷的方式求得使類間方差g最大的分割閾值T。
二值化后的圖像如圖5所示。
圖5 二值圖像
(5)特征選擇。筆者采用連通域標記算法[9]提取二值圖像的連通成分。指針區(qū)域與背景區(qū)域在長度和面積特征上區(qū)別明顯,選取合適的閾值即可提取指針區(qū)域。此時指針邊緣不平整,存在凸起和凹坑,筆者采用凸包[10]來平滑指針邊緣。
凸包前后的指針區(qū)域如圖6所示。
圖6 凸包前后指針區(qū)域
3.1.2 指針精定位
長條狀的指針不利于后續(xù)的讀數(shù)識別,因此通過精定位將指針擬合為一條直線,主要分為兩步來實現(xiàn),即指針細化和擬合指針直線。
(1)指針細化。即在粗提取的指針區(qū)域中去掉一些點,得到指針的中心軸。
設(shè)粗提取的指針像素集合為A,用結(jié)構(gòu)元B腐蝕和開操作,完成集合A的骨架提取[11]。提取集合A的骨架S(A)的算法定義如下:
(4)
式中:S(A)—指針像素集合A的骨架;A—指針像素集合;i—集合A被腐蝕為空集前的迭代次數(shù)。
其中:Si(A)=(AΘiB)-(AΘiB)°B。
細化后的指針骨架如圖7所示。
圖7 指針骨架
(2)擬合指針直線。擬合直線最常用的方法是最小二乘法[12],其通過求取樣本點偏差平方和的最小值來確定最佳擬合直線。
其直線的截距式公式為:
y=ax+b
(5)
式中:a—直線斜率;b—y軸上的截距。
則平方差之和定義如下:
(6)
式中:(xi,yi)—指針細化后的樣本點。
但對于大的離群點而言,最小二乘法的魯棒性不強。為減少這些離群點的影響,筆者為每個樣本點引入權(quán)重,則加權(quán)后的平方差之和定義如下:
(7)
式中:Wi—每個樣本點的權(quán)重。
應(yīng)用加權(quán)最小二乘法時,權(quán)重W的取值不同,解出的參數(shù)a和b也會不同,擬合出的直線也不一樣,因此,權(quán)重W的合理選取至關(guān)重要。
為了確定權(quán)重W,以便擬合出比較理想的指針直線,筆者在此引入Tukey權(quán)重函數(shù),即先計算樣本點到直線的距離,再由各點距離來分配權(quán)重大小的魯棒性的方法。它可以有效剔除異常點,且能讓其他樣本點的權(quán)重得到合理分配。
Tukey權(quán)重函數(shù)W(δ)定義如下:
(8)
式中:δ—樣本點到直線的距離;γ—削波因數(shù)。
經(jīng)試驗,筆者選取γ為2。由式(8)可得,δ大于γ的點為離群值點,其權(quán)重W(δ)為0,這些點被剔除,不參與直線擬合;其他點的權(quán)重W(δ)在0~1之間,越接近理想擬合直線的樣本點,其所分配到的權(quán)重也就越大。因此,該方法可以將離群值點所產(chǎn)生的影響降到最低。
在引入Tukey權(quán)重函數(shù)后,通過迭代法擬合指針直線的步驟如下:
(1)第一次迭代,使用權(quán)重W(i)=1(i=1,2,3…n),即采用標準的最小的二乘法擬合得到一條近似指針直線y;
(2)計算所有樣本點到近似直線y的距離δ(i),再由Tukey權(quán)重函數(shù)計算每一點的權(quán)重W(i);
(3)將步驟(2)求出的每一點的權(quán)重W(i)代入式(7),通過加權(quán)最小二乘法擬合出一條新的近似指針直線y;
(4)重復(fù)步驟(2,3),反復(fù)求取權(quán)重W(i)和近似指針直線y;當獲得理想的指針直線時,則迭代結(jié)束。
改進最小二乘法擬合的指針直線如圖8所示。
圖8 改進最小二乘法擬合直線
圖8中,指針直線與骨架中間的所有點幾乎重合,這表明擬合效果的比較理想。
用上述指針粗定位算法提取B類儀表指針時,由于指針與背景對比度不明顯,提取的指針上端部分與刻度區(qū)域有粘連,這不利于采用4.2節(jié)中的算法實現(xiàn)指針的精定位。因此,筆者設(shè)計了一種結(jié)合灰度法和基于Tukey權(quán)重函數(shù)的迭代加權(quán)最小二乘法的新方法,以此來實現(xiàn)B類儀表的指針精定位。
首先,筆者同樣采用上述指針粗定位算法對ROI區(qū)域截取的B類儀表圖像進行了處理,得到了有粘連的指針區(qū)域,求取了該粘連指針區(qū)域的最小外接旋轉(zhuǎn)矩形,并進行了膨脹處理,隨后沿長軸方向均勻地取n條平行于短軸的線段。
粘連指針區(qū)域最小外接矩形如圖9所示。
圖9 粘連指針區(qū)域最小外接矩形
若某根線段劃過指針,則沿該線段可得到對應(yīng)區(qū)域像素點的灰度值依次為255,255,…,0,…,0,255,255,…。設(shè)灰度值255,255,…,0變化,產(chǎn)生的邊緣點為第一類邊緣點A,即由白到黑產(chǎn)生的邊緣點;設(shè)灰度值0,255,255,…變化,產(chǎn)生的邊緣點為第二類邊緣點B,即由黑到白產(chǎn)生的邊緣點。
筆者將得到的A、B兩類邊緣點,分別作為擬合指針兩邊緣直線的樣本點,其中的離群點在后續(xù)擬合指針直線的算法中予以去除。
擬合的指針直線如圖10所示。
圖10 擬合的B類儀表指針直線
圖10(a)中,指針直線為兩邊緣直線所形成夾角的角平分線。圖10(b,c)中,為A、B兩類邊緣點擬合的邊緣直線。
由此可以看出,求取的指針直線效果理想;若擬合得到的兩邊緣直線是平行線,則取它們的中心線作為指針直線。
精準定位指針的回轉(zhuǎn)中心對后續(xù)指針讀數(shù)起著關(guān)鍵的作用。目前常用的兩種方法為交點法[13]和刻度圓心法[14]。
交點法通過擬合指針處于兩個刻度位置的直線方程,將求得的交點坐標作為指針回轉(zhuǎn)中心。但若儀表有輕微移動,或擬合的指針直線方程有誤差時,求得的指針回轉(zhuǎn)中心就會有誤差。
刻度圓心法直接把刻度的外接圓圓心或者刻度點的擬合圓圓心作為指針回轉(zhuǎn)中心。該方法對刻度提取的精度要求高,穩(wěn)定性和通用性比較差。
筆者提出一種最小距離和的交點法,即求出一點與多個指針直線交點的距離和最小,把該點作為指針回轉(zhuǎn)中心。該算法的具體步驟如下:
(1)采集儀表指針在不同刻度位置的多幅圖像;
(2)利用上述改進的最小二乘法擬合這些圖像中的指針直線;
(3)計算兩條直線的相交點,設(shè)不同刻度位置的圖像數(shù)量是m,則交點個數(shù)為n=m*(m-1)/2;
(4)則所有交點到回轉(zhuǎn)中心的距離和L為:
(9)
式中:(a,b)—回轉(zhuǎn)中心;(xi,yi)—兩兩直線的相交點。
當距離和L為最小時,求得回轉(zhuǎn)中心橫坐標a為:
(10)
式中:xi—兩兩直線相交點的橫坐標。
同樣,求得回轉(zhuǎn)中心縱坐標b為:
(11)
式中:yi—兩兩直線相交點的縱坐標。
(5)回轉(zhuǎn)中心修正。由步驟(4)求出初定的回轉(zhuǎn)中心坐標(a,b)后,則可以求出每一個交點到回轉(zhuǎn)中心的距離Di。設(shè)置距離閾值d,當有交點距離Di>d時,該點予以剔除,不參與后續(xù)計算。
改進的交點法可以降低僅兩條指針直線相交帶來的隨機誤差,提高回轉(zhuǎn)中心的定位精度,以便于后續(xù)的讀數(shù)準確識別。
此處筆者采用角度法[15]來識別指針讀數(shù)。筆者首先計算當前指針直線與基準直線的角度,再將該角度與整體量程的角度進行比例換算,得出指針的讀數(shù)。其具體過程如下:
首先以已求得的指針回轉(zhuǎn)中心為原點,水平向右為X軸正向,豎直向上為Y軸正向,建立直角坐標系;
以坐標軸X正方向為起始,逆時針旋轉(zhuǎn),角度在第一、二象限時為正角度,角度范圍為0°~180°;順時針旋轉(zhuǎn),角度在第三、四象限為負角度,角度范圍為0°~-180°;
設(shè)零刻度時指針直線為基準直線,角度為α1,指針偏轉(zhuǎn)后的角度為α2。根據(jù)起始刻度所在象限的不同,可分別確定指針偏轉(zhuǎn)角度的計算公式。
起始刻度在第三象限的指針轉(zhuǎn)角如表1所示。
表1 起始刻度在第三象限的指針轉(zhuǎn)角
起始刻度在第四象限的指針轉(zhuǎn)角如表2所示。
表2 起始刻度在第四象限的指針轉(zhuǎn)角
則指針讀數(shù)V為:
(12)
式中:V—指針讀數(shù);α—指針偏轉(zhuǎn)角度;β—整體量程對應(yīng)的角度范圍;R—儀表的整體量程。
筆者將圖3中的兩款儀表分別放在該檢測系統(tǒng)中進行指針檢測,即通過對被檢儀表施加不同的驅(qū)動信號,使得儀表指針偏轉(zhuǎn),并由系統(tǒng)中的檢測算法獲取對應(yīng)的測試值,同時根據(jù)驅(qū)動信號的大小查得被檢儀表相應(yīng)的理論偏轉(zhuǎn)值,偏差為二者相減所得。偏差若在規(guī)定的范圍內(nèi),則認定該儀表合格。
A類儀表檢測結(jié)果如表3所示。
表3 A類儀表檢測結(jié)果
B類儀表檢測結(jié)果如表4所示。
表4 B類儀表檢測結(jié)果
實驗結(jié)果顯示:該系統(tǒng)檢測值與理論偏轉(zhuǎn)值之間的誤差均在1%以內(nèi),并且讀數(shù)識別時間約為200 ms左右。該結(jié)果證明,該算法具有較好的精度,能夠滿足汽車儀表指針檢測的實際需求。
針對傳統(tǒng)的汽車儀表檢測中存在的效率低、精度不高等問題,筆者將機器視覺應(yīng)用于汽車儀表的檢測,設(shè)計出了一種通用型的指針檢測算法及其檢測系統(tǒng),并采用該儀表檢測系統(tǒng)對A、B兩類儀表進行了檢測實驗,并得出了以下結(jié)論:
(1)將儀表指針分為兩類,分別采用骨架提取和灰度法獲得擬合指針的樣本點,在迭代加權(quán)的最小二乘法中引入Tukey權(quán)重函數(shù),取得了理想的擬合效果;
(2)實驗結(jié)果表明,該算法可以準確地識別指針的示數(shù),其檢測值與理論偏轉(zhuǎn)值的誤差在1%以內(nèi),同時識別速度也能滿足實際檢測的需要。
采用該檢測系統(tǒng)進行儀表檢測之前,需要預(yù)先配置較多的參數(shù),這給檢測帶來了一定的麻煩。因此,在后續(xù)的研究中,筆者將在算法參數(shù)自適應(yīng)方面進行研究,以盡量減少檢測系統(tǒng)需要配置的參數(shù)數(shù)目。