郭 爽
(電子科技大學(xué) 物理電子學(xué)院,四川 成都 610054)
數(shù)字儀表具有高精度、方便讀取、容易操作等優(yōu)點(diǎn),從而廣泛應(yīng)用于工業(yè)、設(shè)備顯示和檢測(cè)等領(lǐng)域,已經(jīng)成為國(guó)內(nèi)各種儀表的發(fā)展趨勢(shì)。利用數(shù)字圖像處理技術(shù)和識(shí)別技術(shù)可以實(shí)現(xiàn)數(shù)顯儀表的自動(dòng)識(shí)別,不僅可以提高工作效率,同時(shí)也能確保采集到的數(shù)據(jù)的準(zhǔn)確率[1-6]。
利用計(jì)算機(jī)視覺函數(shù)庫 OpenCV,編寫 C++語言程序?qū)崿F(xiàn)對(duì)七段數(shù)碼管式出租車計(jì)價(jià)器的自動(dòng)識(shí)別。OpenCV是 Intel開源計(jì)算機(jī)視覺庫,全名為Open Source Computer Vision Library,它由一系列C函數(shù)和少量C++類構(gòu)成,包括300多種用于數(shù)字圖像處理的C或C++程序,該函數(shù)庫的最大特點(diǎn)是實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法,具有很好的矩陣運(yùn)算和圖像處理能力,并且在 VC開發(fā)環(huán)境上可以直接調(diào)用其庫函數(shù),極大地簡(jiǎn)化了編程[7-8]。算法流程主要包括圖像預(yù)處理、字符分割和字符識(shí)別3個(gè)過程。
待識(shí)別的目標(biāo)圖像在由攝像頭采集的過程中,會(huì)受到實(shí)際采集環(huán)境以及攝像頭與目標(biāo)圖像的距離和角度等因素的影響,最終傳輸?shù)接?jì)算機(jī)的圖像可能存在模糊和噪聲缺陷[6,9],這些缺陷會(huì)影響到字符的正確分割和識(shí)別,所以在對(duì)圖像進(jìn)行字符分割和識(shí)別之前,需要對(duì)圖像進(jìn)行預(yù)處理操作。預(yù)處理的主要目的是突出給定圖像中的某些信息,消弱或除去不需要的信息。從而使得圖像畫面清晰,邊緣明顯,以便提取特征進(jìn)行識(shí)別[10]。預(yù)處理結(jié)果的好壞直接影響到后續(xù)圖像的分割和識(shí)別的準(zhǔn)確率。預(yù)處理流程圖如圖1所示。
圖1 預(yù)處理流程
攝像頭采集到的圖像是含有大量顏色信息的彩色圖像,不利于后續(xù)圖像的分割和識(shí)別,而且彩色圖像的存儲(chǔ)空間較大,因此有必要進(jìn)行灰度轉(zhuǎn)換。圖像的灰度轉(zhuǎn)換就是去除圖像中的彩色信息,只包含亮度信息[8]。程序中利用 OpenCV中的顏色空間轉(zhuǎn)換函數(shù) cvCvtColor,可以將原始載入的彩色圖像轉(zhuǎn)換為灰度圖像。
由于圖像在采集過程中會(huì)受到噪聲的干擾,所以必須對(duì)圖像進(jìn)行一次中值濾波平滑處理來減少噪聲,程序中采用了 cvSmooth函數(shù)實(shí)現(xiàn)中值濾波平滑,從而平滑掉了圖像采集和傳輸過程中形成的噪聲和區(qū)域模糊,保持圖像輪廓清晰。
圖像主要由物體的圖案和背景組成,采用二值化處理可以從背景中分割出物體的圖像[1]。經(jīng)過二值化處理后,即把原來的由256個(gè)值表示的灰度圖轉(zhuǎn)變?yōu)橹挥?(全黑)和255(全白)兩個(gè)亮度值。在圖像二值化過程中,關(guān)鍵的一步是確定一個(gè)閾值,根據(jù)這個(gè)閾值可以將圖像總目標(biāo)從背景中分割出來。文中使用了利用整幅圖像的信息求出圖像最優(yōu)閾值的全局閾值法中的大律法(OTSU)來得到灰度圖像的變換閾值[7],調(diào)用的函數(shù)是 cvThreshold。cvThreshold是OpenCV庫中的一個(gè)函數(shù),它的典型應(yīng)用是對(duì)灰度圖像進(jìn)行閾值操作得到二值圖像[8]。
為了便于字符分隔和提高字符識(shí)別的準(zhǔn)確率,對(duì)經(jīng)過二值化后的圖像進(jìn)行二次中值濾波平滑處理。
二值化后的圖像會(huì)存在一些大噪聲,采用數(shù)學(xué)形態(tài)學(xué)開運(yùn)算 cvMorphologyEx函數(shù)可以去除圖像中存在的噪聲點(diǎn)。數(shù)學(xué)形態(tài)學(xué)是圖像處理技術(shù)中的一種新方法[5]。其基本思想是利用具有一定形態(tài)的結(jié)構(gòu)元素提取圖像中的對(duì)應(yīng)性狀,從而達(dá)到識(shí)別圖像的目的[6,8]。
以上這些圖像預(yù)處理為后續(xù)的數(shù)字字符的分割和識(shí)別打下了良好的基礎(chǔ)。另外,程序中多次調(diào)用了OpenCV中其他5個(gè)庫函數(shù):圖像載入函數(shù)、窗口定義函數(shù)、圖像顯示函數(shù)、圖像保存函數(shù)以及圖像銷毀函數(shù)。
采集到圖像是由多個(gè)字符組成的,因此要將這些字符分割開才能進(jìn)行識(shí)別。在分割時(shí)需要進(jìn)行歸一化,其目的是消除數(shù)碼管在攝像頭上所成像的尺寸不一而導(dǎo)致的模板和待識(shí)別數(shù)字在尺寸上的偏差。程序中將源圖像歸一化為 60×80。采用投影法對(duì)目標(biāo)圖像中的數(shù)字字符進(jìn)行分割,以精確定位出每個(gè)字符[4]。在進(jìn)行切割之前,需要將圖像進(jìn)行水平和垂直投影,程序中的垂直投影實(shí)現(xiàn)方法是先計(jì)算出每一列上黑點(diǎn)的數(shù)目,然后在投影圖上畫出相同數(shù)目的白點(diǎn)數(shù)目,水平投影與此類似。根據(jù)字符投影可以判斷出每個(gè)數(shù)字的上下和左右邊緣,然后再進(jìn)行切割。
字符圖像識(shí)別的目就是利用圖像處理和識(shí)別技術(shù)對(duì)數(shù)碼管顯示的數(shù)字字符進(jìn)行識(shí)別。程序中分別實(shí)現(xiàn)了穿線識(shí)別和模板匹配識(shí)別兩種方法。
穿線識(shí)別法主要是利用7段數(shù)碼管的特征進(jìn)行識(shí)別的,如圖 2所示的穿線法示意圖,通過提取7個(gè)顯示段的特征來判斷實(shí)際顯示的字符。7段數(shù)碼管由ABCDEFG7個(gè)顯示段組成,每個(gè)段的粗細(xì)和長(zhǎng)短基本一致且都是垂直或水平的顯示段。
圖2 穿線法示意
首先,對(duì)字符做平行于水平方向的分割線line1和line2,將字符水平均勻分割成3部分,每一部分從左到右進(jìn)行掃描,如果其中的某一部分存在筆段,就將其記為“1”,否則記為“0”。這一過程用于檢測(cè)DEFG是否存在筆段;其次,對(duì)字符做垂直于水平方向的平分線line3,將字符垂直平均分割成兩部分,從上到下掃描,如果其中的某一部分存在筆段,就將其記為“1”,否則記為“0”,該過程用于檢測(cè) ABC是否存在筆段;最后,綜合以上兩步得到的標(biāo)記筆段,對(duì)照表1所示的數(shù)碼管數(shù)字譯碼表,得出符合該特征的數(shù)字[2-3]。
表1 數(shù)碼管數(shù)字譯碼
模板匹配法是比較常用的數(shù)字識(shí)別方法,待識(shí)別的字符是0到9十個(gè)數(shù)字。提供了一種簡(jiǎn)單有效的模板匹配識(shí)別法,對(duì)分割后的每一個(gè)圖像依次進(jìn)行識(shí)別,將結(jié)果輸出到控制臺(tái)并保存到指定文件中。自定義的模板匹配函數(shù)的程序算法為:一張圖片由很多點(diǎn)組成,每個(gè)點(diǎn)就是一個(gè)像素,預(yù)處理過程中將彩色圖像轉(zhuǎn)成灰度圖像,即是把圖片每個(gè)像素變成 0-255之間的某個(gè)數(shù),經(jīng)過二值化以后,每個(gè)像素點(diǎn)變成 0或者 255。歸一化后,每個(gè)數(shù)字的大小被歸一化到 80×60,從而共有 4 800個(gè)點(diǎn)。然后這4 800個(gè)點(diǎn)對(duì)應(yīng)相減取絕對(duì)值累加起來后,差值最小的模板數(shù)字就是所要識(shí)別的結(jié)果。程序中定義兩個(gè)IplImage類型的指針數(shù)組,分別用于存儲(chǔ)分割后的圖像和載入模板,以及一個(gè)簡(jiǎn)單的整形數(shù)組用于存儲(chǔ)模板匹配結(jié)果,其中,IplImage是OpenCV中定義的最基本的結(jié)構(gòu)體,它將圖像描述為一系列屬性和指向圖像相關(guān)數(shù)據(jù)的指針集合,包含了圖像的全部信息。
根據(jù)以上所述原理和開發(fā)步驟,在 Windows 7平臺(tái)下利用VC++6.0編程實(shí)現(xiàn)算法,分別采用了穿線和模板匹配兩種識(shí)別方法,程序中載入如圖3所示的七段數(shù)碼管式出租車計(jì)價(jià)器作為原始圖像,圖4和圖 5分別為二值化和字符分割后的圖像。程序輸出結(jié)果顯示在控制臺(tái)上為單個(gè)數(shù)字,以數(shù)組元素的形式存儲(chǔ),如a[0] = 6,a[1]=6,a[2]=“*”,a[3]=0,其中“*”號(hào)代表小數(shù)點(diǎn)。在編程實(shí)現(xiàn)過程中,發(fā)現(xiàn)如果在前期預(yù)處理過程中對(duì)字符進(jìn)行傾斜校正,那么穿線法的識(shí)別結(jié)果準(zhǔn)確率較高,而對(duì)于模板匹配法,由于是對(duì)分割后的單個(gè)字符進(jìn)行識(shí)別,即使沒有進(jìn)行傾斜校正,仍能得到準(zhǔn)確的識(shí)別結(jié)果。
圖3 原始彩色圖像
圖4 二值化后圖像
圖5 分割后的圖像
通過利用C++編程語言和OpenCV中的庫函數(shù)實(shí)現(xiàn)了對(duì)七段數(shù)碼管式出租車計(jì)價(jià)器的數(shù)字字符的識(shí)別,大大簡(jiǎn)化了程序代碼。在對(duì)出粗車計(jì)價(jià)器識(shí)別過程中發(fā)現(xiàn),穿線法無法識(shí)別出正確的結(jié)果,但是模板匹配法卻能得到準(zhǔn)確的結(jié)果,主要原因是由于預(yù)處理過程中沒有進(jìn)行傾斜校正,導(dǎo)致前一個(gè)數(shù)字會(huì)影響到下一個(gè)數(shù)字的識(shí)別,由于模板匹配法是對(duì)逐個(gè)字符進(jìn)行識(shí)別,從而識(shí)別結(jié)果沒有受到數(shù)字傾斜的影響。在后續(xù)的工作中,要進(jìn)一步優(yōu)化和完善字符分割和識(shí)別算法,以降低算法的時(shí)間和空間復(fù)雜度,提高識(shí)別效率。
[1] 吳留生,陳家新,黎蔚.基于 Niblack的手掌經(jīng)脈圖像二值化技術(shù)研究[J].通信技術(shù),2010,43(01):112-114.
[2] 王蓉芳,汪仁煌.基于數(shù)碼管機(jī)器視覺的小數(shù)點(diǎn)識(shí)別[J].電子測(cè)試,2008(11):17-20.
[3] 何洪波.數(shù)碼管的計(jì)算機(jī)識(shí)別[D].廣州:華南理工大學(xué),2004.
[4] 劉丹,穆林麗,余曉鍔.一種七段數(shù)碼管式醫(yī)用儀表的自動(dòng)識(shí)別方法[J].科學(xué)技術(shù)與工程,2010,16(16):4037-4039.
[5] 姬寶金,呂建平.基于梯度重建與形態(tài)學(xué)分水嶺算法的圖像分割[J].通信技術(shù),2009,42(05):98-102.
[6] 田自君.數(shù)顯儀表數(shù)字字符快速識(shí)別系統(tǒng)的研究[D].成都:電子科技大學(xué),2007.
[7] 趙洋.基于 OpenCV的網(wǎng)上閱卷技術(shù)的研究[D].山東:山東大學(xué),2009.
[8] 詹群峰.基于OpenCV的視頻道路車輛檢測(cè)與跟蹤[D].廈門:廈門大學(xué),2009.
[9] 王曉雪,蘇杏麗.數(shù)字圖像處理在車牌識(shí)別中的應(yīng)用[J].自動(dòng)化儀表,2010, 31(07):22-28.
[10] 張好,王士林,李生紅.基于內(nèi)容圖像分類技術(shù)中的特征分析[J].信息安全與通信保密,2006(11):74-76.