張忠林,吳相錦,周生龍
(1.蘭州交通大學(xué) 電子與信息工程學(xué)院,甘肅 蘭州730070;2.甘肅省圖書館,甘肅 蘭州730000)
近年來,隨著古文獻研究的不斷盛行和深入及計算機技術(shù)的不斷發(fā)展,利用計算機技術(shù)解決古文研究中的一些問題成為研究的熱點之一,其中古漢字的切分和識別是這項研究的基礎(chǔ).然而,由于古文獻大多是手寫,隨意性較大,字體多變,字之間存在重疊、粘連等情況,使得古漢字切分成為研究的難點.手寫古漢字的正確切分是提高古文字識別率的關(guān)鍵,也是對古文獻做信息處理的重要前提和保障.因此,提高古漢字的切分準(zhǔn)確率和效率具有非常重要的研究意義.
目前,對漢字的切分方法主要有基于漢字筆畫結(jié)構(gòu)切分方法、基于整體認識的切分方法、基于識別的切分方法、像素跟蹤法[1]. 基于漢字筆畫結(jié)構(gòu)切分方法一般采用筆畫連接盒的動態(tài)算法[2]和黑游程跟蹤提取筆劃算法[3],該類方法對筆畫提取有較高的要求;基于漢字整體認識的切分方法一般采用投影法[4]和連通域分析法[5],但對漢字間有粘連或重疊的情況,該方法效果較差;基于識別的切分方法通過識別的結(jié)果來判斷最終的切分點[6],該方法與后期的識別密切相關(guān),受到識別率的限制;像素跟蹤法通過跟蹤黑色像素得到漢字筆畫[7],對無粘連字符的分割取得了很好的效果,但對粘連字符分割的效果非常有限.
除了上述方法外,多種方法相融合的多步切分方法也是一種解決問題的有效途徑. 文獻[8]中介紹了一種多步分割方法.首先,利用隱馬爾可夫模型(HMM)中的Viterbi 算法將相離字符和重疊字符分割開;然后,對于粘連字符,通過尋找候選分割點,使用最短路徑法做進一步非線性切分;最后,應(yīng)用A* 算法找到全局最佳分割路徑.這種方法能夠?qū)χ丿B字符和較少筆畫粘連的字符有較好的切分效果,但對較多筆畫粘連的字符的效果不太理想.文獻[9]中介紹了一種最小加權(quán)分割路徑的方法,該方法是在投影切分的基礎(chǔ)上,把粘連字符串的中線作為初始分割路徑,然后求出最小權(quán)值,再依據(jù)最小權(quán)值找到最佳分割路徑.這種方法對字高度差別不大的兩字粘連有很好的切分準(zhǔn)確率,但對兩個字高度差別較大和多個字粘連的情況切分效果有限.文獻[10]介紹了一種粗切分與細切分相結(jié)合的切分方法,粗切分是用投影法將相離的字符切分出來,細切分是在背景細化的基礎(chǔ)上根據(jù)連通域和切分字段交疊的情況進行非相離字的切分. 筆者在前人研究的基礎(chǔ)上提出了列切分的投影循環(huán)過濾方法,字切分的投影、分段投影和頂?shù)撞抗P畫特征相結(jié)合的多步切分方法,并在此基礎(chǔ)上進行切分檢驗.
古文獻有如下特點:毛筆書寫,筆畫較粗,間隙較小,相鄰字之間存在較多的粘連,圖像質(zhì)量較差,多數(shù)文檔中有不完整的格線.針對古文獻的這些特點,筆者采用基于統(tǒng)計的投影循環(huán)過濾方法進行列切分.
令I(lǐng) 表示原圖像,I(x,y)為(x,y)點的像素值,Ip表示經(jīng)灰度化、二值化、去格線、去邊界線處理后的二值圖像,Ip(x,y)為處理后的二值圖像在(x,y)點的像素值,DX表示Ip在X 軸方向投影得到的投影圖像,DX(x,y)為投影圖像在(x,y)點的像素值. 在整個過程中涉及到的其他參數(shù)定義如下.
(1)最大過濾值Pmax:
式中:H 為圖像的高度.
(2)投影過濾公式定義如下:
式中:SUMX(x)=DX(x,y);W 為圖像的寬度;H 為圖像的高度.
首先,對Ip圖像進行X 軸方向上的統(tǒng)計投影,得到DX(x,y)和SUMX,然后計算出最大過濾值Pmax,接著開始0≤Pi≤Pmax的循環(huán),Pi為過濾值,在每一次循環(huán)結(jié)束時都要計算出該過濾值下所有列寬度的方差,待整個循環(huán)結(jié)束,計算得到每一種切分方案的所有列寬度的方差,方差最小且過濾值Pi最小時,被選定為最優(yōu)切分方案. 基于統(tǒng)計的投影循環(huán)過濾方法的具體步驟如下.
Step 1:對Ip圖像進行X 軸方向上的統(tǒng)計投影,得到DX(x,y)的SUMX和Pmax.
Step 2:從Pi等于0 開始循環(huán)過濾SUMX,直到Pi等于Pmax,并計算過濾值下列寬度的方差,存入S 數(shù)組中,S 數(shù)組的長度為Pmax+1.
Step 3:查找S 數(shù)組中最小的值,如果存在最小值有多個,選取S 數(shù)組下標(biāo)最小的值作為最優(yōu)切分過濾值.
Step 4:利用Step3 中得到的最優(yōu)過濾值,過濾SUMX,得到每一列的開始坐標(biāo)和結(jié)束坐標(biāo).
Step 5:結(jié)束.
字切分包括相離字切分和非相離字切分. 首先,采用投影切分的方法將相離字切分出來并標(biāo)記.然后,對未被切分出來的非相離字段,采用分段投影切分法和頂?shù)撞抗P畫特征切分法相結(jié)合的方法進行切分,并在切分完成后采用上下文檢驗的方法進行切分檢驗.
首先,對每一列進行Y 軸方向上的投影,把白色像素點的位置作為切分點. 兩個切分點之間如果沒有黑色像素點,那么這兩個切分點之間的部分稱為間隔,否則稱為字段,同時記錄上下字段間隔和字段高度.其次,統(tǒng)計字高度.由于漢字是方塊字,一般情況下漢字的寬度和高度相差不大,根據(jù)漢字的這一特點,只統(tǒng)計字段高度在列寬度左右一定范圍內(nèi)的字段,經(jīng)實驗得出這個范圍一般在Ri±Ri×0.15 內(nèi),Ri表示第i 列寬度.最后,根據(jù)統(tǒng)計得到的平均字段高度、字段間隔、字段高度,對較小的字段進行合并.合并遵循以下原則:(1)最近原則;(2)合并后的字高度較小原則. 至此,相離的字能夠正確分離出來.
分段投影是對字段的前Wi/2 和后Wi/2 分別做Y 軸方向上的投影,其中Wi為字段寬度,i 是字段序號.然后,在每一個投影數(shù)組中對于每兩個字找到一個分割點或分割范圍,例如,對于一個由兩個字組成的字段,在前Wi/2 的投影數(shù)組中找到的分割范圍是[Yi1,Yi2],其中,Yi1,Yi2表示Y 軸上的相對縱坐標(biāo),且P +- (λ ×)≤Yi1≤Yi2≤P++(λ×),P 表示在此字段中,要分割的兩個字中第一個字與它之前字的分割點的相對縱坐標(biāo).
最后,根據(jù)找出的兩組分割范圍分析出分割點.由于,從上向下分析非相離字重疊、粘連部分的像素,在重疊、粘連部分的一定范圍內(nèi),統(tǒng)計每一行的黑色像素個數(shù)并找到黑色像素個數(shù)走勢的轉(zhuǎn)折點.根據(jù)此轉(zhuǎn)折點即可在兩組分割范圍內(nèi)找到一個切分點,從而對重疊、粘連字進行切分.如果只能找到前Wi/2 對映的分割范圍,就在這一組坐標(biāo)范圍內(nèi)去找后Wi/2 中黑色像素走勢的轉(zhuǎn)折點,并把此轉(zhuǎn)折點作為切分點;如果在前后數(shù)組中都能找出分割范圍,這兩組分割范圍肯定沒有交叉,就在兩組分割范圍中間的部分,找出轉(zhuǎn)折點并把它作為切分點;如果前后數(shù)組中都沒能找出分割范圍,就在整個字段的投影中,在要分割的字的偏移量范圍內(nèi)找出轉(zhuǎn)折點并把它作為切分點. 具體示例如圖1 所示.第三字的分割范圍.最后,在分割范圍內(nèi)找出黑色像素個數(shù)走勢的轉(zhuǎn)折點從而得到分割點并對字段進行切分.分段投影切分具體步驟如下.
Step2:如果hi≤+λ ×認為是單字,hi表示字段的高度,添加到單字向量中,結(jié)束.
Step 3:如果hi>+λ ×,認為字段中包括m 個單字,其中,
式中:Round()是四舍五入函數(shù),m = 1. 5,2,2.5,….
Step 4:對字段進行前Wi/2 和后Wi/2 投影,并獲得投影數(shù)組F_Array、B_Array.
圖1 分段投影Fig.1 Piecewise projection
Step 5:如果m =Round(m),在[Pj+-(λ×,Pj++(λ×)](j≤m-2)范圍內(nèi)利用F_Array、B_Array 數(shù)組找到分割范圍,獲取每兩個字的切分點.
Step 6:如果m <Round(m),在[Pj+-(λ×,Pj+/2 +(λ×)],j≤m-2 的范圍內(nèi),利用F_Array、B_Array 數(shù)組找到分割范圍,獲取前半個字與一個單字的切分點.
Step 7:根據(jù)m 是否為整數(shù)進行上下文合并.
Step 8:循環(huán)步驟2 ~8 到所有字段均被處理.
在Pj+-(λ ×)≤Yi≤Pj++(λ ×)范圍內(nèi)對前后Wi/2 的投影進行分析,可發(fā)現(xiàn)在前Wi/2 投影中有三段白色像素范圍,這里稱之為候選分割范圍,如圖1 中數(shù)字所示,后Wi/2 投影中沒有候選分割范圍.然而,如果在第二個候選分割范圍內(nèi)找分割點,就使的第一個字的高度太大而第二個的高度太小,且都與有很大的偏差,不符合漢字高度的一般規(guī)律;如果在第一個候選分割范圍內(nèi)找分割點就使得兩個字的高度與平均高度相當(dāng),故選擇第一個候選分割范圍作為前兩個字的分割范圍.第二個字與第三個字之間只有一個候選分割范圍,且在此候選分割范圍內(nèi)的分割點不會使兩個字的高度相對于平均高度有太大偏差,所以選擇第三個候選分割范圍作為第二個與
因分段投影中采用直線切分,會使有些筆畫的一部分被分割到與它相鄰的字的像素數(shù)組中,頂?shù)撞抗P畫特征切分就是把錯誤分割的部分挖取出來并把它放在應(yīng)該放的位置上.
首先,對采用分段投影切分出來的單字,讀取頂部第一行和底部第一行即最后一行的像素并記錄黑色像素的位置;然后,對相連的黑色像素進行合并,并記錄合并后的黑色像素點集的起始位置、結(jié)束位置;第三,采用像素跟蹤法跟蹤每一個黑色像素點集,得到它對映的筆畫并判斷出筆畫的類型(橫、豎、撇、捺、點);最后,根據(jù)漢字頂部筆畫和底部筆畫的類型及對應(yīng)關(guān)系,判斷是過度切分還是切分不足.頂部筆畫特征切分的判斷依據(jù)是通過分析大量分段投影切分后出現(xiàn)的錯誤切分結(jié)果得到的,具體如下:
(1)如果是“點”,判斷它的下面是否有“橫”或類似“橫”的部首,如,“寶”字的點下面被認為是有橫的.
(2)如果只有一個“撇”,判斷在它的中間位置是否有與之相連的“橫”或“豎”以及在它的結(jié)束位置是否有與之相連的“豎”,例如:“有”,“作”等.
(3)如果有“撇”和“捺”,在字的上部一般是先“捺”后“撇”的順序,如:“尊”.
(4)如果只有“捺”,判斷與之相交的筆畫是否有“橫”,例如:“戈”,“成”等.
(5)如果是“豎”,則在α ×hi范圍內(nèi)判斷其連通性,α 表示“豎”的連通性參數(shù),可根據(jù)測試實驗數(shù)據(jù)得出,本文取0.3.
(6)如果是“橫”,則在β ×hi范圍內(nèi)判斷其連通性,β 表示“橫”的連通性參數(shù),可根據(jù)測試實驗數(shù)據(jù)得出,本文取0.2,如果不連通,判斷在它的下面是否還有“橫”,例如:“三”.
下部分筆畫的判斷與上述六條規(guī)則相似,不同在于當(dāng)同時有“撇”“捺”時一般“撇”在前“捺”在后.
判斷出某一筆畫屬于哪個字后,挖取、合并即可,切分效果如圖2 所示.
圖2 頂?shù)撞抗P畫特征切分Fig.2 Segmentation method of strokes features at top and bottom
漢字是方塊字,字的高度和寬度基本相同是漢字的一大特性.根據(jù)漢字的這一特性,筆者提出了上下文相結(jié)合的切分檢驗方法. 首先,計算第K,K+1 個字的高寬比Sck、Sck+1,并排除是特殊字的情況,如“一”. 然后,判斷Sck是否滿足(1 -ζ)≤Sck≤(1 +σ);ζ,σ 是高寬比的偏移因子,通過大量測試得到,如果這兩個字都不滿足上述條件,且一個字的Sck比1 -ζ 小,而另外一個字的Sck比1 +σ 大,則繼續(xù)檢驗第K +2,K +3,…,K+n 個字,直到第K + n 個字滿足Sck的范圍要求.第三,把從第K 到第K+n -1 的字進行合并,并調(diào)整分段投影中λ 的值使得頂?shù)撞抗P畫特征切分.
實驗的運行環(huán)境如下:①硬件環(huán)境,Intel(R)Corei5/2.5GHZ/RAM4GB;②軟件開發(fā)環(huán)境,java編程語言.實驗數(shù)據(jù)主要來自《四庫全書》提要部分的10 張掃描圖像,因四庫全書分為不同的閣,閣與閣之間相同內(nèi)容部分的書寫通常是不同的人完成,這些數(shù)據(jù)作為實驗數(shù)據(jù)也能充分說明不同風(fēng)格的書寫方式對實驗的成功率具有一定的影響.下面以文津閣和文淵閣的圖像為例說明實驗的結(jié)果,切分效果如圖3 所示.
圖3 列切分Fig.3 Text line segmentation
列切分的準(zhǔn)確率主要受不完整的格線、圖像的傾斜等因素影響.列切分的準(zhǔn)確率定義如下:
式中:w,h 分別為合并后的字符段的寬度和高度.最后,用新的高度偏移量λ 再次進行分段投影和
在對文津閣和文淵閣的圖像做列切分時,所有的列都能被正確切分出來,切分效果令人驚喜.單純的投影方法對傾斜的圖像或有短列的情況下進行列切分的效果不是很好,而采用本文算法能夠適當(dāng)?shù)脑黾幼煮w黑色像素的比例,減小其它因素的影響,實現(xiàn)列的正確切分.
古漢字切分結(jié)果的優(yōu)劣不能單從正確率來判斷,對于一些字,雖然字的個別筆畫的小部分被錯誤分割,但對它后期的識別以及其它的處理影響不是太大,例如,“中”,有些人會把豎寫的很長,在切分時,豎的小部分可能被錯誤分割到它的相鄰字A 上,此時,如果對A 造成的影響大,把A 劃分到錯誤切分范圍內(nèi),把“中”劃分到微錯切分準(zhǔn)確范圍內(nèi),對于正確切分率和微錯切分準(zhǔn)確率的定義如下:
在實驗中,選擇文獻[10]中的算法作為比較算法.并對四庫全書文津閣和文淵閣的10 張圖像(共143 列,2 315 個漢字)做統(tǒng)計,共計用時16.53 s.字切分結(jié)果如表1 所示. 從表1 可以看出,本文算法在切分準(zhǔn)確率和微錯誤切分準(zhǔn)確率都提高了將近5 個百分點.從圖4 可以看出,一些存在重疊、粘連的漢字也能被正確切分出來.實驗結(jié)果表明,本文算法對古代手寫漢字的切分有比較好的效果.
表1 字切分結(jié)果Tab.1 The results of Chinese character segmentation
圖4 切分效果Fig.4 Segmentation effect
古漢字切分是古文獻電子化及研究的關(guān)鍵技術(shù)之一,且對手寫古漢字的正確高效切分顯得尤為重要.筆者采用多種方法相結(jié)合的多步切分方法,取得了良好的切分效果.但是,也存在著一些問題,例如,當(dāng)兩個字的粘連筆畫長度非常大時只能正確切分出一個字或一個微錯字,這時就顯得效率不高;當(dāng)一列文字中夾雜這一些小字時,切分檢驗部分會把這個小字認為是一個錯誤合并的字段,從而把這個小字切分并用上下字合并,進而造成上下字的錯誤,檢查出這個字本身是小字還是錯誤合并的字是解決這個問題的關(guān)鍵.
[1] 高彥宇,楊揚. 無約束手寫體漢字切分方法綜述[J]. 計算機工程,2004,30(5):144 -146.
[2] 王宏志,姜昱明. 基于筆劃包圍盒的脫機手寫體漢字分割算法[J]. 計算機工程與設(shè)計,2005,26(3):803 -806.
[3] 王嶸,丁曉青,劉長松. 基于筆劃合并的手寫體信函地址漢字切分識別[J]. 清華大學(xué)學(xué)報(自然科學(xué)版),2004,44(4):498 -502.
[4] LU Yi. Machine printed character segmentation-An overview[J].Pattern Recognition,1995,28(1):67-80.
[5] LU Yi,SHRIDHAR M. Character segmentation in handwritten words-An overview[J]. Pattern Recognition. 1996,29(1):77 -96.
[6] LIU Chenglin,KOGA M,F(xiàn)UJISAWA H. Lexicondriven segmentation and recognition of handwritten character strings for japanese address reading[J].IEEE Trans Pattern Anal Mach Intell,2002,24(11):1425 -1437.
[7] 邵潔,成瑜. 關(guān)于手寫漢字切分方法的思考[J].計算機技術(shù)與發(fā)展,2006,16(6):184 -186,190.
[8] 馬瑞,楊靜宇. 一種有效的手寫漢字多步分割方法[J]. 中 國 圖 象 圖 形 學(xué) 報,2007,12 (11):2062-2067.
[9] 周雙飛,劉純平,柳恭,等. 最小加權(quán)分割路徑的古籍手寫漢字多步切分方法[J]. 小型微型計算機系統(tǒng),2012,33(3):614 -620.
[10]倪恩志,蔣旻雋,周昌樂. 古代漢字文獻切分研究[J]. 計算機工程與應(yīng)用,2013,49(2):29 -33,38.