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