于萬波,李耀升
(大連大學信息工程學院,大連116000)
圖像識別技術應用廣泛,近些年成為研究熱點[1-4]。而圖像的特征提取與匹配則是圖像識別的關鍵步驟,關于圖像的特征提取,近年來涌現(xiàn)出大量的特征提取與識別算法,圖像特征的種類也是十分的豐富;而各種語言的手寫字識別,作為一種較為特別的圖像識別,也成為了研究熱點,尤其是以手寫漢字做為研究對象進行的研究,如:Wang Yanwei 等人提出一種在分類前重新訓練數(shù)據(jù)集的方法,訓練集由位于分類邊界附近的樣本構成,并在HCL2000 和HCD 漢字數(shù)據(jù)庫上進行檢測,解決了對于自由筆跡,字符形狀和外觀樣本的變異性較大,不能嚴格滿足高斯分布,導致識別不準的問題[5]。Gao Xue 等人提出了一種新的用于手寫漢字識別的局部線性判別分析(LDA)方法,解決了傳統(tǒng)的LDA算法在用于無約束手寫漢字識別時,容易出現(xiàn)類分離問題和多模式樣本分布問題[6]。Bi Ning 等人將有效卷積神經網絡(CNN)模型GoogLeNet 用于手寫漢字識別,并進行了一些調整,實驗結果具有很高的準確性[7]。Chen Guang 等人提出了一種新的基于非線性歸一化的增強加權動態(tài)網格的特征提取方法,改善了手寫漢字識別系統(tǒng)的性能,具有很好的識別效果[8]。關于手寫漢字圖像特征提取的方面,具有一定的研究意義與價值。
本文研究的是手寫漢字圖像的特征提取,以矩陣的形式表述圖像特征,將從迭代和非迭代兩個方面入手,首先以迭代法作為切入點,基于迭代理論,利用迭代函數(shù)系統(tǒng)的特性,構造相關動力系統(tǒng),生成迭代序列,對這些迭代序列進行分析研究并構造圖像特征矩陣,從中獲取一定的規(guī)律并用于手寫漢字圖像的識別探究。另外通過構造三維矩陣序列圖像,獲取手寫漢字圖像的特征矩陣,并以此實現(xiàn)手寫漢字圖像的匹配與識別。實驗探究使用的數(shù)據(jù)集為HCL2000 漢字庫,使用MATLAB 實現(xiàn)實驗仿真。
依據(jù)HCL2000 漢字庫的數(shù)據(jù)特性可知,HCL2000漢字數(shù)據(jù)圖像按書寫者以文件形式存放。每個HCL文件包含一個512 字節(jié)的文件頭,記錄了該文件的作者等相關信息。各手寫漢字按區(qū)位碼的順序存放,每個漢字圖像為64×64 的點陣,在存儲過程中按比特存儲,壓縮為512 字節(jié)。所以,在獲取圖像數(shù)據(jù)的時候,需要對HCL 文件中的漢字數(shù)據(jù)進行解壓,使其還原為64×64 的點陣。在這里,根據(jù)北京郵電大學模式識別實驗室給出的HCL 文件讀取方法,使用MATLAB 進行實現(xiàn),從而讀取出指定的手寫漢字圖像。每個圖像的灰度值大約有40-60 個,圖1、圖2 所示為數(shù)據(jù)集中第8個人、第12 個人所書寫的第31-60 個漢字。
圖1 第8個人書寫的第31-60個漢字
圖2 第12個人書寫的第31-60個漢字
由于圖像的本質就是一個矩陣,所以直接用漢字圖像矩陣代入corrcoef 函數(shù)計算相關系數(shù),通過實驗發(fā)現(xiàn),直接計算出的相關系數(shù)不能很好的表述兩幅圖像的相關性;所以在此不能直接使用圖像矩陣數(shù)據(jù)進行相關系數(shù)的計算。
接下來我們將嘗試利用迭代函數(shù)系統(tǒng)進行手寫漢字圖像的特征矩陣的提取與識別檢測。
構造的如式(1)所示動力系統(tǒng):
其中p1、p2 隨機給定(p1=p2=0.01*rand)。
讀取手寫漢字數(shù)據(jù),解壓并存儲在二維數(shù)組中;確定實驗參數(shù)并進行迭代運算多次,保存、輸出迭代軌跡序列矩陣T;
通過實驗分析發(fā)現(xiàn):由于手寫漢字圖像存在大面積的平坦區(qū)域,從而導致動力系統(tǒng)的混沌特性較差,系統(tǒng)容易收斂,所以當初值(u,v)比較少,迭代次數(shù)較多(m 較大)時得到的序列點較少,不能獲得較好的迭代軌跡序列。
接下來,我們考慮對漢字圖像進行一些相關處理,并對系統(tǒng)進行改進,以此來提高實驗效果。
(1)給圖像加斜面
根據(jù)圖像的大小,初始化一個相同大小的斜面矩陣,加在目標圖像矩陣上,使其整體傾斜,減小其字體邊緣部分的像素差,效果如圖3 所示。
圖3 加斜面之后的漢字圖像與原圖像對比
使用加了斜面的圖像矩陣進行迭代演算,獲取迭代序列并記錄保存,分析迭代序列數(shù)據(jù),進行識別計算,其實驗效果有了一定的提升。
(2)拉伸圖像,使其增高
接著來嘗試,將目標圖像的字體拉伸,擴大其輪廓,使其字跡加粗,減小空白區(qū)域,并對字體部分進行加高處理(思路源自刻章)[9]。
通過循環(huán),將原圖像素點依次按照左、下、右、上的次序進行多次位移,將每次位移之后的圖像依次疊加起來,從而起到拓寬圖像字體并使其增高的效果,如圖4 所示。
圖4 移位疊加操后的圖像與原圖像對比
最后將疊加后的圖像放大至256×256 大小,然后對圖像矩陣進行歸一化處理,并使其像素值保持在1到255 之間,使用處理后的圖像與三角函數(shù)迭代式共同構造動力系統(tǒng),進行下一步實驗操作。
通過實驗發(fā)現(xiàn),直接用三角函數(shù)表達式與圖像函數(shù)構造動力系統(tǒng)來實驗,效果并不是很好,用三角函數(shù)表達式作為迭代式,迭代賦值構造迭代矩陣T,用矩陣T 與圖像構造動力系統(tǒng),這樣效果提升很多。然后我們考慮多個特征綜合來進行識別。
選取多個人書寫的同一個漢字,分別進行迭代實驗,將每次的特征矩陣綜合起來作為這一漢字的綜合特征,然后與目標圖像的特征矩陣進行相關系數(shù)的計算,發(fā)現(xiàn)實驗效果有所提升。
在這里,我們選取數(shù)據(jù)集中前10 個人的第2、3、4個漢字作為樣本數(shù)據(jù),分別構造出這三個漢字的綜合特征矩陣,并與第10 個人所書寫的前六個漢字的特征矩陣進行相關系數(shù)的計算;實驗發(fā)現(xiàn),其同一個漢字的相關系數(shù)最高能達到0.35 左右,不同漢字的相關系數(shù)普遍在0.2 以內,這能較好的體現(xiàn)兩幅漢字圖像的相關性(例如給定閾值0.3,規(guī)定大于0.3 的為相同漢字,小于0.3 的為不同漢字)。
具體實驗數(shù)據(jù)如表1 所示。
表1 多個漢字間的相關系數(shù)
接下來,我們嘗試擴大樣本數(shù)據(jù),設計識別率計算算法,進行識別率相關探究。
改進迭代方法,并設計識別率計算算法,提取多個人書寫的多個漢字圖像作為樣本數(shù)據(jù),同一組為不同人寫的同一個漢字,獲取樣本數(shù)據(jù)的特征矩陣;確定每個漢字的訓練情況,構造綜合特征矩陣,并按數(shù)據(jù)集中漢字的存儲順序保存;使用樣本數(shù)據(jù)中所有漢字的特征矩陣分別與每個字的綜合特征矩陣計算相關系數(shù),判斷每個漢字所產生的多個相關系數(shù)中,最大值的位置是否與本漢字的組數(shù)一致,若一致則說明識別成功。
算法1 迭代提取圖像特征
1)將式(2)做為迭代式,循環(huán)計算,得到迭代矩陣T;
2)確定樣本數(shù)據(jù)量,依次讀取樣本中每個漢字圖像,并對其進行加斜面、移位疊加操作;
3)利用迭代矩陣T 與漢字圖像構成迭代動力系統(tǒng),提取樣本中每個漢字的特征矩陣T1,并按組別順序保存(同一個漢字為一組,分組順序與數(shù)據(jù)集中漢字排列順序一致);
4)訓練部分漢字:確定樣本數(shù)據(jù)中的每種漢字的訓練情況(選擇多幅圖像來構造這一漢字的綜合特征矩陣),將準備訓練的圖像數(shù)據(jù)循環(huán)代入迭代動力系統(tǒng)(同步驟3),得到每個漢字的綜合特征矩陣T2,按照漢字存儲的順序保存;
5)依次將樣本中所有漢字的特征矩陣與這些漢字的綜合特征矩陣進行相關系數(shù)的計算,每個漢字對應多個相關系數(shù),若使相關系數(shù)最大的那個綜和特征的位置與漢字的組數(shù)一致,則說明識別成功;
6)記錄識別成功的漢字數(shù)目,與樣本漢字總數(shù)對比,計算識別率。
我們先來提取30 個人書寫的20 個漢字,共計600個漢字圖像,每個漢字訓練10 張圖像(即用10 個人書寫的同一漢字來構造綜合特征矩陣)運行程序后,識別出421 個漢字,識別率為70.17%;每個漢字訓練20張,可識別出477 張,識別率為79.5%;若每個漢字訓練30 張(即全部訓練),可識別出600 張,識別率為100%;為了保證實驗結果的準確性,我們繼續(xù)擴大樣本數(shù)據(jù)進行實驗。實驗數(shù)據(jù)如表2 所示。
表2 擴大樣本后的實驗數(shù)據(jù)
由這些實驗結果可以說明,基于迭代的手寫漢字圖像特征矩陣提取方法確實可行,所提取的特征矩陣能較好的表述圖像之間的相關性。
由于一個手寫漢字圖像的大小為64×64,所以在這里,我們使用64 個人書寫的同一個漢字,來構成64×64×64 的三維矩陣作為樣本數(shù)據(jù),然后獲取一個人書寫的某一個漢字圖像,并對其進行一些相關處理,改變其結構使其成為64×64×64 的三維矩陣,然后與樣本中的矩陣進行相關性的計算,分析結果,進行手寫漢字的識別探究。
算法2 迭代提取三維特征矩陣
(1)獲取64 個人所書寫的同一個漢字的圖像數(shù)據(jù),并解壓為64×64 大小的矩陣;
(2)將所得的64 個64×64 矩陣糅合為64×64×64的三維矩陣,作為樣本數(shù)據(jù)并保存;
(3)獲取一個人的一個漢字圖像,并對其邊緣裁剪64 次,得到64 個64×64 的矩陣,并將其糅合為64×64×64 的三維矩陣;
(4)計算兩個三維矩陣的相關系數(shù)。
通過大量實驗結果表明,同一個漢字的相關系數(shù)大約在0.15~0.3 左右,不同漢字的相關系數(shù)基本小于0.15,初步判斷該算法可用于手寫漢字圖像識別的實際研究。
在上述算法2 的基礎上,做出一些改進,在這里我們選取30 個漢字構造三維矩陣并按漢字排列順序保存,作為樣本數(shù)據(jù),然后選取其中一個漢字圖像作為目標,得到其三維矩陣,并與30 個樣本矩陣進行相關系數(shù)的計算,若使相關系數(shù)最大的樣本數(shù)據(jù)的位置與目標漢字的位置相同則說明識別成功。
算法3 利用三維特征矩陣進行識別
(1)讀取64 個人書寫的同一漢字數(shù)據(jù),解壓糅合為64×64×64 的矩陣;
(2)重復第1 步驟30 次來獲取30 個漢字的數(shù)據(jù),將每次得到的三階矩陣存入64×64×64×30 大小的數(shù)組中去,作為樣本數(shù)據(jù);
(3)任意選擇10 個人,依次獲取其書寫的樣本中的30 的漢字數(shù)據(jù),并進行相關處理;
(4)將所得的300 個漢字分別與樣本數(shù)據(jù)中的30個漢字計算相關系數(shù),每個目標漢字可得到30 個相關系數(shù),若相關系數(shù)最大的對應的樣本漢字在數(shù)據(jù)集中的位置與目標漢字所對應的位置相同,則說明識別成功;
(5)記錄識別個數(shù),計算識別率。
下面我們來分析實驗過程,嘗試提高識別率。
為提高實驗效率,我們以30 個漢字作為樣本數(shù)據(jù),以10 個人書寫的30 個漢字作為目標數(shù)據(jù),來進行實驗,分析探究,提高識別率。
在上節(jié)實驗中,10 個人書寫的30 個漢字,識別率為80.67%。
(1)裁剪目標數(shù)據(jù)
為了讓目標漢字(64×64)與樣本數(shù)據(jù)(64×64×64)能更好的比較,在之前的算法中,我們將所獲取的目標漢字圖像進行邊緣裁剪,共裁剪64 次,將所得的64 個圖像數(shù)據(jù)糅合為與樣本同規(guī)格的數(shù)據(jù)來進行實驗比較,在這里我們從這一角度出發(fā),多次調整目標數(shù)據(jù)的裁剪參數(shù),找到識別效果最好的參數(shù),以此來提高識別率,并在此基礎上對漢字圖像進行一次預處理,對其進行移位疊加操作。
(2)對圖像進行移位疊加
算法4 移位處理后提取特征
1)打開數(shù)據(jù)集文件,讀取漢字數(shù)據(jù);
2)將漢字數(shù)據(jù)解壓為64×64 大小的矩陣;
3)初始化一個64×64 的矩陣temp,用來存放解壓后的漢字數(shù)據(jù);
4)初始化一個64×64 的矩陣tempN;
5)移位疊加,操作如下:
①將圖像矩陣數(shù)據(jù)整體左移一位,賦給新初始化的矩陣(將temp 的2 到64 列賦給tempN 的1 到63 列);
②再將原圖像矩陣依次下移、右移、上移一個點位,然后每次都行平移的矩陣賦給tempN(依次疊加);
③重復步驟1、2 多次,每次平移的點位加1。6)用疊加后的圖像進行實驗操作;
此時的識別率為85.33%;優(yōu)化實驗操作以及擴大樣本后的實驗結果如表3 所示。
表3 多組樣本的實驗數(shù)據(jù)對比
這些實驗結果說明,構造三維矩陣(序列圖像)作為漢字圖像的特征矩陣進行手寫漢字識別的方法確實可行,并且取得了較為不錯的實驗結果。
目前比較常見的脫機手寫漢字識別主要是基于深度學習技術來進行的,而關于這方面的研究也涌現(xiàn)出大量的文獻報道,本文所提出的特征提取與識別的方法,與其他方法相比,具有系統(tǒng)結構復雜度低,運算成本小,樣本數(shù)據(jù)的獲取成本低等優(yōu)點。
大多基于深度學習的方法,在獲取樣本數(shù)據(jù)的時候,需要進行大量的訓練才能達到滿意的程度,系統(tǒng)結構較為復雜,運行成本較高;我們在實驗探究過程中,通過迭代構造特征矩陣以及構造三維序列圖像矩陣等方法來獲取樣本數(shù)據(jù),一定程度上降低了系統(tǒng)結構的復雜程度和運算成本,提高了實驗效率。