本發(fā)明涉及文字圖形處理領(lǐng)域,尤其是一種改進(jìn)膨脹算法的字形合成方法。
背景技術(shù):
字形合成是圖形變形技術(shù)的一種,屬于圖形處理領(lǐng)域中的一個(gè)新的分支。對(duì)圖形學(xué)來說,它可以實(shí)現(xiàn)通過現(xiàn)有字形生成新的字形,是一項(xiàng)重要的研究課題。字形合成指的是基于現(xiàn)有的兩個(gè)字形,通過某種算法,產(chǎn)生一系列的中間字形,從而實(shí)現(xiàn)兩個(gè)字形間的平滑過渡?,F(xiàn)有的字體合成方法多是基于字形圖像,即以圖像為基礎(chǔ)進(jìn)行字體合成。而基于圖形的字體合成方法處理對(duì)象多是相同拓?fù)浣Y(jié)構(gòu)的字形。
現(xiàn)有技術(shù)公開了多種字形合成方法,處理對(duì)象多是相同拓?fù)浣Y(jié)構(gòu)的字形。但是對(duì)于不同構(gòu)的字形進(jìn)行合成時(shí),合成效果不佳,容易出現(xiàn)病變結(jié)果,不能較好地解決字形不同構(gòu)的問題。而幾乎所有漢字字形都是復(fù)雜的凹多邊形,字形千變?nèi)f化,且不同字體間字形結(jié)構(gòu)不同。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明目的在于提供一種合成效果好、合成質(zhì)量高的基于改進(jìn)膨脹算法的字形合成方法,用以解決二維字形間不同構(gòu)的問題,為后期的字體合成、圖形動(dòng)畫、計(jì)算機(jī)輔助設(shè)計(jì)等做基礎(chǔ)。
為實(shí)現(xiàn)上述目的,采用了以下技術(shù)方案:本發(fā)明所述方法的具體步驟如下:
步驟1,獲取字形文件,建立字形部件間的映射關(guān)系;
步驟2,在各字形部件內(nèi)分別進(jìn)行凸剖分;
步驟3,對(duì)剖分后的凸多邊形建立映射關(guān)系;
步驟4,利用吻合邊的特點(diǎn),將兩多邊形分別縮小一定比例,以保證膨脹結(jié)果字形與原字形大小一致,對(duì)存在映射關(guān)系的凸多邊形進(jìn)行膨脹;基于兩字形間凸多邊形的映射關(guān)系,選擇一個(gè)凸多邊形其中的某條邊的起始點(diǎn)作為膨脹過程中的參照點(diǎn),并基于該參照點(diǎn)將該凸多邊形沿另一個(gè)多邊形的每條邊進(jìn)行平移,然后根據(jù)每條邊端點(diǎn)兩多邊形的邊必然吻合的特性,計(jì)算平移軌跡,以得到多邊形膨脹軌跡,從而實(shí)現(xiàn)對(duì)凸多邊形進(jìn)行膨脹,得到連續(xù)的膨脹結(jié)果輪廓;
步驟5,對(duì)膨脹結(jié)果進(jìn)行曲線擬合,使結(jié)果輪廓更平滑。
進(jìn)一步的,步驟1中,根據(jù)字形的連通區(qū)域劃分部件,并利用字形部件的相似性計(jì)算匹配度,確定字形部件間的映射關(guān)系。
進(jìn)一步的,步驟2中,對(duì)各部件進(jìn)行最大凸剖分,即盡可能剖分成最大凸多邊形,利于后期的膨脹合成;所述凸多邊形均為矢量多邊形。
進(jìn)一步的,步驟3中,計(jì)算各凸多邊形的重心,并利用歸一化后的重心坐標(biāo)矢量距離計(jì)算相似度,從而確定凸多邊形間的映射關(guān)系。
進(jìn)一步的,步驟4中,基于吻合邊的膨脹過程如下,將對(duì)應(yīng)兩凸多邊形分別稱作多邊形PA和PB,其中PA為待膨脹圖形,PB為結(jié)構(gòu)元素;
步驟4.1,選擇多邊形PB的一個(gè)頂點(diǎn)作為膨脹過程中的參照點(diǎn),其中選擇各凸多邊形的參照點(diǎn)時(shí)要保持其一致性,以保證膨脹的方向一致,有效提高膨脹效果;
步驟4.2,保持參照點(diǎn)與多邊形PA第一條邊的兩端點(diǎn)重合,以多邊形PA的第一條邊的左端點(diǎn)為運(yùn)動(dòng)起點(diǎn),沿多邊形PA的第一條邊平移多邊形PB,并根據(jù)邊吻合特點(diǎn),計(jì)算這次平移中各對(duì)吻合邊形成的四邊形,即得到PB在PA第一條邊的膨脹軌跡。
步驟4.3,重復(fù)步驟4.2直至對(duì)多邊形PA的每條邊均進(jìn)行膨脹為止,得到PB對(duì)PA的膨脹軌跡;
步驟4.4,取膨脹軌跡與多邊形PA的并集作為膨脹結(jié)果。
進(jìn)一步的,步驟5中,對(duì)膨脹結(jié)果進(jìn)行曲線擬合的主要目標(biāo)是輪廓的相鄰邊,先嘗試擬合成直線,若不可以則嘗試擬合成曲線,以生成新的輪廓邊,擬合后所得圖形即為字形合成結(jié)果。
工作過程大致如下:
首先通過對(duì)兩字形各部件分別進(jìn)行凸剖分,建立部件間的映射關(guān)系,并在對(duì)應(yīng)的部件內(nèi)建立凸多邊形的映射關(guān)系,然后對(duì)存在映射關(guān)系的凸多邊形利用吻合邊的特點(diǎn)進(jìn)行膨脹,,最后對(duì)膨脹結(jié)果進(jìn)行曲線擬合,實(shí)現(xiàn)漢字字形的合成。
與現(xiàn)有技術(shù)相比,本發(fā)明方法具有如下優(yōu)點(diǎn):能夠得到較好的字形合成效果,保證字形合成質(zhì)量;并能夠用以解決二維字形間不同構(gòu)的問題,為后期的字體合成、圖形動(dòng)畫、計(jì)算機(jī)輔助設(shè)計(jì)等做基礎(chǔ),具有良好的適應(yīng)性。
附圖說明
圖1為本發(fā)明的程序流程圖。
圖2為本發(fā)明的多邊形膨脹流程圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說明:
如圖1所示,本發(fā)明所述方法的具體步驟如下:
步驟1,對(duì)兩字形建立部件間的映射關(guān)系。
字形連通區(qū)域即部件,以此劃分字形的部件,并根據(jù)各部件的重心、面積、空間位置等特點(diǎn),計(jì)算兩字形間各部件的匹配度,匹配度最高的一對(duì)部件即存在映射關(guān)系。
步驟2,對(duì)各部件進(jìn)行最大凸剖分。
在字形各部件內(nèi)基于Delaunay三角剖分方法進(jìn)行剖分,并對(duì)三角剖分結(jié)果進(jìn)行合并,以使得部件剖分后的每一個(gè)多邊形達(dá)到最大剖分。
步驟3,建立凸多邊形映射關(guān)系。
基于歸一化后的凸多邊形的中心坐標(biāo),計(jì)算歐氏距離,其中距離最近的凸多邊形即互為映射關(guān)系。
步驟4,對(duì)凸多邊形進(jìn)行膨脹。首先將兩多邊形分別縮小一定比例,以保證膨脹結(jié)果字形與原字形大小一致。然后根據(jù)兩字形間多邊形的映射關(guān)系,基于一個(gè)多邊形的頂點(diǎn),將該多邊形沿另一個(gè)多邊形的每條邊進(jìn)行平移,并利用平移過程中產(chǎn)生的吻合邊得到膨脹軌跡,從而實(shí)現(xiàn)對(duì)凸多邊形進(jìn)行膨脹。
基于吻合邊的膨脹過程如下,
假設(shè)兩字形間存在映射關(guān)系的凸多邊形是PA和PB,多邊形PA的邊表示為EAi(i=0,1,2,…,M),頂點(diǎn)表示為VAi(i=0,1,2,…,M),其中EAM+1和VAM+1分別表示EA0和VA0。多邊形PB的邊表示為EBj(j=0,1,2,…,N),頂點(diǎn)表示為VBj(j=0,1,2,…,N),其中EBN+1和VBN+1分別表示EB0和VB0?;谖呛线叺呐蛎浟鞒倘绺綀D2所示,具體步驟如下:
(1)判斷多邊形PB的各個(gè)頂點(diǎn)VBj(j=0,1,2,…,N)的橫坐標(biāo)和縱坐標(biāo),選擇最上(或最下,最左,最右,保持一致即可)一個(gè)頂點(diǎn)VBk作為參考點(diǎn)。令m=0,轉(zhuǎn)入(2)。
(2)若m=M+1,則兩多邊形膨脹結(jié)束,取Tm(m=0,1,2,…,M)的并集與多邊形PA的并集即為兩多邊形膨脹結(jié)果。否則轉(zhuǎn)入(3)。
(3)以多邊形PA的邊EAm的左端點(diǎn)VAm為運(yùn)動(dòng)起點(diǎn),右端點(diǎn)VAm+1為運(yùn)動(dòng)終點(diǎn),沿邊EAm平移多邊形PB,其中在起點(diǎn)和終點(diǎn)處,分別保持參考點(diǎn)VBk與多邊形PA的邊EAm的兩端點(diǎn)VAm和VAm+1重合,從而在VAm和VAm+1處分別形成新的多邊形PB_VAm和PB_VAm+1,令n=0,轉(zhuǎn)入(4)。
(4)若n=N+1,則多邊形PB在邊EAm上的膨脹結(jié)束,所形成平行四邊形的并集Tm即為其膨脹結(jié)果,轉(zhuǎn)入(7),否則轉(zhuǎn)入(5)。
(5)若多邊形PA的邊EAm與多邊形PB的邊EBn存在平行關(guān)系,則令n=n+1,返回(4),否則轉(zhuǎn)入(6)。
(6)根據(jù)多邊形PB_VAm和PB_VAm+1中對(duì)應(yīng)EBn的兩條邊互相吻合,即方向和長度完全相同的特點(diǎn),分別連接兩多邊形中該對(duì)邊的起始點(diǎn)和終止點(diǎn),形成一個(gè)平行四邊形并保存。令n=n+1,返回(4)。
(7)令m=m+1,返回(2)。
步驟5對(duì)膨脹結(jié)果進(jìn)行曲線擬合,使結(jié)果輪廓更平滑。曲線擬合主要是對(duì)輪廓相鄰邊進(jìn)行處理,首先判斷相鄰邊是否能擬合成直線,若是則直接保存,擬合后首尾點(diǎn)保持不變。否則使用最小二乘法進(jìn)行曲線擬合,生成新的輪廓邊,處理后所得圖形即為字形合成結(jié)果。
以上所述的實(shí)施例僅僅是對(duì)本發(fā)明的優(yōu)選實(shí)施方式進(jìn)行描述,并非對(duì)本發(fā)明的范圍進(jìn)行限定,在不脫離本發(fā)明設(shè)計(jì)精神的前提下,本領(lǐng)域普通技術(shù)人員對(duì)本發(fā)明的技術(shù)方案做出的各種變形和改進(jìn),均應(yīng)落入本發(fā)明權(quán)利要求書確定的保護(hù)范圍內(nèi)。