曹 芳,武仲科,敖雪峰,周明全
(北京師范大學(xué) 虛擬現(xiàn)實(shí)和可視化技術(shù)研究所,北京 100875)
隨著計(jì)算機(jī)圖形圖像技術(shù)的深入發(fā)展,其應(yīng)用范圍不斷擴(kuò)大。中國(guó)傳統(tǒng)書(shū)法的展示和研究臨摹需要大量現(xiàn)有優(yōu)秀書(shū)畫(huà)作品的傳播作為基礎(chǔ),因此這些作品的電子化以及電子化后的二次開(kāi)發(fā)都意義重大,對(duì)中國(guó)優(yōu)秀傳統(tǒng)文化的繼承與發(fā)展起到重要的推進(jìn)作用。
計(jì)算機(jī)對(duì)于圖形的表示可以分為兩大類(lèi):矢量圖和位圖。位圖在表達(dá)清晰復(fù)雜的圖像信息時(shí)有著優(yōu)越的功能,但其占用大量存儲(chǔ)空間,使得應(yīng)用受到了限制。矢量圖使用圖形的元素點(diǎn)、線(xiàn)、矩形、多邊形、圓和弧線(xiàn)等表達(dá)圖形信息,而它們都是通過(guò)數(shù)學(xué)公式計(jì)算獲得的,因此便于去除多余信息,所以矢量圖形文件體積一般較小,無(wú)論放大、縮小或旋轉(zhuǎn)等不會(huì)失真。這在表達(dá)書(shū)法字筆畫(huà)問(wèn)題上有很好的借鑒作用。
隨著計(jì)算機(jī)技術(shù)的發(fā)展,大量的書(shū)法作品被掃描入計(jì)算機(jī),作為光柵圖像的文件存儲(chǔ)占用大量空間,并且在進(jìn)行變換時(shí)會(huì)產(chǎn)生失真,尤其是經(jīng)放大后,字的邊界會(huì)出現(xiàn)鋸齒狀。因此更好的方式是將它們轉(zhuǎn)化為邊界輪廓表示的矢量圖形。矢量書(shū)法字存儲(chǔ)小,可以方便快速地進(jìn)行各種變換,實(shí)現(xiàn)高質(zhì)量的顯示和輸出。同時(shí)矢量書(shū)法字便于對(duì)數(shù)字化書(shū)法文檔的搜索,書(shū)法字的識(shí)別,書(shū)法文檔的壓縮和書(shū)法學(xué)習(xí)的應(yīng)用[1]。因此其可以廣泛應(yīng)用于排版,動(dòng)畫(huà)和CAD等領(lǐng)域,具有非常好的應(yīng)用前景。
在中國(guó)書(shū)法字的相關(guān)研究中,大量華人聚集的馬來(lái)西亞,中國(guó)的香港科技大學(xué),臺(tái)灣交通大學(xué),和內(nèi)地的浙江大學(xué)等都走在業(yè)內(nèi)前列。他們的研究主要集中在傳統(tǒng)毛筆的電子化仿真模擬[2],筆跡的藝術(shù)再現(xiàn)[2],單一書(shū)法字的電子化處理,比如書(shū)法字的矢量化和矢量輪廓的平滑[3],以及書(shū)法字的數(shù)字化應(yīng)用[4]等方面,都取得了令人矚目的成績(jī)。但在書(shū)法字矢量化相關(guān)研究中,大量研究處于理論階段,實(shí)際應(yīng)用較少,因此目前市場(chǎng)上存在矢量化書(shū)法字?jǐn)?shù)目是非常少的,而且基本都是幾種古體字,應(yīng)用方式也很單一,主要是按輸入的文字來(lái)選擇不同字體。至于將其應(yīng)用于虛擬書(shū)法學(xué)習(xí)中就更少了,因此我們所做的對(duì)啟體書(shū)法字的矢量化研究的應(yīng)用前景還是很大的。
常見(jiàn)的圖像矢量化算法有:基于細(xì)化的方法包括邊界追蹤和適當(dāng)骨架法;基于非細(xì)化的方法,包括輪廓線(xiàn)的方法、基于Hough變換的方法、正交方向搜索法(OZZ)、基于網(wǎng)格模式的方法、基于游碼的方法和基于稀疏像素的方法;還有整體矢量化算法[5]。
基于非細(xì)化的矢量化算法不必先對(duì)光柵圖像中的線(xiàn)體細(xì)化,提取中心骨架線(xiàn)。其中常見(jiàn)的輪廓線(xiàn)法是首先找到線(xiàn)體的形狀,即圖線(xiàn)的邊緣輪廓信息,然后對(duì)圖線(xiàn)邊緣的輪廓信息進(jìn)行對(duì)稱(chēng)搜索,在該過(guò)程中獲得圖線(xiàn)的中軸骨架矢量,取樣和跟蹤中心軸點(diǎn)[6]。本論文探討基于非細(xì)化的輪廓線(xiàn)的矢量化算法,在尋找輪廓的過(guò)程中,附帶將漢字的每一個(gè)筆畫(huà)找出來(lái),整個(gè)過(guò)程不同于以往通過(guò)細(xì)化來(lái)提取筆畫(huà)的方式,所以稱(chēng)為非細(xì)化的矢量化方法。
啟功先生,字元伯,又作元白,北京人。是我國(guó)當(dāng)代著名的書(shū)畫(huà)家、文物鑒定家、教育家、詩(shī)人。曾在北京師范大學(xué)任教授、博導(dǎo),執(zhí)教多年,他的書(shū)畫(huà)作品流傳廣泛。啟功先生借鑒歷史上多位書(shū)法大家的精髓,加之自身深厚的文化功底,寫(xiě)得的書(shū)法字自成一體,俊秀舒展,收放自如,稱(chēng)為“啟體”,見(jiàn)圖 1。他為世人以及北京師范大學(xué)留下了寶貴的藝術(shù)財(cái)富,在國(guó)內(nèi)乃至國(guó)際上都有著深遠(yuǎn)的影響。書(shū)法是中國(guó)的國(guó)粹,是我國(guó)最古老的藝術(shù)形式,她本身具有獨(dú)一無(wú)二的表態(tài)傳神的功能,將優(yōu)秀的書(shū)法作品傳承發(fā)揚(yáng),將啟體傳承發(fā)揚(yáng),是一項(xiàng)偉大的工作。
圖1 啟功書(shū)法字
本文探討非細(xì)化的輪廓線(xiàn)的矢量化算法,首先對(duì)啟功書(shū)法字生成的位圖進(jìn)行二值化,然后邊緣檢測(cè)完成邊界跟蹤存入設(shè)定的鏈表,得到完整邊界完成矢量化,同時(shí)將字體拆分為以筆畫(huà)為單位的矢量圖。我們對(duì)3 755個(gè)一級(jí)漢字的啟功書(shū)法字完成了矢量化的工作,并對(duì)每一個(gè)字以單獨(dú)筆畫(huà)為單位,分別進(jìn)行了矢量化,制作了一個(gè)完整的包含一級(jí)漢字和每個(gè)漢字相應(yīng)的每一筆畫(huà)的啟功字庫(kù)。這一工作的完成對(duì)于常見(jiàn)啟體書(shū)法字的廣泛傳播和逐筆臨摹打下了基礎(chǔ),同時(shí)我們?cè)诒緦?shí)驗(yàn)室自主開(kāi)發(fā)的書(shū)法學(xué)習(xí)系統(tǒng)上進(jìn)行了成功的試驗(yàn)。
在下文中,第2節(jié)介紹輪廓線(xiàn)提取算法;第3節(jié)闡述筆畫(huà)分割方法;第4節(jié)描述對(duì)矢量化結(jié)果的優(yōu)化處理方法,第5節(jié)介紹建立書(shū)法字庫(kù),最后給出結(jié)果。
書(shū)法字作為光柵圖像的一個(gè)特殊性就是邊界是它最為重要的信息,本系統(tǒng)在取得漢字對(duì)應(yīng)筆畫(huà)的矢量化數(shù)據(jù)時(shí),沒(méi)有使用傳統(tǒng)上最常見(jiàn)的將筆畫(huà)骨架提取,然后對(duì)筆畫(huà)進(jìn)行分割的方法,而是采用基于角點(diǎn)的筆畫(huà)分割算法對(duì)目標(biāo)筆畫(huà)輪廓進(jìn)行精確提取的方法,因此可以不必對(duì)線(xiàn)體細(xì)化,提取中心骨架線(xiàn),而是直接追蹤光柵圖像中的線(xiàn)體邊界對(duì)漢字進(jìn)行矢量化。
在本系統(tǒng)中,首先對(duì)一幅書(shū)法灰度圖像進(jìn)行二值化處理,得到一幅黑白圖像。然后建立原始二值圖的數(shù)據(jù)矩陣。
經(jīng)過(guò)二值化后的黑白圖像,可以較為容易的檢測(cè)出邊緣。邊緣檢測(cè)技術(shù)就是提取目標(biāo)和背景的分界線(xiàn),提取出邊緣才能將目標(biāo)和背景區(qū)分開(kāi)來(lái)。邊界表明一個(gè)特征區(qū)域的終結(jié)和另一個(gè)特征區(qū)域的開(kāi)始,邊界所分開(kāi)區(qū)域的內(nèi)部特征或?qū)傩允且恢碌?,邊緣檢測(cè)實(shí)際上就是檢測(cè)圖像特征發(fā)生變化的位置。一個(gè)書(shū)法字,作為一個(gè)有一定寬度的漢字,他的邊界就是這個(gè)字的輪廓,是寬度為一個(gè)像素點(diǎn)的輪廓線(xiàn),它的內(nèi)部經(jīng)過(guò)填充就是漢字的位圖。我們將圖像向各個(gè)方向移動(dòng)一個(gè)像素的寬度,減去原始的位圖,既獲得了漢字位圖各個(gè)方向的邊緣,然后將原始二值圖的數(shù)據(jù)矩陣存儲(chǔ)為可識(shí)別外輪廓的矩陣,既邊界輪廓的二值圖的數(shù)據(jù)矩陣。
邊緣檢測(cè)完成后,將邊界點(diǎn)的坐標(biāo)存到邊界鏈表中,然后追蹤邊緣的坐標(biāo)。邊界跟蹤時(shí),每次從最左下方開(kāi)始搜索,然后延八個(gè)方向依次是左上方、上方、右上方、右方、右下方、下方、左下方和左方進(jìn)行掃描,跟蹤出一個(gè)組件的一條完整輪廓。這樣就可以很好的矢量化有一定寬度的書(shū)法字,將他們的輪廓坐標(biāo)記錄下來(lái),完成下一步的應(yīng)用。矢量化結(jié)果見(jiàn)圖2。
圖2 矢量化結(jié)果
啟體書(shū)法字的特征是斷筆清晰,粘連的地方較少,屬于一筆一畫(huà)寫(xiě)就的。因此把一個(gè)漢字分解成若干筆畫(huà),使每一筆畫(huà)成為一個(gè)獨(dú)立的文件成為可能。我們建立這樣一個(gè)過(guò)程,在梯度變化劇烈的地方尋找到交錯(cuò)點(diǎn),再輔以人工交互,確定出兩筆畫(huà)間的交叉點(diǎn),最后將一個(gè)筆畫(huà)完整分開(kāi)。
概念介紹:在計(jì)算機(jī)視覺(jué)和圖像處理中, 角點(diǎn)被定義為:圖像邊界上曲率足夠大的點(diǎn)[7];系統(tǒng)還用到一個(gè)概念叫“十字角點(diǎn)”,是指兩筆畫(huà)相交構(gòu)成十字交叉狀態(tài)時(shí)那個(gè)位置的角點(diǎn)。該角點(diǎn)是一個(gè)筆畫(huà)十字交叉點(diǎn)當(dāng)中的角點(diǎn)。
為140度,就將它記錄在一個(gè)角點(diǎn)鏈表中。這種方式得到的角點(diǎn)數(shù)目顯然超過(guò)實(shí)際有效的角點(diǎn)個(gè)數(shù),于是有必要進(jìn)行一番篩選,或者輔以人工交互,選擇出可連接的交角點(diǎn),使其形成正確的角點(diǎn)對(duì)[9]。
漢字往往由若干筆畫(huà)交錯(cuò)構(gòu)成,當(dāng)我們確定了某一角點(diǎn)后,如果它處于兩個(gè)筆畫(huà)的相交處,在它可能的前進(jìn)方向上至少會(huì)有兩個(gè)角點(diǎn)與之相鄰,所以我們還需要確定這個(gè)角點(diǎn)該和哪一個(gè)角點(diǎn)連接,也就是找到這個(gè)角點(diǎn)的可連角點(diǎn)。
本文按照敖雪峰[9]的思想,設(shè)計(jì)的方法是:新建一個(gè)筆畫(huà)鏈表,從左下方開(kāi)始掃描得到的第一個(gè)邊界點(diǎn)作為開(kāi)始檢測(cè)點(diǎn),并從開(kāi)始檢測(cè)點(diǎn)沿著該檢測(cè)點(diǎn)所在的邊界線(xiàn)往下檢測(cè),同時(shí)將檢測(cè)點(diǎn)依次加入到當(dāng)前筆畫(huà)鏈表中。直到遇到一個(gè)角點(diǎn)。先計(jì)算當(dāng)前角點(diǎn)與旁邊索引號(hào)相隔為k的點(diǎn)之間的連線(xiàn)的切矢值1;再計(jì)算當(dāng)前角點(diǎn)與其余角點(diǎn)的連線(xiàn)的切矢值2;選取與切矢值1最接近的角點(diǎn)連線(xiàn),也就找到了當(dāng)前角點(diǎn)的可連角點(diǎn)。如圖3所示。
圖3 找到當(dāng)前角點(diǎn)的可連角點(diǎn)
找到當(dāng)前角點(diǎn)的可連角點(diǎn)后,為它們做直線(xiàn)插值。將插值得到的點(diǎn)都添加到當(dāng)前筆畫(huà)鏈表中,然后再?gòu)脑摻屈c(diǎn)的可連角點(diǎn)的向前方向切矢繼續(xù)往下檢測(cè)。因?yàn)樽畛踉诮屈c(diǎn)對(duì)找的不合適時(shí),已添加人工交互,所以可以準(zhǔn)確的將一條筆畫(huà)分割出來(lái),這樣得到分割后的筆畫(huà)輪廓矢量后,就是得到一條完整筆畫(huà)的邊界信息。對(duì)封閉的輪廓進(jìn)行填充,就很容易的得到了筆畫(huà)的位圖。
仔細(xì)觀察分解后的筆畫(huà),不可避免的會(huì)產(chǎn)生邊界的粗糙(如圖4、5顯示),所以我們?cè)诿甑倪吔缣幉捎镁植坎逯档姆椒ㄟM(jìn)行了平滑的優(yōu)化工作,得到了良好的效果。方法是,在不夠平滑的筆畫(huà)兩端各選一點(diǎn),在筆畫(huà)鏈表中找到距離最近的對(duì)應(yīng)的兩個(gè)點(diǎn),進(jìn)行插值,就得到了平滑的邊界,對(duì)封閉輪廓再填充,就是優(yōu)化后的筆畫(huà)圖,見(jiàn)圖6。
圖4 分割后的筆畫(huà)的矢量化
圖5 對(duì)應(yīng)的分割后的筆畫(huà)
圖6 優(yōu)化后的筆畫(huà)輪廓字庫(kù)
對(duì)一個(gè)書(shū)法字進(jìn)行了矢量化,將筆畫(huà)分割出來(lái)后將要完成的是存儲(chǔ)工作,這時(shí)就需要考慮如何獲取筆畫(huà)的順序,筆順是漢字一個(gè)重要特性,也是學(xué)寫(xiě)漢字時(shí)幫助記憶的重要方法。對(duì)筆順的記錄直接關(guān)系到這些矢量化后的書(shū)法字的下一步應(yīng)用。
在我們的系統(tǒng)里,我們采用的方法是在矢量化和對(duì)筆畫(huà)的分割過(guò)程中,交互進(jìn)行提前筆順的。具體到每一筆畫(huà)的矢量化和分割時(shí),系統(tǒng)設(shè)計(jì)了一個(gè)“泛提”功能,用一個(gè)類(lèi)似“套索”的工具大體圈定一個(gè)筆畫(huà),再對(duì)這一區(qū)域進(jìn)行矢量化和尋找角點(diǎn)的處理,然后提取筆畫(huà)。得到的結(jié)果往往是以目標(biāo)筆畫(huà)為中心的若干小筆畫(huà),然后我們比較這些筆畫(huà)的長(zhǎng)度,顯然最長(zhǎng)的筆畫(huà)是我們的目標(biāo)筆畫(huà)。如果這個(gè)過(guò)程是按照筆畫(huà)原本的順序進(jìn)行的,那么存儲(chǔ)在筆畫(huà)鏈表中的筆畫(huà)就是按照書(shū)法字筆畫(huà)順序得到的結(jié)果。如圖7所示。
圖7 獲取筆畫(huà)順序
矢量化完成后就要建立它的字庫(kù),方便查詢(xún)。通常情況矢量字庫(kù)都建有一個(gè)文件頭, 用來(lái)記錄版權(quán)、字體、原陣點(diǎn)陣大小等信息。
由于我們采取按照筆畫(huà)順序交互提取每條筆畫(huà)的方式,所以每當(dāng)一條筆畫(huà)提取出來(lái)之后即將之保存到我們的筆畫(huà)庫(kù)文件中,相應(yīng)的筆畫(huà)庫(kù)文件的每個(gè)項(xiàng)目由筆畫(huà)所在漢字索引,筆畫(huà)索引,筆畫(huà)輪廓點(diǎn)數(shù),筆畫(huà)輪廓點(diǎn)順序排列坐標(biāo)和筆畫(huà)在漢字中的書(shū)寫(xiě)順序這幾個(gè)字段組成。
在我們的系統(tǒng)中,我們對(duì)所建立的3 755個(gè)一級(jí)國(guó)標(biāo)漢字按照其在標(biāo)準(zhǔn)中出現(xiàn)的順序按阿拉伯?dāng)?shù)字建立索引,并將其對(duì)應(yīng)的書(shū)法漢字圖像一并入庫(kù)進(jìn)行存儲(chǔ)以建立書(shū)法漢字庫(kù)。這里所建立的數(shù)字索引即是我們筆畫(huà)庫(kù)文件中的漢字索引字段指向的索引。
將啟功書(shū)法字矢量化結(jié)果,依照上述方法,我們建立了含3 755個(gè)一級(jí)漢字的啟功書(shū)法庫(kù)。該庫(kù)包含每個(gè)字分解后所有筆畫(huà)的矢量化結(jié)果,以及筆畫(huà)的對(duì)應(yīng)的位圖,筆畫(huà)拆解時(shí)候是按照正確的筆順拆解的,可以同時(shí)記錄下筆畫(huà)順序。照這樣的方法,在書(shū)法字的學(xué)習(xí)系統(tǒng)中,我們可以方便的按順序逐筆調(diào)用,完成臨摹。同時(shí)由于存儲(chǔ)的是筆畫(huà)輪廓的矢量信息,我們還可以方便的比對(duì)臨摹結(jié)果和原始筆畫(huà)的差異,幫助用戶(hù)判斷臨摹的效果。圖 8展示啟功書(shū)法矢量庫(kù)中一些字的輪廓。
圖8 書(shū)法矢量化字列舉
本文探討了一種基于非細(xì)化的輪廓線(xiàn)的啟功書(shū)法字矢量化算法,完成了對(duì)一級(jí)漢字的啟功書(shū)法字及每個(gè)字對(duì)應(yīng)筆畫(huà)的矢量化,構(gòu)造了這樣一個(gè)啟功字體書(shū)法矢量庫(kù),其可以應(yīng)用于CAD, 3D字生成以及書(shū)法學(xué)習(xí)中,我們將在未來(lái)的文章中展示這些應(yīng)用。 圖 9是兩組啟功書(shū)法的矢量化結(jié)果。
圖9 啟功書(shū)法矢量化結(jié)果展示
致謝
在啟功字體的矢量化和應(yīng)用系統(tǒng)的構(gòu)建過(guò)程中,我得到了王燕妮師姐的大力幫助。對(duì)于一級(jí)漢字矢量化,是由趙鵬、張麗、張美霞和我共同完成的,在此要對(duì)他們的無(wú)私幫助和重要工作深表感謝。
[1] Junsong Zhang, Hongwei Lin, Jinhui Yu. A Novel Method for Vectorizing Historical Documents of Chinese Calligraphy[C]//Zhejiang University State Key Lab of CAD&CG Hangzhou,Zhejiang,310058,China.
[2] Nelson.S.H Chu and Chiew Lan Tai. Real Time Painting with an Expressive Virtual Chinese Brush[J]. IEEE Computer Graphics and Applications (S0272-1716),2004,10:76-85.
[3] Hsi-Ming Yang, Jainn-Jyh Lu, and Hsi-Jian Lee. A Bezier Curve-based Approach to Shape Description for Chinese Calligraphy Characters[C]//Department of Computer Science and Information Engineering National Chiao Tung University Hsinchu, Taiwan 30050.
[4] 吳英飛. 書(shū)法重現(xiàn)及其在數(shù)字化圖書(shū)館中的應(yīng)用[D].中國(guó)博士學(xué)位論文全文數(shù)據(jù)庫(kù),2008.
[5] 彭榮杰. 圖像矢量化方法研究與應(yīng)用[D].中國(guó)優(yōu)秀碩士學(xué)位論文全文數(shù)據(jù)庫(kù). 2006.
[6] 李學(xué)營(yíng). 點(diǎn)陣圖像矢量化的研究[D]. 中國(guó)優(yōu)秀博碩士學(xué)位論文全文數(shù)據(jù)庫(kù) (碩士),2007,(06).
[7] S M Smith, J M Brady. SUSAN. A New Approach to Low Level Image Processing [R]. UK:Internal Technical Report TR95SMS1c, 1995.
[8] THEC-H,CHINR-T. On the Detection of Dominant Points on Digital Curves[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence,1989,11(8):859-872.
[9] 敖雪峰. 基于角點(diǎn)檢測(cè)的毛筆字筆畫(huà)分割算法[C]//圖像圖形技術(shù)與應(yīng)用進(jìn)展——第三屆圖像圖形技術(shù)與應(yīng)用學(xué)術(shù)會(huì)議論文集, 2008.
[10] 張鵬遠(yuǎn),董海,周文靈.計(jì)算機(jī)圖像處理技術(shù)基礎(chǔ)[M].北京:北京大學(xué)出版社,1996.
[11] 李賓,譚建榮,彭群生.一個(gè)基于掃描串的統(tǒng)-整體矢量化算法[J].軟件學(xué)報(bào),1998,6:426-431.
[12] X Lin, S Shimotsuji, M Minoh, et al. Efficient Diagram Understanding with Charactenstic Pattern Detection[C]//Computer Vision, Graphics and Image Processing, 1985,30:84-106.
[13] CHEN Ju-wei,LEESuh-yin. On-line Chinese Character Recognition via a Representation of Spatial Relationships between Strokes[J]. International Journal of Pattern Recognition and Artificial Intelligence,1997,11(3):329-357.
[14] 章毓晉.圖像分割[M].北京:科學(xué)出版社.