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