弓彥周 ,李猛 ,王健 ,黃衛(wèi)星 *
(1.中國科學(xué)院自動化研究所,北京100190; 2.中科君勝(深圳)智能數(shù)據(jù)科技發(fā)展有限公司,廣東深圳518000)
中國書法作為一門古老的漢字書寫藝術(shù),是中國文化的基本組成要素之一,隨著計算機技術(shù)的發(fā)展,越來越多的學(xué)者開始利用計算機進行書法藝術(shù)的仿真,目前研究的方向主要集中在毛筆建模、筆觸生成以及筆跡擴散等方面。
在毛筆建模方面,主要有基于經(jīng)驗的建模方法和基于物理模型的建模方法。2003 年,宓曉峰等[1]提出了一種基于經(jīng)驗的虛擬毛筆模型,這種模型的特點是計算簡單、便于實時操作,缺點是對書法的各種筆法無法準(zhǔn)確還原。在基于物理模型的建模方面,2002 年,YEH 等[2]構(gòu)建了一種用彎曲彈簧作為骨架的毛筆模型,其筆毛由一簇彎曲彈簧相連的粒子組成,被布置在骨架模型的8 個方向,用粒子系統(tǒng)模擬筆頭骨架的變化。2003 年,CHU 等[3]提出一種三維虛擬毛筆模型,通過在筆頭脊線上設(shè)置不同密度的節(jié)點,可較好地還原毛筆的各種形態(tài)。孫美君[4]將基于經(jīng)驗?zāi)P偷慕7椒ê突谖锢砟P偷慕7椒ㄏ嘟Y(jié)合,實現(xiàn)毛筆模型的構(gòu)建,該模型計算簡單、實時性較高。
其他建模方法,如張振庭[5]提出的基于三角網(wǎng)格的虛擬毛筆模型,張俊松等[6]結(jié)合實際書法經(jīng)驗,利用統(tǒng)計方法構(gòu)建的參數(shù)化筆觸模型,此模型可模擬不同類別的筆頭形狀,能較好地生成不同風(fēng)格書體的書寫動畫。
在筆觸生成方面,主要分為基于經(jīng)驗和基于筆墨機理2 種方式,在基于經(jīng)驗的筆觸生成方式中,具代表性的是宓曉峰等[1]提出的雨滴模型,以筆畫的最終呈現(xiàn)形態(tài)反推筆觸生成,最終使用“雨滴”模型及“雨滴”的變種模型實現(xiàn)較為逼真的書法筆跡。在基于筆墨機理的筆觸生成方式中,STRASSMANN[7]賦予每根筆毛墨水量、位置等信息,當(dāng)筆毛與紙面接觸并在紙面上運動時,筆毛信息亦隨之變化。CHU 等[3]通過將毛筆紋理投影到紙面的方式生成最終筆跡。總體來說,使用基于筆墨機理的方式生成的筆跡,表現(xiàn)力更強,更符合書法筆觸生成規(guī)則。
綜上,為了提高數(shù)字書法筆跡的真實性,現(xiàn)有的研究主要集中在基于物理模型的毛筆建模和基于筆墨機理的筆觸生成上,但此類方法復(fù)雜度較高。本文旨在構(gòu)建一套可以在電子屏幕上實時創(chuàng)作書法作品的系統(tǒng),考慮物理建模會增加計算量,因此,在毛筆建模和筆觸生成階段,系統(tǒng)主要基于經(jīng)驗和規(guī)則模型進行判斷,使得在滿足實時性的同時,取得較好的呈現(xiàn)效果。
下文安排如下,第1 節(jié)探討在電子屏幕上書寫時軌跡平滑的問題,第2 節(jié)討論筆跡呈現(xiàn),第3 節(jié)討論筆跡修飾,第4 節(jié)介紹系統(tǒng)試驗,第5 節(jié)是結(jié)論和展望。
使用真實的干毛筆在電子設(shè)備上進行創(chuàng)作時有一個突出的問題,即在慢速書寫時,系統(tǒng)采集到的初始軌跡點總是存在較大的噪聲,如圖1 所示,其中,圖1(a)為干毛筆沿鋼尺運動時采集到的點,圖1(b)為固定的圓形筆尖沿鋼尺運動時采集到的點(用來模擬硬筆),軌跡點噪聲都采用紅外觸摸框采集,可以發(fā)現(xiàn),使用干毛筆較使用硬筆更容易產(chǎn)生噪聲。
圖1 使用干毛筆和硬筆生成軌跡點的噪聲對比Fig.1 Track points generated by dry brush and hard pen
產(chǎn)生圖1(a)所示現(xiàn)象的原因是毛筆沒有蘸墨水,筆毛之間沒有黏附力,很容易分叉,使得毛筆在行進過程中筆毛與屏幕表面的接觸形狀不斷發(fā)生微小變化,從而產(chǎn)生噪聲,此外,由于電子屏幕與筆之間的摩擦力小,書寫者在運筆過程中的輕微晃動及采集系統(tǒng)的噪聲等都會導(dǎo)致軌跡點抖動。而硬筆在行進過程中與屏幕表面接觸部分變化不大,噪聲相對較小。本文通過卡爾曼濾波算法[8]解決此問題。
首先,設(shè)置卡爾曼濾波(KF)參數(shù),同文獻(xiàn)[9],然后,將其與具有代表性的滑動平均濾波算法(MAF)和一階滯后濾波算法(FOLF)做對比,結(jié)果如圖2 所示,其中Original 是使用干毛筆劃過觸摸框時采集的初始軌跡點。由圖2 可知,平滑效果依次為KF>MAF>FOLF。
當(dāng)毛筆在電子屏幕上的移動速度大于1.5~3.0 pixel/ms 時,使用卡爾曼濾波會導(dǎo)致終點與初始點偏差較大,尤其是當(dāng)筆跡方向變化較劇烈時,偏差更大。圖3 為當(dāng)平均速度大于2 pixel/ms 時初始軌跡點和真實軌跡點的對比圖。產(chǎn)生圖3 所示結(jié)果的原因是在書法創(chuàng)作中,毛筆的行進速度時快時慢,且易隨機變換運筆方向,從而導(dǎo)致濾波系統(tǒng)不能準(zhǔn)確獲取系統(tǒng)的真實狀態(tài)變量,為此,本文在筆刷快速移動時暫不使用卡爾曼濾波。
圖2 不同濾波算法的對比Fig.2 Comparison of different filtering algorithms
當(dāng)毛筆在電子屏幕上快速移動時,由于系統(tǒng)采集速率的問題,會出現(xiàn)較為明顯的折線,如圖4(a)所示。
為避免出現(xiàn)此現(xiàn)象,需要對初始軌跡點進行插值處理,常用的插值方法有圓弧插值[12]、B 樣條曲線插值等。圓弧插值只保證插值點處連續(xù),但不保證其可導(dǎo),所以會出現(xiàn)較為明顯的過渡點,如圖4(b)所示。
圖4 快速書寫時和采用圓弧插值生成的軌跡Fig.4 Polyline generated by fast brush and circular interpolation
常用的B 樣條曲線插值有二次B 樣條曲線插值和三次B 樣條曲線插值,更高階的插值意味著需要更多的控制點。考慮筆跡點生成的實時性,本文采用二次B 樣條曲線進行插值,二次B 樣條曲線可以保證過渡點處可導(dǎo)且連續(xù),普通的二次B 樣條曲線公式為
將式(1)應(yīng)用到圖5(a)中,圖中p1,p2,p3分別為 3個控制點,可以看到,當(dāng)t從0 到1 變化時,生成如圖5 所示的曲線,二次B 樣條曲線經(jīng)過首末兩點。
如果直接用普通的二次B 樣條曲線對軌跡點插值,則會導(dǎo)致插值曲線和初始軌跡相差太大?;诖耍疚牟捎酶倪M的二次B 樣條曲線插值,如圖5(b)所示,其中p1,p2和p3是連續(xù)的 3 個初始軌跡點,p12為p1和p2的中點,p23為p2和p3的中點,插值曲線由p12,p2和p23確定,這樣就使得最終的插值曲線更加接近初始軌跡。
圖5 二次B 樣條曲線插值Fig.5 Quadratic B spline curve
使用改進的二次B 樣條曲線插值生成的軌跡和線性插值生成的軌跡如圖6 所示。
圖6 改進的二次B 樣條曲線插值和線性插值生成的軌跡Fig.6 Image generated by improved quadratic spline curve and line interpolation
筆跡呈現(xiàn)主要探討毛筆在電子屏幕上書寫時筆觸形態(tài)的還原。利用平滑后的軌跡數(shù)據(jù)(軌跡點坐標(biāo)、速度和長寬值),識別當(dāng)前的行筆方式,然后在行筆方式庫中選取最佳筆觸,通過與基礎(chǔ)筆觸對比,經(jīng)修正和融合,生成最終的筆跡,筆跡生成流程如圖7所示。
圖7 筆跡生成流程Fig.7 Flow of stroke generation
毛筆的行筆方式雖然多種多樣,但不外乎基本的“提、按、頓、挫”?;谠陔娮悠聊簧蠈嶋H的書寫數(shù)據(jù),本文選擇了對書法效果有較大影響的行筆方式:按筆、行筆和提筆,其所對應(yīng)筆跡的運筆過程分別為由細(xì)到粗、均勻行筆、由粗到細(xì),并建立了與這3 種行筆方式對應(yīng)的筆觸數(shù)據(jù)庫,如圖8(a)所示。此外,為了提高最終筆跡圖像的質(zhì)量,提前將筆觸進行矢量化處理,如圖8(b)所示,將左邊的真實筆觸矢量化后,生成右邊的光滑筆觸。
圖8 筆觸形態(tài)Fig.8 Stroke form
為了提高毛筆行筆識別的魯棒性和準(zhǔn)確性,本文通過一個簡單的循環(huán)神經(jīng)網(wǎng)絡(luò)[10]進行行筆方式識別。對于待識別的軌跡點,選取其前15 個點和后4個點共計20 組軌跡數(shù)據(jù)。每組數(shù)據(jù)從5 個維度,包括軌跡點位置(x,y)、軌跡點長寬值(h,w)和速度v,進行人工標(biāo)注和訓(xùn)練。為了更詳細(xì)地定位毛筆的運行狀態(tài),以便從行筆方式庫中選取合適的筆觸,在分類模型中增加了回歸分析,用于判斷按筆、提筆的行進程度。
根據(jù)實時行筆識別結(jié)果,首先選取3 種基礎(chǔ)筆觸形態(tài),分別對應(yīng)3 種行筆方式,如圖9 所示,其中每個基礎(chǔ)筆觸主要由基礎(chǔ)筆觸的構(gòu)成元素組成。
圖9 基礎(chǔ)筆觸形態(tài)Fig.9 Basic stroke form
系統(tǒng)在行筆方式庫中選出合適的筆觸(下稱“真實筆觸”),對基礎(chǔ)筆觸進行修正,如圖10 所示,首先將基礎(chǔ)筆觸和真實筆觸的重心對齊,從中心向外以固定角度間隔作射線,角度間隔設(shè)定為n,共360/n條射線,在本文中,n的默認(rèn)值為3。每條射線與基礎(chǔ)筆觸和真實筆觸相交,取對應(yīng)兩交點的中點作為新筆觸的邊界點,這種方式可以基于行筆狀態(tài)修正基礎(chǔ)筆觸的形狀和大小,使其更加真實。
圖10 筆觸修正Fig.10 Stroke correction
在獲取筆觸后,計算相鄰筆觸間的最小凸包絡(luò)面[1],生成最終筆跡。
在完成筆跡呈現(xiàn)后,已基本完成書法的主要筆畫形態(tài),為了更完整地表達(dá)書法的各種筆法,模擬毛筆中的干筆飛白是一項必不可少的工作。本文主要采用基于規(guī)則的紋理映射方法,如圖11 所示,采集真實的毛筆飛白筆畫建立紋理規(guī)則庫。一般可以按照行筆和運筆方向進行紋理分類。實際測試發(fā)現(xiàn),將紋理分成直紋理和收尾紋理已可滿足大部分場景需求。直紋理又可分為中鋒紋理和側(cè)鋒紋理,內(nèi)部每個紋理都以墨量和速度作為參數(shù),在檢索過程中,會匹配最接近當(dāng)前墨量和速度的紋理圖片。
圖11 紋理規(guī)則庫Fig.11 Texture rule base
現(xiàn)有的紋理映射方法有矩形法、四邊形法和曲底邊四邊形法[11],其中,曲底邊四邊形法能更好地還原筆跡信息,所以本文選擇曲底邊四邊形法。
在使用紋理映射過程中,有時會出現(xiàn)無法用一張紋理完全覆蓋一個筆畫的現(xiàn)象,此時需要對紋理進行拼接,但紋理拼接時在銜接處會不自然,如圖12(c)所示。
圖12 具有明顯過渡的紋理拼接Fig.12 Image stitching with gap
為解決此問題,提出了一種改進的紋理拼接方法——枯筆紋理法,其原理如圖13 所示。對待拼接的A 紋理和B 紋理,首先,在A 紋理末尾的x方向上提取長度為L1的紋理,生成A1 紋理,將A1 紋理沿紋理末端的y方向鏡像翻轉(zhuǎn),生成A2 紋理,然后,按下式計算A2 紋理的alpha 通道:
其中,alphafinal表示最終的透明通道值,alphainit表示最初的透明通道值,x表示橫坐標(biāo)值,L1表示A2 紋理的總長度。
用式(2)將 A2 紋理轉(zhuǎn)換成 A3 紋理,將 A3 紋理和B 紋理在x=0 的位置對齊,進行圖像融合,融合算式為融合后生成B1 紋理,將A 紋理和B1 紋理進行拼接和二值化處理,最終生成C 紋理。將圖12 中的A 紋理和B 紋理用該方法進行拼接,生成如圖12(d)所示的紋理,紋理中幾乎看不到拼接的痕跡。
圖13 改進的紋理拼接方法Fig.13 Texture stitching with improved method
用枯筆紋理法生成的作品如圖14 所示。
圖14 枯筆紋理法生成的作品Fig.14 Image generated by half-dry stroke
本文擬構(gòu)建一套實時數(shù)字書法體驗系統(tǒng),時間性能為本系統(tǒng)最關(guān)注的指標(biāo)之一。系統(tǒng)試驗環(huán)境參數(shù)為:Intel(R) Core(TM) i5-4460 CPU @3.2GHz,8GRAM Win7 64 位,Adobe Animate CC 2018。
測試3 種筆跡生成方式的延時,結(jié)果如表1 所示。方式1 不使用筆觸修正,即在筆觸生成階段直接使用基礎(chǔ)筆觸,延時為2 ms;方式2 增加了筆觸修正,延時達(dá)到了4 ms;方式3 在方式2 的基礎(chǔ)上增加了紋理映射操作,延時為5 ms。
表1 筆跡生成方式Table 1 Different stroke generation methods
圖15 為采用3 種方式生成的隸書筆跡效果對比,可以看到,方式1 和方式2 生成的隸書筆跡相差不大,主要原因是筆觸修正對行筆中的起筆、折筆、修筆等細(xì)節(jié)修正效果明顯,使得筆觸更加自然,由于隸書筆跡較為圓潤,不需要太豐富的細(xì)節(jié)變化,因此,在隸書書寫過程中,使用筆觸修正效果不明顯。
圖15 3 種方式生成的隸書筆跡Fig.15 The official script generated by three methods
圖16 為采用3 種方式生成的行書筆跡,通過對比發(fā)現(xiàn),方式2 的起筆比方式1 的更自然,主要原因在于筆觸修正可以讓筆跡更符合書寫規(guī)律,而且經(jīng)紋理映射后(見圖16(c)),筆跡更具飄逸感。
以上分析說明,對于書寫細(xì)節(jié)變化不大的書體,如篆書、隸書等,可以直接使用方式1 生成筆跡,在書寫細(xì)節(jié)較為豐富的書法字時,如行書、楷書、草書等,建議采用方式2 生成筆跡,如果需要表現(xiàn)飛白效果,則宜采用方式3。
圖16 3 種方式生成的行書筆跡Fig.16 The cursive handwriting generated by three methods
提出了一種較為完整的數(shù)字書法生成方法,并對數(shù)字書法在實際應(yīng)用中的幾個關(guān)鍵問題:筆跡平滑、筆跡呈現(xiàn)、筆跡修飾等進行了探討,在筆跡修飾部分提出了一種枯筆紋理拼接方法。
本文中的筆跡呈現(xiàn)主要是基于經(jīng)驗和規(guī)則,今后將研究基于毛筆建模的筆跡生成方式,以更好地展現(xiàn)各種書法技法。此外,本文沒有考慮墨水混合及擴散的情況,今后將做進一步研究。