張海鵬,趙不賄,石建榮,肖 暉
(1.江蘇大學(xué) 電氣信息工程學(xué)院,江蘇 鎮(zhèn)江 212013;2.鎮(zhèn)江計(jì)量檢定測試中心,江蘇 鎮(zhèn)江 212132)
標(biāo)準(zhǔn)金屬量器液位圖像識(shí)別裝置的研制
張海鵬1,趙不賄1,石建榮2,肖 暉2
(1.江蘇大學(xué) 電氣信息工程學(xué)院,江蘇 鎮(zhèn)江 212013;2.鎮(zhèn)江計(jì)量檢定測試中心,江蘇 鎮(zhèn)江 212132)
在使用標(biāo)準(zhǔn)金屬量器對液體進(jìn)行計(jì)量過程中,傳統(tǒng)的人工讀取液位的方法測量效率和準(zhǔn)確度都比較低;提出了一種高精度的標(biāo)準(zhǔn)量器液位圖像識(shí)別裝置,該裝置主要由水平調(diào)整和圖像處理兩部分組成,選用S3C2440 ARM芯片和Linux嵌入式系統(tǒng)作為硬、軟件平臺(tái);水平調(diào)整是通過SCA100T雙軸傾角傳感器測量標(biāo)準(zhǔn)金屬量器的傾角并控制步進(jìn)電機(jī)自動(dòng)調(diào)整,實(shí)現(xiàn)閉環(huán)控制;對采集的液位圖像,由OpenCV進(jìn)行灰度化、濾波、邊緣檢測、液位提取,再經(jīng)過標(biāo)定計(jì)算轉(zhuǎn)換成實(shí)際液位高度;實(shí)驗(yàn)結(jié)果表明該方法能快速測量液位,精度高,應(yīng)用于燃油加油機(jī)計(jì)量檢定裝置上,有較好的推廣價(jià)值。
標(biāo)準(zhǔn)金屬量器;液位圖像識(shí)別;自動(dòng)調(diào)平;嵌入式系統(tǒng);OpenCV
液位檢測在高精度計(jì)量中對計(jì)量結(jié)果的精度具有決定性的影響,如燃油加油機(jī)檢定裝置的油位等。對于封閉的金屬量器,傳統(tǒng)的方法是在示液管旁固定一個(gè)游標(biāo)讀數(shù)機(jī)構(gòu),通過人工滑動(dòng)游標(biāo),目測液位高度[1]。而現(xiàn)有的液位傳感器,如磁致伸縮液位計(jì)、光導(dǎo)液位計(jì)等,解決了自動(dòng)化讀取液位的問題,但傳感器與液體接觸,參與了檢定計(jì)量過程,破壞了標(biāo)準(zhǔn)量器原有的結(jié)構(gòu)。而一些非接觸式液位傳感器又存在精度問題,如超聲波傳感器的測量準(zhǔn)確度不超過0.5%FS[2],無法滿足高精度液位測量的需求。本文給出了一種標(biāo)準(zhǔn)金屬量器液位圖像識(shí)別裝置,帶有自動(dòng)調(diào)水平功能,這種非接觸式液位測量裝置,其分辨率高達(dá)0.1 mm,解決了液位自動(dòng)計(jì)量系統(tǒng)中的關(guān)鍵問題。
1.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
裝置采用先進(jìn)的嵌入式自動(dòng)調(diào)平和圖像處理技術(shù)來提高量器液位計(jì)量的自動(dòng)化程度和精確度,提出了嵌入式液位自動(dòng)計(jì)量解決方案。裝置主要由3個(gè)部分組成:嵌入式ARM控制器、調(diào)平機(jī)構(gòu)、圖像采集模塊,如圖1所示。
圖1 系統(tǒng)硬件構(gòu)架
1.2 處理器模塊的選擇
系統(tǒng)中的硬件平臺(tái)選用的是基于ARM920T內(nèi)核的S3C2440處理器,主頻400 MHz[3],并外接了攝像頭模塊、傾角采集模塊、LCD觸摸屏模塊、步進(jìn)電機(jī)驅(qū)動(dòng)模塊等,如圖2所示。
圖2 嵌入式設(shè)備系統(tǒng)結(jié)構(gòu)
1.3 裝置調(diào)平模塊的選擇與設(shè)計(jì)
為了能高精確測量標(biāo)準(zhǔn)量器液位高度,需避免示液管傾斜帶來的測量誤差。系統(tǒng)設(shè)計(jì)了一套自動(dòng)化調(diào)平機(jī)構(gòu),由傾角傳感器、ARM控制器、步進(jìn)電機(jī)、滑動(dòng)絲桿構(gòu)成,形成閉環(huán)控制系統(tǒng)??刂破髯詣?dòng)采集雙軸傾角傳感器的傾角值,將采集到的傾角值進(jìn)行PID計(jì)算并發(fā)出脈沖信號(hào)控制兩只步進(jìn)電機(jī)使標(biāo)準(zhǔn)量器自動(dòng)調(diào)平。
傾角傳感器選用SCA100T雙軸傾角傳感器,SCA100T是基于3D-MEMS的高精度雙軸傾角傳感芯片。它具有弱的溫度依賴性、高分辨率、低噪聲、且對震動(dòng)不敏感等特性。ARM控制器通過SPI通信方式采集傾角傳感器的X和Y軸角度。
調(diào)平裝置裝有3個(gè)撐腳,呈等腰直角三角形分布。其中一只撐腳長度固定,作為水平的基準(zhǔn)點(diǎn),另外兩只撐腳由步進(jìn)電機(jī)和可調(diào)絲桿組成。
根據(jù)處理器采集的兩軸傾值,判斷X軸和Y軸的傾角值是否在±0.5°之間,如果傾角值在這個(gè)區(qū)間,停止調(diào)平。如果不在,根據(jù)差值經(jīng)過PID計(jì)算,控制器發(fā)出脈沖信號(hào)控制電機(jī)進(jìn)行調(diào)平。自動(dòng)調(diào)平流程如圖3所示。
圖3 自動(dòng)調(diào)平流程圖
PID閉環(huán)控制算法是工業(yè)控制中最常用的算法之一,P代表比例增益,實(shí)際就是放大倍數(shù)。I代表積分時(shí)間,增加控制穩(wěn)定性。D代表動(dòng)作積分,根據(jù)變化的趨勢進(jìn)行調(diào)節(jié)[4]。系統(tǒng)的自動(dòng)水平調(diào)節(jié)系統(tǒng)由傾角傳感器的輸出控制步進(jìn)電機(jī)的動(dòng)作,而步進(jìn)電機(jī)的動(dòng)作又影響了傾角傳感器的輸出,由此構(gòu)成一個(gè)閉環(huán)的系統(tǒng)。PID控制的公式如式(1)所示。
(1)
1.4 液位圖像采集模塊的選擇與設(shè)計(jì)
ARM控制器通過USB外接攝像頭,實(shí)時(shí)采集液位圖像。攝像頭選用的型號(hào)為QSC500的工業(yè)相機(jī),其性能指標(biāo)如表1所示。
表1 攝像頭性能參數(shù)
采集圖像過程要避免外界光源的干擾,將攝像頭和示液管封裝在一個(gè)暗箱里。在較細(xì)的玻璃示液管中,液面不是水平面,由于水與玻璃管內(nèi)壁的吸附作用,邊緣的液面比中間液面高出一點(diǎn),液面總體呈現(xiàn)下凹拋物面[5],在暗箱內(nèi)玻璃示液管的后端放一只平行光源,光從空氣射像凹液面會(huì)折射光,攝像頭拍攝的圖像在凹液面處會(huì)有一條黑色的凹線條,液位成像示意圖如圖4所示。
圖4 CCD成像示意圖
液位檢測過程中最重要是液位線的提取,液位圖像的識(shí)別主要包括五步:讀取液位圖像,灰度化處理,高斯濾波,邊緣檢測,液位線提取。
2.1 液位圖像的獲取
進(jìn)行液位圖像分析和處理,需要先獲取液位圖像,系統(tǒng)使用嵌入式USB數(shù)字?jǐn)z像頭采集液位圖像。OpenCV中提供了圖像采集API 函數(shù)[6]:
CvCapture* cvCreateCameraCapture( int index );
其中,index是 要使用的攝像頭索引。系統(tǒng)只有一個(gè)攝像頭,參數(shù)值取0,系統(tǒng)采集的液位圖像如圖5(a)所示。
2.2 液位圖像前期處理
由于光線、CCD鏡頭、背景等干擾的影響下,采集到的液位圖像存在一定無用的干擾信息。因此,有必要對采集到的液位圖像進(jìn)行數(shù)字處理,增強(qiáng)圖像中的有用信號(hào)[7]。對液位圖像的預(yù)處理是液位檢測的前期工作,有利于液位線的提取。
2.2.1 圖像灰度化
待檢測的液位圖像包含大量的顏色信息,這些信息會(huì)干擾液位圖像的識(shí)別,因此首先要對液位圖像進(jìn)行灰度化處理,以過濾掉與液位識(shí)別信息無關(guān)的數(shù)據(jù)。按照公式(2)中對RGB三分量進(jìn)行加權(quán)平均能得到較合理的灰度圖像。
RGB=B*0.114+G*0.587+R*0.299
(2)
這個(gè)轉(zhuǎn)換過程可以用OpenCV 中的函數(shù)來實(shí)現(xiàn),這個(gè)函數(shù)的原型為:
void cvCvtColor(const CvArr*srcCvArr*dst,int code)
其中:src—輸入的圖像;dst—輸出的圖像;code—色彩空間轉(zhuǎn)換。圖5(b)是對圖像進(jìn)行灰度化后的結(jié)果。
2.2.2 圖像濾波
液位圖像采集時(shí)易受各種環(huán)境干擾的影響,因此采集的液位圖像會(huì)出現(xiàn)噪聲,為了減少噪聲帶來的干擾,需要用到降噪濾波器對液位圖像數(shù)據(jù)處理。在圖5(b)圖像中含有各種干擾信息,系統(tǒng)采用高斯濾波的方法將其去掉。高斯濾波器是根據(jù)高斯函數(shù)的形狀來選擇權(quán)值的線性平滑濾波器,常用二維零均值離散高斯函數(shù)做平滑濾波器,函數(shù)表達(dá)式如下:
(3)
OpenCV中提供了圖像濾波函數(shù):
void cvSmooth (const CvArr*src,CvArr*dst,int smoothtype=CV_GAUSSIAN,int param1=3,int param2=0,double param3=0);
根據(jù)參數(shù)smoothtype 的不同可實(shí)現(xiàn)不同方式的濾波,系統(tǒng)使用CV_GAUSSIAN對液位圖像進(jìn)行高斯卷積,其處理結(jié)果如圖5(c)所示。
2.3 液面刻度線提取
2.3.1 邊緣檢測
液位圖像經(jīng)過前期的灰度化和濾波處理后,得到的是與液位識(shí)別信息相關(guān)的數(shù)據(jù),然后需要提取液位邊緣輪廓。系統(tǒng)采用邊緣檢測的方法提取液位邊緣輪廓,并使用Canny算法[8]來實(shí)現(xiàn)液位邊緣檢測。具體步驟是:首先平滑圖像,去除液位圖像中的噪聲;然后求梯度運(yùn)算,利用導(dǎo)數(shù)算子得到每個(gè)像素的梯度輻值|G|和方向e,即求出邊緣的強(qiáng)度及其方向:
(4)
(5)
接著對梯度進(jìn)行“非最大值抑制”, 這一步的目的是將模糊的液位邊界變得清晰;
其次使用雙閥值方法對經(jīng)過“非最大值抑后”的所有邊緣點(diǎn)處理;最后進(jìn)行邊緣連接。
OpenCV中提供了圖像邊緣檢測函數(shù):
void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 );
其中,image—單通道輸入圖像;edges—單通道存儲(chǔ)邊緣的輸出圖像;threshold1—第一個(gè)閾值;threshold2—第二個(gè)閾值;aperture— 算子內(nèi)核大?。籺hreshold1和threshold2 當(dāng)中的小閾值用來控制邊緣連接,大的閾值用來控制強(qiáng)邊緣的初始分割。其處理后的圖像如圖5(d)所示。
圖5 圖像處理過程
2.3.2 計(jì)算液位的像素高度
首先找出上下兩個(gè)標(biāo)定點(diǎn)坐標(biāo)和液面凹液面重心點(diǎn)坐標(biāo)(將凹液面圖形的重心點(diǎn)坐標(biāo)作為凹液面讀取點(diǎn)),下標(biāo)定點(diǎn)到凹液面坐標(biāo)點(diǎn)Y軸像素值之差就是示液管液位像素高度。圖6(d)中提取的液面圖形不是規(guī)則圖形,要找出不規(guī)則圖形的重心坐標(biāo)點(diǎn),先計(jì)算液面不規(guī)則圖形的矩,利用目標(biāo)所占區(qū)域的矩作為形狀描述參數(shù)。矩可以用于二值或灰度級(jí)的區(qū)域描述。對于離散強(qiáng)度圖像x(i,j),p+q階原點(diǎn)矩定義為:
(6)
其中i,j,p,q是區(qū)域點(diǎn)的坐標(biāo)(在數(shù)字圖像中的像素坐標(biāo))。令XC,YC表示區(qū)域重心的坐標(biāo),則:
(7)
(8)
M10、M01表示提取的X、Y階中心矩,M00表示不規(guī)則區(qū)域的面積。凹液面處理效果如圖6所示。
圖6 凹液面圖形重心點(diǎn)處理效果
在OpenCV中,可以很方便的計(jì)算多邊形區(qū)域的特征矩,可以使用cvGetSpatialMoment算子來計(jì)算二值圖像的矩信息。處理函數(shù)如下:
static int aoiGravityCenter(IplImage *src, CvPoint ¢er)
{
double m00, m10, m01;
CvMoments moment;
cvMoments( src, &moment, 1);// 計(jì)算多邊形三階的所有矩
m00 = cvGetSpatialMoment( &moment, 0, 0 ); //區(qū)域的面積
m10 = cvGetSpatialMoment( &moment, 1, 0 ); //從矩狀態(tài)結(jié)構(gòu)中提取 x 次空間矩
m01 = cvGetSpatialMoment( &moment, 0, 1 ); //從矩狀態(tài)結(jié)構(gòu)中提取 y次空間矩
//計(jì)算重心
center.x = (int) (m10/m00); //x軸重心坐標(biāo)
center.y = (int) (m01/m00); //y軸重心坐標(biāo)
return 0;
}
圖像處理后取得重心坐標(biāo)點(diǎn)和相應(yīng)的Y軸坐標(biāo)線的圖像如圖5(e)所示。
2.3.3 系統(tǒng)的標(biāo)定
度M,則液位的實(shí)際高度:
(8)
3.1 實(shí)驗(yàn)結(jié)果
數(shù)字USB攝像頭采集的圖像像素為1 600×1 200b,示液管的高度為L=200.00mm,通過openCV中cvResize算子將圖像高度分辨率N=2 000,數(shù)字USB攝像頭支柱距示液管中心距離為150mm,攝像頭中心線下測距離暗箱底部100mm,在Linux平臺(tái)下,對10幅計(jì)量示液管圖像進(jìn)行了測試,并與相應(yīng)的人工讀取游標(biāo)卡尺的值進(jìn)行對比,最終結(jié)果統(tǒng)計(jì)如表2所示。
表2 圖像識(shí)別與人工讀數(shù)比較
3.2 誤差分析
液位圖像識(shí)別過程中造成測量誤差主要由以下幾個(gè)原因:
(1)圖像畸變產(chǎn)生的誤差 圖像的畸變主要包括拍攝的液位圖像時(shí)產(chǎn)生的幾何畸變。
(2)玻璃液位計(jì)傾斜帶來的誤差 由于地面不平會(huì)造成玻璃液位計(jì)的傾斜,系統(tǒng)中使用自動(dòng)調(diào)平來減小玻璃液位計(jì)傾斜帶來的誤差。
(3)攝像頭和凹液面的距離隨著液位的改變而變化帶來的誤差 由于液位會(huì)上下浮動(dòng),距離攝像頭的距離會(huì)發(fā)生改變,距離攝像頭水平面的距離越大,帶來的誤差會(huì)隨之增大。因此測量時(shí)盡量縮短玻璃管的長度。
由表2可見,在誤差允許范圍內(nèi),圖像識(shí)別與人工讀數(shù)結(jié)果很接近,絕度誤差都在±0. 5 mm內(nèi),這驗(yàn)證了液位圖像檢測具有較高的測量精度,可以滿足液位檢測精度要求。
本文設(shè)計(jì)了一種關(guān)于標(biāo)準(zhǔn)量器液位的自動(dòng)計(jì)量的方法并測試完成,分辨率為0.1 mm,在燃油加沒機(jī)計(jì)量檢定測試中,完全能夠取代人工測試。從而克服了人工讀取液位的繁瑣、耗時(shí)以及誤差大等問題,提高了計(jì)量檢定測試的速度、效率、精度和自動(dòng)化程度。
[1] 中國計(jì)量科學(xué)研究院.標(biāo)準(zhǔn)金屬量器檢定規(guī)程[M].北京: 中國計(jì)量出版社,2005.
[2] 趙 剛,唐得剛.幾種常用的液位在線檢測方法的比較[J].中國儀器儀表,2005,(5):36-40.
[3] 張毅剛.嵌入式應(yīng)用設(shè)計(jì)[M].黑龍江:哈爾濱工業(yè)大學(xué)出版社,1997.
[4] 王 敏,秦肖臻.自動(dòng)控制原理[M].北京:北京化工出版社,2003.
[5] 胡春海.玻璃液位實(shí)時(shí)監(jiān)測系統(tǒng)的研究[J]自動(dòng)化與儀表,2000,15(2):9-11
[6] 陳勝勇,劉 盛.基于OpenCV的計(jì)算機(jī)視覺技術(shù)實(shí)現(xiàn)[M].北京:科學(xué)出版社,2008
[7] 劉治鋒.基于圖像的水位自動(dòng)檢測研究[D].南京:南京理工大學(xué),2004.
[8] 雷麗珍.數(shù)字圖像邊緣檢測方法的探討[J].測繪通報(bào),2006(3):40-42.
Development of Standard Metal Tank Liquid Level Measuring Device Using Image Recognition
Zhang Haipeng1,Zhao Buhui1,Shi Jianrong2,Xiao Hui2
(1.College of Electrical and Information Engineering, Jiangsu University ,Zhenjiang 212013,China;2.Zhenjiang Measuring and Testing Center,Zhenjiang 212132,China)
In the course of using standard metal tank for liquid metering, the traditional method of measuring the level of human-readable is inefficiency and inaccurate.Putting forward a high-precision standard metal tank level image recognition device which is mainly composed of the level adjustment and image processing,choosing S3C2440 ARM chips and Linux Embedded system as a hardware and software platform. level adjustment is implemented by measuring the inclination of tank by SCA100T axis inclinometer sensor and controlling stepper motor to automatically adjust, realizing closed-loop control; Processing the acquired liquid level image by OpenCV,including graying, filtering, edge detection, liquid extraction, and then after converting into actual level height through calibration. Experimental results show that this method can measure the level with high speed and precision, and it have a better promotional value used in fuel dispensers verification device.
standard metal tank;level adjustment;level image recognition;embedded system;OpenCV
2015-12-28;
2016-02-29。
張海鵬(1988-),南,河南信陽人,碩士研究生,主要從事嵌入式方向的研究。
趙不賄(1957-),男,江蘇鎮(zhèn)江人,教授,博士研究生導(dǎo)師,主要從事Petri網(wǎng)方向的研究。
1671-4598(2016)07-0205-03
10.16526/j.cnki.11-4762/tp.2016.07.055
TP391 文獻(xiàn)標(biāo)識(shí)碼:A