專利名稱:根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于廣電行業(yè)電視節(jié)目制播機(jī)構(gòu)的字幕編播技術(shù)領(lǐng)域,具體涉及一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法。
背景技術(shù):
在字幕編播領(lǐng)域中,字幕對象可分為文字和圖形兩個部分。文字包括世界上各種語種的文字,圖形包括各種規(guī)則形狀的圖形、由基本圖形元素組成的復(fù)合圖形和任意不規(guī)則圖形。從計算機(jī)圖形學(xué)的角度來說,可以將所有類型的字幕對象視為由一系列直線和曲線組成的圖形。圖形通常由點、線、面、體等幾何元素和灰度、色彩、線型、線寬等非幾何屬性組成。從處理技術(shù)上看,圖形主要分為兩類一類是基于線條信息表示的,如工程圖、等高線地圖、曲面的線框圖等;另一類是明暗圖,也就是通常所說的真實感圖形。
字幕渲染是計算機(jī)圖形學(xué)、計算機(jī)數(shù)字圖像處理與電視臺的節(jié)目制作業(yè)務(wù)相結(jié)合的技術(shù)。從計算機(jī)數(shù)字圖像處理的角度來說,對字幕對象的渲染包括兩個方面第一,基于像素或子像素的一系列靜態(tài)處理,如圖象增強(qiáng)、二值化處理、邊緣檢測、模糊處理、浮雕、邊緣反走樣、亮度貼圖、材質(zhì)貼圖、防抖動、橢圓變形、多邊形變形、勾邊、增亮、銳化、柔化、凸起、彩色鉛筆、油畫龜裂、交叉影線、剪樣、玻璃、邊緣增亮、墨水輪廓畫、瓷磚、信紙、拼綴物、塑料包裝、水波紋、海綿、噴涂筆、著色玻璃、高斯模糊等特效;第二,基于關(guān)鍵幀的一系列動態(tài)處理,包括水波、旗飄、螺旋、扭曲、三維投影、火焰、球變、三維形變、彎曲、幻影、卷頁、折疊、禮花、百葉窗、碎裂、水波、波動、劃像、轉(zhuǎn)球、螺旋、旗飄、波動虛影、蝶變、流光、凸鏡、萬花筒、激光、飛光、魔幻螺旋、運動模糊、徑向模糊、波浪、波浪倒影、回旋等特效。
字幕的渲染效果是衡量一個字幕系統(tǒng)的重要指標(biāo),特別是在反走樣處理、小字的細(xì)節(jié)處理、立體邊的處理、虛邊、虛影、真實三維視覺感、三維字倒角、紋理、光照的處理等方面。
在現(xiàn)有的字幕系統(tǒng)中,字幕渲染存在著以下問題 第一,將文本字幕與圖形字幕的渲染區(qū)別開來,而且不同的圖形元素也使用不同性質(zhì)的幾何矢量來描述。這個問題在實現(xiàn)和應(yīng)用兩個方面給字幕系統(tǒng)帶來了很多的不利。從實現(xiàn)的角度來說,會導(dǎo)致一個字幕系統(tǒng)中存在多個完全不同的渲染引擎和渲染流程,而且如果要支持一種新的字幕對象,則需要定義并實現(xiàn)新的渲染引擎,從而造成字幕系統(tǒng)的功能擴(kuò)展性存在很大的局限性。從應(yīng)用的角度來說,帶來兩方面致命的問題一方面,不同類型的字幕對象最終展現(xiàn)的效果不一致,例如兩個不同類型的字幕對象同樣是加了2個像素的全邊,但由于經(jīng)過了不同的渲染引擎,最終的處理結(jié)果可能是不同的,在進(jìn)行字幕創(chuàng)作時給使用者帶來了諸多不便;另一方面,在字幕系統(tǒng)中針對字幕對象的操作不得不進(jìn)行特定的限制,例如,有的字幕對象支持幾何旋轉(zhuǎn)、幾何縮放,有的則不支持,有的字幕對象支持任意角度的加邊、加影,有的則只支持固定角度的加邊、加影,有的甚至不支持。所有這些問題都會影響字幕系統(tǒng)的普遍適用性和功能完備性。
第二,字幕渲染引擎的核心算法都是基于浮點運算,例如三角函數(shù)運算、反三角函數(shù)運算、除法運算、冪運算、開方運算等。這會導(dǎo)致兩方面的問題一方面,由于最終處理結(jié)果要求的是整數(shù)型的像素值,因此在渲染引擎算法的不同階段會進(jìn)行取整運算,這就會造成計算上的累計誤差,導(dǎo)致最終的字幕效果在局部細(xì)節(jié)上存在缺陷,例如筆畫多的文字模糊不清晰、筆畫粘連等;另一方面,這些浮點運算都是占用大量機(jī)器指令的數(shù)學(xué)運算,大大降低了整個字幕系統(tǒng)的工作效率,影響到字幕制作和播出的時效性,特別是在高清晰度電視字幕的制作中,由于其數(shù)據(jù)量是標(biāo)清的5倍,這一點表現(xiàn)的更加明顯。
第三,作為字幕渲染重要指標(biāo)之一的邊緣反走樣的效果不甚理想,甚至無法達(dá)到實用的程度。這是因為現(xiàn)有的字幕系統(tǒng)在進(jìn)行反走樣處理時,完全依賴當(dāng)前像素空間的圖像處理方法,沒有字幕幾何矢量信息的參與,也就無法實現(xiàn)基于子像素的處理,使得現(xiàn)有的字幕系統(tǒng)的最終渲染效果出現(xiàn)比較明顯的邊緣鋸齒效應(yīng),影響字幕展現(xiàn)的效果。
由于上述同樣的原因,在對字幕對象進(jìn)行基于濾鏡管道的圖像處理時,也會影響字幕的最終效果。現(xiàn)有的字幕系統(tǒng)的渲染流程通常是先進(jìn)行面邊影的貼圖,得到一個圖像,然后將這個圖像放入濾鏡管道中,再進(jìn)行一系列的圖像處理。但是由于沒有字幕幾何矢量信息的參與,濾鏡管道的處理會破壞前者反走樣后的效果。也就是說,在本來就不理想的邊緣處理上累積了新的邊緣鋸齒效應(yīng)。
由于上述同樣的原因,對于稍微復(fù)雜一些的圖形元素的字幕對象,在圖形拐點處出現(xiàn)振蕩效應(yīng),導(dǎo)致圖形輪廓不平滑。例如常用的圓角矩形對象,由四個角的圓弧與四條直線組成,在圓弧與直線相接的地方,就會出現(xiàn)凸凹不平的現(xiàn)象。
第四,一個字幕對象在進(jìn)行漸變色渲染時,應(yīng)該是按照這個物體的矢量輪廓進(jìn)行徑向的漸變色彩處理,但是在現(xiàn)有的字幕系統(tǒng)中,對漸變色的渲染處理是將漸變色放到一個內(nèi)存塊中,在渲染時,還是采取了對應(yīng)像素貼圖的方法。這就使得現(xiàn)有的字幕系統(tǒng)無法實現(xiàn)真正意義上的漸變色的渲染效果。
第五,現(xiàn)有的字幕系統(tǒng)無法實現(xiàn)增加多個外邊、多個內(nèi)邊、多個側(cè)面立體邊、多個影子。簡單的面、邊、影的疊加的字幕展現(xiàn)已經(jīng)無法滿足電視節(jié)目制作對字幕系統(tǒng)的要求。
第六,現(xiàn)有的字幕系統(tǒng)的渲染都不是基于Bezier曲線輪廓,但是由于TrueType字庫中的字模都是使用Bezier曲線來描述的,所以就需要將從字庫中提取出來的Bezier曲線轉(zhuǎn)換成另外一種形式的矢量,由于不同矢量表達(dá)式之間的信息不對稱性,在轉(zhuǎn)換過程中會出現(xiàn)信息的損失,從而使得筆畫的形狀變形,導(dǎo)致筆畫粗細(xì)不均勻,影響字型展現(xiàn)的美觀。
第七,現(xiàn)有的字幕系統(tǒng)無法將文字字幕對象轉(zhuǎn)換為圖形字幕對象,從而無法實現(xiàn)字符變形、字符倒影、字符反轉(zhuǎn)、曲線擺放、藝術(shù)字等功能,無法滿足高級的字幕應(yīng)用需求。
第八,現(xiàn)有的字幕系統(tǒng)無法實現(xiàn)多種不同類型的加邊方式,如尖角邊、圓角邊、方角邊等,這在一定程度上影響了字幕應(yīng)用的廣泛性。
第九,現(xiàn)有的字幕系統(tǒng)無法實現(xiàn)對任意形狀不規(guī)則圖形的支持,從而無法應(yīng)對日益重要的地理信息描述、氣象預(yù)報、綜合資訊等類型的字幕制作。
貝塞爾(Bezier)曲線是計算機(jī)圖形學(xué)中一種重要的多項式參數(shù)曲線。平面中的任意N(N>=2)個點都可以構(gòu)成一個Bezier曲線,這N個點稱為Bezier曲線的控制點,N個點組成的多邊形稱為Bezier曲線的控制多邊形。N次Bezier曲線的參數(shù)方程如下 t∈
其中,P0、P1、...、Pn是Bezier曲線的控制點。
由此,一次Bezier曲線的參數(shù)表達(dá)式為 B(t)=P0+(P1-P0)t=(1-t)P0+tP1,t∈
一次Bezier曲線就是線性Bezier曲線,實際上是兩個控制點P0和P1之間的直線段。
二次Bezier曲線的參數(shù)表達(dá)式為 B(t)=(1-t)2P0+2t(1-t)P1+t2P2,t∈
三次Bezier曲線的參數(shù)表達(dá)式為 B(t)=P0(1-t)3+3P1t(1-t)2+3P2t2(1-t)+P3t3,t∈
P0、P1、P2、P3四個點在平面或在三維空間中定義了三次Bezier曲線。曲線起始于P0走向P1,并從P2的方向來到P3。一般不會經(jīng)過P1或P2,這兩個點只提供方向信息。P0和P1之間的間距,決定了曲線在轉(zhuǎn)而趨進(jìn)P3之前,走向P2方向的長度。
Bezier曲線具有如下特性。
(1)無限可分性一條Bezier曲線可在任意點切割成兩條或任意多條子曲線,每一條子曲線仍是Bezier曲線。
(2)對稱性保持Bezier曲線全部控制點Pi的坐標(biāo)位置不變,只是將控制點Pi的排序顛倒,曲線形狀保持不變。這個性質(zhì)說明Bezier曲線在起點處有什么幾何性質(zhì),在終點處也有相同的幾何性質(zhì)。
(3)凸包性Bezier曲線位于其控制點的凸包之內(nèi)。
(4)幾何不變性Bezier曲線位置和形狀與其特征多邊形頂點的位置有關(guān),它不依賴坐標(biāo)系的選擇。
(5)變差縮減性平面內(nèi)任意直線與曲線的交點個數(shù)不多于該直線與其特征多邊形的交點個數(shù)。
(6)端點切矢量Bezier曲線的起點、終點與相應(yīng)的特征多邊形的起點、終點重合。其起點和終點處的切線方向和特征多邊形的第一條邊及最后一條邊的走向一致。
鑒于上述Bezier曲線的特性,如果將不同類型的字幕對象均轉(zhuǎn)換為二次Bezier曲線,則有利于提高字幕的渲染效果,滿足字幕的高級應(yīng)用以及解決現(xiàn)有字幕渲染方法存在的問題。在將不同類型的字幕對象轉(zhuǎn)換為二次Bezier曲線后,在某些應(yīng)用場合下,會出現(xiàn)一個封閉二次Bezier曲線內(nèi)部自相交的情況,例如自繪曲線、字幕對象經(jīng)過旋轉(zhuǎn)或者某些多語種字體中。因此需要對這種情況進(jìn)行處理,刪除或者分割封閉二次Bezier曲線內(nèi)部包含的閉合環(huán)路。不僅如此,在一個字幕對象包含的多個封閉輪廓之間也可能存在相交的情況,需要根據(jù)交點將一條二次貝塞爾線段分割成多條二次貝塞爾線段,然后再根據(jù)二次貝塞爾線段的內(nèi)外邊屬性對封閉輪廓進(jìn)行規(guī)并整理,否則會影響字幕對象的渲染效果和效率。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的是提供一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法。該方法能夠使相交的封閉輪廓進(jìn)行規(guī)并整理后,互不相交,從而提高字幕渲染效率,增強(qiáng)字幕渲染效果。
為達(dá)到以上目的,本發(fā)明采用的技術(shù)方案是一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,包括以下步驟 (1)確定字幕對象所有封閉輪廓中每條二次貝塞爾線段的內(nèi)外邊屬性; (2)將屬性為內(nèi)邊的二次貝塞爾線段刪除; (3)根據(jù)交點重構(gòu)字幕對象的封閉輪廓; (4)計算步驟(3)中獲得的所有封閉輪廓以及所有封閉輪廓中每條二次貝塞爾線段的外接矩形; (5)標(biāo)記步驟(3)中獲得的所有封閉輪廓的方向。
如上所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,步驟(1)中確定二次貝塞爾線段的內(nèi)外邊屬性的方法為判斷二次貝塞爾線段上任意一點在字幕對象所有封閉輪廓中是內(nèi)點還是外點;如果是內(nèi)點,則包含該點的二次貝塞爾線段為內(nèi)邊;如果是外點,則包含該點的二次貝塞爾線段為外邊。
如上所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其中,所述的二次貝塞爾線段上任意一點為二次貝塞爾線段的中點。
如上所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其中,判斷二次貝塞爾線段的中點在字幕對象所有封閉輪廓中是內(nèi)點還是外點的方法包括以下步驟假設(shè)二次貝塞爾線段為B,B的三個控制點分別為P
、P[1]、P[2],中點為Q; ①確定B的方向值d如果P[2].y>P
.y,則d=1;如果P[2].y<P
.y,則d=-1;如果P[2].y=P
.y,則d=0;所述的P
.y和P[2].y分別表示P
和P[2]的縱坐標(biāo); ②計算B的中點Q; ③判斷abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,則以Q點為起點,沿水平方向作一射線H;如否,則以Q點為起點沿豎直方向作一射線H;計算字幕對象所有封閉輪廓中與H相交的除B之外的所有二次貝塞爾線段,假設(shè)有M條二次貝塞爾線段與H相交,分別為B
、B[1]至B[M-1];所述的P
.x和P[2].x分別表示P
和P[2]的橫坐標(biāo),所述的abs函數(shù)為取絕對值函數(shù); ④分別計算B[i]的方向值d[i],方法與步驟①中計算d值的方法相同;所述的i=0、1、.....、M-1; ⑤計算d[i]的和值d′d′=d
+d[1]+......+d[M-1]; ⑥根據(jù)d和d′計算B的內(nèi)外邊屬性值a;如果a=0,則B為內(nèi)邊;如果a=1,則B為外邊; 所述的a=1-abs(SIGN(d+d′)*SIGN(d′)),所述的SIGN(x)定義為(x==0)?0((x>0)?1-1))。
如上所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,步驟(1)中,當(dāng)確定了一個封閉輪廓中的一條二次貝塞爾線段的內(nèi)外邊屬性后,則該封閉輪廓該條二次貝塞爾線段之后的二次貝塞爾線段的內(nèi)外邊屬性與其相同,直到遇到一個交點為止。
如上所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,步驟(4)中計算封閉輪廓中的二次貝塞爾線段和封閉輪廓的外接矩形的方法為 假設(shè)二次貝塞爾線段的三個控制頂點分別為P0、P1和P2,P0點的橫坐標(biāo)為P0.x,縱坐標(biāo)為P0.y;P1點的橫坐標(biāo)為P1.x,縱坐標(biāo)為P1.y;P2點的橫坐標(biāo)為P2.x,縱坐標(biāo)為P2.y;計算由P0、P1和P2構(gòu)成的三角形的外接矩形T,T即為該二次貝塞爾線段的外接矩形,公式如下 T.left=min(P0.x,P1.x,P2.x), T.right=max(P0.x,P1.x,P2.x), T.top=min(P0.y,P1.y,P2.y), T.bottom=max(P0.y,P1.y,P2.y); 其中,T.left表示外接矩形左邊框的橫坐標(biāo),T.right表示外接矩形右邊框的橫坐標(biāo),T.top表示外接矩形上邊框的縱坐標(biāo),T.bottom表示外接矩形下邊框的縱坐標(biāo);min函數(shù)表示取所有參數(shù)中的最小值,max函數(shù)表示取所有參數(shù)中的最大值; 將封閉輪廓中所有的二次貝塞爾線段的外接矩形進(jìn)行合并,便得到該封閉輪廓的外接矩形。
如上所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,步驟(5)中所述的方向包括順時針方向和逆時針方向,將順時針方向標(biāo)記為1,逆時針方向標(biāo)記為-1;標(biāo)記封閉輪廓方向的方法為首先從封閉輪廓中取出任意一條二次貝塞爾線段B,計算封閉輪廓的方向?qū)傩詁的值,b=d*(1-2*abs(d′));如果b>0,則該封閉曲線為順時針方向,否則為逆時針方向。
采用本發(fā)明所述的方法,通過對相交的封閉輪廓進(jìn)行規(guī)并整理,使得封閉輪廓之間互不相交,從而提高了字幕的渲染效率,增強(qiáng)了字幕的渲染效果。
圖1是具體實施方式
中將橢圓圖元轉(zhuǎn)換成由三次Bezier線段組成的封閉輪廓示意圖; 圖2是具體實施方式
中將波浪旗飄圖元轉(zhuǎn)換成由三次Bezier線段組成的封閉輪廓示意圖; 圖3是具體實施方式
中將心形圖元轉(zhuǎn)換成三次Bezier線段組成的封閉輪廓示意圖; 圖4一次Bezier線段轉(zhuǎn)換成二次貝塞爾線段示意圖,4a為轉(zhuǎn)換前的一次Bezier線段示意圖,4b為轉(zhuǎn)換后的二次Bezier線段示意圖; 圖5三次Bezier線段轉(zhuǎn)換成兩條二次Bezier線段示意圖,5a一種三次Bezier線段轉(zhuǎn)換前后的對比示意圖,5b是另一種三次Bezier線段轉(zhuǎn)換前后的對比示意圖; 圖6是具體實施方式
中存在相鄰二次貝塞爾線段自相交情況的封閉輪廓處理前后效果示意圖; 圖7是具體實施方式
中存在非相鄰二次貝塞爾線段自相交情況的封閉輪廓處理前后效果示意圖; 圖8是具體實施方式
中二次貝塞爾線段的外接矩形示意圖; 圖9是具體實施方式
中二次貝塞爾線段中點示意圖; 圖10是具體實施方式
中存在非相鄰二次貝塞爾線段自相交情況的封閉輪廓兩次處理前后效果示意圖; 圖11是具體實施方式
中根據(jù)交點分割字幕對象矢量輪廓中二次貝塞爾曲線的方法流程圖; 圖12是具體實施方式
中計算字幕對象矢量輪廓中所有的二次貝塞爾線段與其他二次貝塞爾線段的交點的方法流程圖; 圖13是本發(fā)明所述的方法流程圖; 圖14是具體實施方式
中確定一條二次貝塞爾線段內(nèi)外邊屬性示意圖。
具體實施例方式 下面結(jié)合具體實施方式
和附圖對本發(fā)明進(jìn)行詳細(xì)描述。
本發(fā)明所述的方法主要應(yīng)用于在將不同類型的字幕對象轉(zhuǎn)換為由二次Bezier線段組成的包括一個或多個封閉輪廓的矢量輪廓信息時,不同的封閉輪廓之間存在相交的二次貝塞爾線段的字幕渲染中。
將不同類型的字幕對象轉(zhuǎn)換為由二次Bezier線段組成的包括一個或多個封閉輪廓的矢量輪廓信息可以采用如下方法。
由于字幕對象的類型包括文字字幕、基本圖形字幕和復(fù)合字幕(包括文字和基本圖形的字幕),因此針對不同類型的字幕對象需要進(jìn)行不同的處理。
如果字幕對象的類型為文字字幕,則可以直接使用操作系統(tǒng)的TrueType字庫,無需轉(zhuǎn)換。其方法主要包括以下步驟 ①根據(jù)文字字幕對象的字體名稱,使用操作系統(tǒng)提供的API(CreateFont)創(chuàng)建邏輯字體對象F; ②使用操作系統(tǒng)提供的API(SelectObject),將邏輯字體對象F設(shè)置到操作系統(tǒng)的資源描述表中,并保存操作系統(tǒng)原來的邏輯字體; ③根據(jù)當(dāng)前字符的Unicode編碼,使用操作系統(tǒng)提供的API(GetGlyphOutline),從操作系統(tǒng)的當(dāng)前資源描述表中獲取當(dāng)前字符的矢量輪廓信息在TrueType字庫中占用的內(nèi)存字節(jié)數(shù)B; ④根據(jù)當(dāng)前字符占用的內(nèi)存字節(jié)數(shù)B,分配內(nèi)存P; ⑤根據(jù)當(dāng)前字符的Unicode編碼和占用的內(nèi)存P,再次使用操作系統(tǒng)提供的API(GetGlyphOutline),從操作系統(tǒng)當(dāng)前資源描述表中獲取當(dāng)前字符的矢量輪廓信息G,并恢復(fù)操作系統(tǒng)原來的邏輯字體。
如果字幕對象的類型為基本圖形字幕,則將其轉(zhuǎn)換成由若干條三次貝塞爾線段組成的封閉輪廓的矢量輪廓信息,主要是根據(jù)基本圖形的幾何參數(shù)確定每條貝塞爾線段上的控制點坐標(biāo),具體包括以下步驟 ①根據(jù)基本圖形字幕的幾何形狀,將基本圖形字幕劃分成多條曲線段,所述的曲線段包括直線段、正玄或余玄曲線段、圓弧段和橢圓弧段; ②根據(jù)基本圖形字幕的外接矩形、每條曲線段的參數(shù)方程計算出每條曲線段轉(zhuǎn)換成三次貝塞爾線段后的起始控制點和結(jié)束控制點的坐標(biāo); ③對每條三次貝塞爾線段,根據(jù)起始控制點和結(jié)束控制點的坐標(biāo)和三次貝塞爾參數(shù)方程,分別計算t=1/3和t=2/3處的另外兩個控制點的坐標(biāo)。
以基本圖形字幕的幾何形狀為橢圓形為例,如圖1所示。首先,根據(jù)橢圓形與其外接矩形的四個交點P100、P103、P106和P109將其分成四條Bezier線段,分別為從P100到P103、從P103到P106、從P106到P109和從P109到P100。從P100到P103的三次Bezier曲線的四個控制點分別為P100、P101、P102和P103,從P103到P106的三次Bezier曲線的四個控制點分別為P103、P104、P105和P106,從P106到P109的三次Bezier曲線的四個控制點分別為P106、P107、P108和P109,從P109到P100的三次Bezier曲線的四個控制點分別為P109、P110、P111和P100。
然后,根據(jù)橢圓圖元的外接矩形的四個頂點坐標(biāo)計算出橢圓中心點的坐標(biāo)(a,b)、橫軸半徑ra和縱軸半徑rb。每條三次貝塞爾線段的各個控制點坐標(biāo)的計算公式如下 令PinA=ra*0.55179445,PinB=rb*0.55179445。
P100.x=a,P100.y=b+rb; P101.x=a+PinA;P101.y=b+rb; P102.x=a+ra;P102.y=b+PinB; P103.x=a+ra;P103.y=b; P104.x=a+ra;P104.y=b-PinB; P105.x=a+PinA;P105.y=b-rb; P106.x=a;P106.y=b-rb; P107.x=a-PinA;P107.y=b-rb; P108.x=a-ra;P108.y=b-PinB; P109.x=a-ra;P109.y=b; P110.x=a-ra;P110.y=b+PinB; P111.x=a-PinA;P111.y=b+rb。
其中,P100.x表示P100點的橫坐標(biāo),P100.y表示P100點的縱坐標(biāo)。本實施方式中,其他類似的表示方式的含義與P100相同。
以基本圖形字幕的幾何形狀為波浪旗飄形為例,如圖2所示。首先,根據(jù)兩條曲線段與兩條直線段的四個交點P200、P203、P206和P209將其分成四條曲線段,分別為從P200到P203、從P203到P206、從P206到P209和從P209到P200。將每條曲線段轉(zhuǎn)換成三次貝塞爾曲線后,從P200到P203的三次Bezier線段的四個控制點分別為P200、P201、P202和P203,從P203到P206的三次Bezier線段的四個控制點分別為P203、P204、P205和P206,從P206到P209的三次Bezier線段的四個控制點分別為P206、P207、P208和P209,從P209到P200的三次Bezier線段的四個控制點分別為P209、P210、P211和P200。
已知波浪旗飄形圖元的外接矩形的四點坐標(biāo),可以計算出該圖元外接矩形的寬度和高度,分別為W2和H2。此外,根據(jù)已知的調(diào)節(jié)波浪旗飄圖元的水平和垂直幅度的參數(shù)fx和fy,可以計算出來P200點的坐標(biāo)為(a,b),a=fx*W,b=fy*H。
每條三次貝塞爾線段上控制點坐標(biāo)的計算過程包括以下步驟。
①基于正玄曲線方程,根據(jù)P200點坐標(biāo)計算出P203點坐標(biāo)。
P203.x=W2; P203.y=b+b*0.9*sin((W2-a)*2*PI/W2)。
②以P200點為起點,以P203點為終點,根據(jù)三次Bezier曲線方程,分別計算t=1/3和t=2/3處的P201點和P202點的坐標(biāo)。
P201.x=((m1*c2-m2*c1)-(a1*c2-a2*c1)*P200.x-(d1*c2-c1*d2)*P203.x)/(b1*c2-b2*c1)。
P202.x=((m1*b2-m2*b1)-(a1*b2-a2*b1)*P200.x-(d1*b2-d2*b1)*P203.x)/(c1*b2-c2*b1)。
其中,m1=a+(W2-a)/3,m2=a+(W2-a)*2/3;t1=1.0/3,t2=2.0/3; a1=(1-t1)*(1-t1)*(1-t1); b1=3*t1*(1-t1)*(1-t1); c1=3*t1*t1*(1-t1); d1=t1*t1*t1; a2=(1-t2)*(1-t2)*(1-t2); b2=3*t2*(1-t2)*(1-t2); c2=3*t2*t2*(1-t2); d2=t2*t2*t2。
P201.y=((n1*c2-n2*c1)-(a1*c2-a2*c1)*P200.y-(d1*c2-c1*d2)*P203.y)/(b1*c2-b2*c1)。
P202.y=((n1*b2-n2*b1)-(a1*b2-a2*b1)*P200.y-(d1*b2-d2*b1)*P203.y)/(c1*b2-c2*b1)。
其中,n1=b-b*0.9*sin((W2-a)*2*PI/(3*W2)), n2=b-b*0.9*sin((W2-a)*2*PI*2/(3*W2))。
③基于正玄曲線方程,根據(jù)P200點坐標(biāo)計算出P206點坐標(biāo)。
P206.x=W2-a; P206.y=H2-b-b*0.9*sin((W2-a)*2*PI/W2) ④計算P209點坐標(biāo)。
P209.x=0; P209.y=H2-b ⑤以P206點為起點,以P209點為終點,根據(jù)三次Bezier曲線方程,分別計算t=1/3和t=2/3處的P207點和P208點坐標(biāo),計算方法與計算P201點、P202點的坐標(biāo)相同。
⑥P204點坐標(biāo)等于P203點坐標(biāo),P205點坐標(biāo)等于P206點坐標(biāo),P210點坐標(biāo)等于P209點坐標(biāo),P211點坐標(biāo)等于P200點坐標(biāo)。之所以要重復(fù)這幾個點,是為了使得該字幕對象的封閉矢量輪廓信息中的每條Bezier線段都是三次Bezier曲線。實際上,由控制點P203、P204、P205、P206形成的三次Bezier曲線,以及由控制點P209、P210、P211、P200形成的三次Bezier曲線是一條直線段。
以基本圖形字幕的幾何形狀為心形為例,如圖3所示。已知心形圖元的外接矩形的四點坐標(biāo),可以計算出該圖元的寬度和高度,分別為W3和H3。首先將該圖元分成8條曲線段,分別為從P300到P303、從P303到P306、從P306到P309、從P309到P312、從P312到P315、從P315到P318、P318到P320,從P320到P300。將每條曲線段轉(zhuǎn)換成三次貝塞爾線段后各個控制點坐標(biāo)的計算過程包括以下步驟。
①首先根據(jù)心形圖元的形狀特點,計算點P300、P303、P306和P309的坐標(biāo)。
P300.x=0.73*W3+0.27*W3*cos(A), P300.y=0.25*H3-0.25*H3*sin(A); P303.x=0.73*W3+0.27*W3*cos(PI/3+A), P303.y=0.25*H3-0.25*H3*sin(PI/3+A); P306.x=0.73*W3+0.27*W3*cos(2*PI/3+A), P306.y=0.25*H3-0.25*H3*sin(2*PI/3+A); P309.x=0.73*W3+0.27*W3*cos(PI+A), P309.y=0.25*H3-0.25*H3*sin(PI+A)。
其中PI和A為常數(shù),PI=3.1415926,A=-0.5535442。
②利用三次Bezier參數(shù)方程,以P300點為起點,以P303點為終點,分別計算t=1/3和t=2/3處的P301點和P302點的坐標(biāo)。三次Bezier曲線的矩陣形式如下 t∈
t∈
t∈
將上面矩陣展開后,得到 X(t)=A0+A1*t+A2*t2+A3*t3 Y(t)=B0+B1*t+B2*t2+B3*t3 其中,A0=X0;A1=-3X0+3X1;A2=3X0-6X1+3X2;A3=-X0+3X1-3X2+X3;B0=Y(jié)0;B1=-3Y0+3Y1;B2=3Y0-6Y1+3Y2;B3=-Y0+3Y1-3Y2+Y3。
由于P300點和P303點的坐標(biāo)X0、X3、Y0、Y3已知,P301點的t值為1/3,P302點的t值為2/3,因此可以列出一個如下四元一次方程組 X1=A0+A1*(1/3)+A2*(1/3)2+A3*(1/3)3 Y1=B0+B1*(1/3)+B2*(1/3)2+B3*(1/3)3 X2=A0+A1*(2/3)+A2*(2/3)2+A3*(2/3)3 Y2=B0+B1*(2/3)+B2*(2/3)2+B3*(2/3)3 解該方程組,即可得到P301和P302點的坐標(biāo)X1、X2、Y1、Y2的值。
③利用三次Bezier參數(shù)方程,以P303點為起點,以P306點為終點,分別計算t=1/3和t=2/3處的P304點和P305點的坐標(biāo)。方法與第③步中求P301、P302的坐標(biāo)相同,不再贅述。
④利用三次Bezier參數(shù)方程,以P306點為起點,以P309點為終點,分別計算t=1/3和t=2/3處的P307點和P308點的坐標(biāo)。方法與第③步中求P301、P302的坐標(biāo)相同,不再贅述。
⑤根據(jù)心形圖元的左右對稱性,可以得到P311、P312、P313、P314、P315、P316、P317和P318的坐標(biāo)。
⑥P320點的坐標(biāo)為(W/2,H)。
⑦P323、P324點的坐標(biāo)等于P300點,P319點的坐標(biāo)等于P318點,P321、P322點的坐標(biāo)等于P320點。
最后,得到8條三次貝塞爾線段組成的矢量輪廓信息。這8條三次貝塞爾線段如下 第一條線段由控制點(P300、P301、P302、P303)形成的三次貝塞爾線段; 第二條線段由控制點(P303、P304、P305、P306)形成的三次貝塞爾線段; 第三條線段由控制點(P306、P307、P308、P309)形成的三次貝塞爾線段; 第四條線段由控制點(P309、P310、P311、P312)形成的三次貝塞爾線段; 第五條線段由控制點(P312、P313、P314、P315)形成的三次貝塞爾線段; 第六條線段由控制點(P315、P316、P317、P318)形成的三次貝塞爾線段; 第七條線段由控制點(P318、P319、P320、P321)形成的三次貝塞爾線段(由于P318、P319的坐標(biāo)相同,P320、P321的坐標(biāo)相同,因此這條線段實際上是一條直線段); 第八條線段由控制點(P321、P322、P323、P324)形成的三次貝塞爾線段(由于P321、P322的坐標(biāo)相同,P323、P324的坐標(biāo)相同,因此這條線段實際上是一條直線段)。
對于其他類型的基本圖形字幕對象,可以按照同樣的思想,將其轉(zhuǎn)換為由一次、二次或者三次Bezier線段組成的封閉輪廓。
當(dāng)字幕對象的類型為復(fù)合字幕時,將其轉(zhuǎn)換成矢量輪廓信息的方法包括以下步驟 ①根據(jù)復(fù)合字幕對象的數(shù)據(jù)結(jié)構(gòu),將其拆分為M(M為正整數(shù))個基本字幕對象。基本字幕對象就是指文字字幕對象或者基本圖形字幕對象。
②分別使用上述“文字字幕對象”和“基本圖形字幕對象”的處理方法得到這M個基本字幕對象的矢量輪廓信息。
③根據(jù)M個基本字幕對象的相對空間坐標(biāo),將步驟②中得到的M個矢量輪廓信息組合在一起,形成該復(fù)合字幕對象的最終矢量輪廓信息。
將字幕對象經(jīng)過上述轉(zhuǎn)換后,還需要根據(jù)字幕對象的旋轉(zhuǎn)、變形參數(shù),將變換后的矢量輪廓信息進(jìn)行空間幾何變換。
假設(shè)字幕對象的旋轉(zhuǎn)角度為A,基本字幕對象的控制點個數(shù)為n(n為正整數(shù)),分別為P
至P[n-1],則對一個基本字幕對象進(jìn)行空間幾何變換的過程包括以下步驟。
a.根據(jù)基本字幕對象的外接矩形的四個頂點坐標(biāo)計算基本字幕對象的中心點Q的坐標(biāo)。
b.按照如下公式修正旋轉(zhuǎn)后的P[i](0≤i≤n,i為正整數(shù))的坐標(biāo) x=P[i].x-Q.x, y=P[i].y-Q.y, P[i].x=Q.x+x*cos(A)-y*sin(A), P[i].y=Q.y+x*sin(A)+y*cos(A); 其中,P[i].x和P[i].y分別為P[i]點橫、縱坐標(biāo),Q.x和Q.y分別為Q點的橫、縱坐標(biāo)。
在將不同類型的字幕對象轉(zhuǎn)換為由一次、二次或三次Bezier曲線組成的封閉輪廓后,為了使渲染引擎在算法處理上的一致性,降低算法的復(fù)雜度,優(yōu)化算法的效率,還需要將不同次數(shù)的Bezier線段統(tǒng)一轉(zhuǎn)換為二次Bezier線段。
將一次Bezier線段轉(zhuǎn)換為二次Bezier線段的原理為將一次Bezier線段的前后兩個控制點R0和R1作為二次Bezier線段的第一和第三個控制點,R0和R1的中點作為二次Bezier線段的第二個控制點。
圖4是一次Bezier線段轉(zhuǎn)換為二次貝塞爾線段示意圖,4a為轉(zhuǎn)換前的一次Bezier線段,4b為轉(zhuǎn)換后的二次Bezier線段。其中,P40=R40,P42=R41,P41=(R40和R41的中點),即P41.x=(R40.x+R41.x)/2;P41.y=(R40.y+R41.y)/2。
將三次Bezier線段轉(zhuǎn)換為二次Bezier線段的原理為將一條三次Bezier線段轉(zhuǎn)換成兩條二次Bezier線段。
圖5中的5a和5b分別是將三次Bezier線段轉(zhuǎn)換為兩條二次Bezier線段的兩種情況示意圖。假設(shè)一個三次Bezier線段的控制點分別為R50、R51、R52、R53。Q1是R50和R51的中點,Q2是R52和R53的中點,Q3是R51和R52的中點,Q4是Q1和Q3的中點,Q5是Q2和Q3的中點,Q6是Q4和Q5的中點,Q7是Q4和Q5構(gòu)成的直線與R0和R1構(gòu)成直線的交點,Q8是Q4和Q5構(gòu)成的直線與R52和R53構(gòu)成直線的交點。
根據(jù)R50、R51、R52、R53四點的坐標(biāo)以及Bezier參數(shù)方程計算出Q1、Q2、Q3、Q4、Q5、Q6、Q7、Q8的坐標(biāo)如下 Q1.x=(R50.x+R51.x)/2,Q1.y=(R50.y+R51.y)/2; Q2.x=(R52.x+R53.x)/2,Q2.y=(R52.y+R53.y)/2; Q3.x=(R51.x+R52.x)/2,Q3.y=(R51.y+R52.y)/2; Q4.x=(Q1.x+Q3.x)/2,Q4.y=(Q1.y+Q3.y)/2; Q5.x=(Q2.x+Q3.x)/2,Q5.y=(Q2.y+Q3.y)/2; Q6.x=(Q4.x+Q5.x)/2,Q6.y=(Q4.y+Q5.y)/2; Q7.x=(3*Q1.x+3*Q4.x-R0.x-Q6.x)/4, Q7.y=(3*Q1.y+3*Q4.y-R0.y-Q6.y)/4; Q8.x=(3*Q2.x+3*Q5.x-R3.x-Q6.x)/4, Q8.y=(3*Q2.y+3*Q5.y-R3.y-Q6.y)/4。
將原來的三次Bezier線段在Q6點處分成兩條二次Bezier線段,一條Bezier線段的三個控制點分別為R50,Q7,Q6,另一條Bezier線段的三個控制點分別為Q6,Q8,R53。
在由二次Bezier曲線組成的封閉輪廓的矢量輪廓信息中,可能存在自相交的二次Bezier線段,即封閉輪廓內(nèi)含一個或多個閉合環(huán)路,如圖6、圖7和圖10所示。為了增強(qiáng)字幕的渲染效果,提高渲染效率,需要對這種情況進(jìn)行處理,刪除或者分割閉合環(huán)路。
處理自相交的二次貝塞爾曲線的方法為首先判斷封閉輪廓G中是否存在二次貝塞爾線段自相交的情況,如果存在,則繼續(xù)判斷是相鄰二次貝塞爾線段自相交還是非相鄰二次貝塞爾線段自相交,如果是相鄰二次貝塞爾線段自相交,則將封閉輪廓G中內(nèi)含的包括相鄰二次貝塞爾線段自相交的閉合環(huán)路刪除;如果是非相鄰的二次貝塞爾線段自相交,則將封閉輪廓G和其內(nèi)含的包括非相鄰二次貝塞爾線段自相交的閉合環(huán)路分割成多個封閉輪廓。
判斷封閉輪廓G中是否存在二次貝塞爾線段自相交的方法為假設(shè)G中有M個二次貝塞爾線段,分別是B
、B[1]、B[2]至B[M-1];依次取出G中每個二次貝塞爾線段B[j],判斷B[j]與G中的其它二次貝塞爾線段是否相交,如果相交,則G存在自相交情況;否則,不存在自相交情況。
判斷兩條二次貝塞爾線段是否相交的方法為首先計算兩條二次貝塞爾線段的外接矩形;然后判斷兩條二次貝塞爾線段的外接矩形是否存在交集,如果存在,則這兩條二次貝塞爾線段相交,如果不存在,則這兩條二次貝塞爾線段不相交。
參照圖8,計算一條二次貝塞爾線段的外接矩形的方法為假設(shè)二次貝塞爾線段的三個控制點分別為P0、P1和P2,P0點的橫坐標(biāo)為P0.x,縱坐標(biāo)為P0.y;P1點的橫坐標(biāo)為P1.x,縱坐標(biāo)為P1.y;P2點的橫坐標(biāo)為P2.x,縱坐標(biāo)為P2.y;計算由P0、P1和P2構(gòu)成的三角形的外接矩形T,T即為該二次貝塞爾線段的外接矩形,公式如下 T.left=min(P0.x,P1.x,P2.x), T.right=max(P0.x,P1.x,P2.x), T.top=min(P0.y,P1.y,P2.y), T.bottom=max(P0.y,P1.y,P2.y); 其中,T.left表示外接矩形左邊框的橫坐標(biāo),T.right表示外接矩形右邊框的橫坐標(biāo),T.top表示外接矩形上邊框的縱坐標(biāo),T.bottom表示外接矩形下邊框的縱坐標(biāo);min函數(shù)表示取所有參數(shù)中的最小值,max函數(shù)表示取所有參數(shù)中的最大值。
如果封閉輪廓G中存在二次貝塞爾線段自相交的情況,則判斷是相鄰二次貝塞爾線段自相交還是非相鄰二次貝塞爾線段自相交的方法為如果B[j]與相鄰線段B[j+1]相交,則是相鄰二次貝塞爾線段自相交,否則是非相鄰二次貝塞爾線段自相交。
參照圖6,如果是相鄰二次貝塞爾線段自相交,則將封閉輪廓G中內(nèi)含的包括自相交的相鄰二次貝塞爾線段的閉合環(huán)路刪除的方法為 假設(shè)G中有M個二次貝塞爾線段,分別是B
、B[1]、B[2]至B[M-1],兩條自相交的相鄰二次貝塞爾線段分別為B[j]和B[j+1];首先計算B[j]和B[j+1]的交點S;然后將B[j]的起始控制點與S相連構(gòu)成一條新的二次貝塞爾線段B[j′],將S與B[j+1]的結(jié)束控制點相連構(gòu)成一條新的二次貝塞爾線段B[j+1′],B[j′]、B[j+1′]與封閉輪廓G中原來的二次貝塞爾線段B
到B[j-1]、B[j+2]到B[M-1]構(gòu)成了一個新的封閉輪廓G′,令G=G′;最后刪除S與B[j]的結(jié)束控制點構(gòu)成的封閉輪廓。圖6中(6a)為處理前的封閉輪廓G,(6b)為處理后的封閉輪廓G,(6c)為刪除的封閉輪廓。
參照圖7,如果是非相鄰二次貝塞爾線段自相交,則將封閉輪廓G和其內(nèi)含的包括自相交的非相鄰二次貝塞爾線段的閉合環(huán)路分割成多個封閉輪廓的方法為 假設(shè)兩條自相交的非相鄰二次貝塞爾線段分別為B[j]和B[k],j<k;首先計算B[j]和B[k]的交點S;然后將B[j]的起始控制點與S相連構(gòu)成一條新的二次貝塞爾線段B[j′],并將S與B[k]的結(jié)束控制點相連構(gòu)成一條新的二次貝塞爾線段B[k′],B[j′]、B[k′]與封閉輪廓G中原來的線段B
到B[j-1]、B[k+1]到B[M-1]構(gòu)成了一個新的封閉輪廓G′,令G=G′;最后將S與B[j]的結(jié)束控制點和B[k]的起始控制點相連,形成了兩條新的二次貝塞爾線段,將這兩條新的二次貝塞爾線段與B[j+1]到B[k-1]中所有的二次貝塞爾線段構(gòu)成了一個新的封閉輪廓G″,將G″加入到字幕對象矢量輪廓信息表。
計算字幕對象矢量輪廓信息中兩條二次Bezier曲線交點的方法,從理論上來說,可以根據(jù)兩條二次Bezier曲線的聯(lián)合參數(shù)方程計算。但這種方法是不可取的,因為不但計算量巨大,而且都是基于浮點數(shù)的運算,算法的效率會比較低。因此,本實施方式采用“二分迭代法”。該方法的核心思想為如果兩條二次Bezier線段相交,那么根據(jù)中點將這兩條二次Bezier線段分別分成兩條二次Bezier線段,得到4條二次Bezier線段;然后再按照同樣的方法,處理這4條線段,直到最終每條線段的起始控制點和結(jié)束控制點的空間直線距離小于某一個值(通常情況下,這個值為
),最終可以歸結(jié)為計算兩條直線段的交點。該方法具體包括以下步驟 (I)假設(shè)兩條相交的二次貝塞爾線段分別為B[j]和B[k],將B[j]和B[k]分別進(jìn)行如下處理 ①計算二次貝塞爾線段的起始控制點與結(jié)束控制點之間的空間直線距離L,
其中,x0、y0為起始控制點橫、縱坐標(biāo),x1和y1為結(jié)束控制點橫、縱坐標(biāo); ②判斷L是否大于M,如果大于,則計算二次貝塞爾線段的中點,將二次貝塞爾線段在中點處劃分成兩條二次貝塞爾線段,所述的
③重復(fù)步驟①至步驟②,直到劃分后的每條二次貝塞爾線段的起始控制點與結(jié)束控制點之間的空間直線距離L小于或等于M; (II)將B[j]和B[k]經(jīng)過步驟(I)處理后,假設(shè)最終相交的兩條二次貝塞爾線段分別為B[j′]和B[k′],計算B[j′]的起始控制點和結(jié)束控制點構(gòu)成的直線與B[k′]的起始控制點和結(jié)束控制點構(gòu)成的直線的交點。
本實施方式中,計算二次貝塞爾線段的中點的方法為假設(shè)二次貝塞爾線段的三個控制點分別為P0、P1和P2,函數(shù)表達(dá)式為 B(t)=(1-t)2P0+2t(1-t)2P1+t2P2 t∈
; 令t=0.5,計算二次貝塞爾曲線方程上的一點,該點便是二次貝塞爾線段的中點,其坐標(biāo)的計算公式為B=(P0+2*P1+P2)/4。
如圖9所示,R1是直線(P0,P1)的中點,R2是直線(P1,P2)的中點,R3是直線(P2,P0)的中點,Q是直線(R1,R2)與直線(R3,P1)的交點。Q點便是二次Bezier曲線(P0,P1,P2)的中點。
R1點橫坐標(biāo)R1.x=(P0.x+P1.x)/2,R1點縱坐標(biāo)R1.y=(P0.y+P1.y)/2;R2點橫坐標(biāo)R2.x=(P1.x+P2.x)/2,R2點縱坐標(biāo)R2.y=(P1.y+P2.y)/2。其中,P0.x、P0.y為P0點橫、縱坐標(biāo);P1.x、P1.y為P1點橫、縱坐標(biāo);P2.x、P2.y為P2點橫、縱坐標(biāo)。
Q點的橫坐標(biāo)Q.x=(R1.x+R2.x)/2=(P0.x+2*P1.x+P2.x)/4,Q點的縱坐標(biāo)Q.y=(R1.y+R2.y)/2=(P0.y+2*P1.y+P2.y)/4。
當(dāng)封閉輪廓G中非相鄰二次貝塞爾線段自相交的情況處理后,分割后的封閉輪廓仍有可能存在自相交的情況。如圖10所示,(10a)所示的封閉輪廓經(jīng)過處理后,將其分割成(10b)、(10c)和(10d)所示的封閉輪廓,其中(10c)所示的封閉輪廓仍然存在自相交的情況,因此需要重復(fù)上述步驟對(10c)所示的封閉輪廓進(jìn)行再處理,直到分割后的所有封閉輪廓中沒有自相交的情況發(fā)生。(10c)所示的封閉輪廓經(jīng)過再處理后,分割成(10c1)和(10c2)兩個封閉輪廓。
在字幕對象的矢量輪廓信息中,不同的封閉輪廓之間可能存在相交的情況,為了有利于字幕對象的后續(xù)渲染,增強(qiáng)字幕對象的最終渲染效果,需要對這種情況進(jìn)行處理,在交點處將一條二次Bezier線段分割成多條二次Bezier線段。
圖11出示了本發(fā)明所述的根據(jù)交點分割字幕對象矢量輪廓中二次貝塞爾曲線的方法,包括以下步驟 (1)計算字幕對象矢量輪廓中所有的二次貝塞爾線段與其他二次貝塞爾線段的交點; (2)在每條二次貝塞爾線段的交點處,將該二次貝塞爾線段分割; 假設(shè)一條二次貝塞爾線段B的三個控制點分別是P
、P[1]、P[2],在B上有n個交點,分別為S
到S[n-1],每個交點對應(yīng)的貝塞爾參數(shù)方程中的t值分別是S
.t到S[n-1].t; 首先在S
點處將線段B分成兩條線段B1和B1′; B1的三個控制點分別為P
、Q
、S
,P
和S
的坐標(biāo)已知,Q
的坐標(biāo)為 Q
.x=(1-t)*P
.x+t*P[1].x, Q
.y=(1-t)*P
.y+t*P[1].y; B1′的三個控制點分別為S
、R
、P[2],S
和P[2]的坐標(biāo)已知,R
的坐標(biāo)為 R
.x=(1-t)*P[1].x+t*P[2].x, R
.y=(1-t)*P[1].y+t*P[2].y; 其中,Q
.x表示Q
點的橫坐標(biāo),Q
.y表示Q
點的縱坐標(biāo),R
.x表示R
點橫坐標(biāo),R
.y表示R
點縱坐標(biāo);t=(S
.t-P
.t)/(P[2].t-P
.t),P
.t為P
點對應(yīng)的貝塞爾參數(shù)方程中的t值,P[2].t為P[2]點對應(yīng)的貝塞爾方程中的t值; 然后在S[1]點處將線段B1′分成兩條線段B2和B2′,方法與步驟①相同; 以此類推,最后在S[n-1]點處將線段Bn-1′分成兩條線段Bn和Bn′;最終得到N+1條分割后的線段。
圖12出示了計算字幕對象矢量輪廓中所有的二次貝塞爾線段與其他二次貝塞爾線段的交點的方法流程,包括以下步驟 ①遍歷字幕對象矢量輪廓中所有的封閉輪廓,取出一個與已取不同的封閉輪廓G[i]; ②遍歷G[i]中所有的二次Bezier線段,取出一個與已取不同的二次貝塞爾線段B[j]; ③遍歷該字幕對象矢量輪廓中除B[j]之外的所有二次貝塞爾線段,取出一個與已取不同的二次貝塞爾線段B[k]; ④判斷B[j]與B[k]的外接矩形是否存在交集,如果不存在,則轉(zhuǎn)至步驟③;如果存在,則計算B[j]與B[k]之間的交點。
計算B[j]與B[k]之間的交點與上述計算自相交的二次貝塞爾線段的交點的原理相同,此處不再贅述。
圖13出示了本發(fā)明所述的根據(jù)二次貝塞爾線段的內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行規(guī)并整理的方法流程,主要包括以下步驟。
(1)確定字幕對象所有封閉輪廓中每條二次貝塞爾線段的內(nèi)外邊屬性。
確定一條二次貝塞爾線段的內(nèi)邊/外邊屬性,只需要確定該條二次貝塞爾線段上的任意一個點在整個字幕對象的矢量輪廓信息中是內(nèi)點還是外點即可,通常情況下可以使用該條線段的中點。如果該線段的中點是內(nèi)點,則該條線段為內(nèi)邊;如果是外點,則該條線段為外邊。
判斷二次貝塞爾線段的中點在字幕對象所有封閉輪廓中是內(nèi)點還是外點的方法包括以下步驟。
假設(shè)二次貝塞爾線段為B,B的三個控制點分別為P
、P[1]、P[2],中點為Q。
①確定B的方向值d如果P[2].y>P
.y,則d=1;如果P [2].y<P
.y,則d=-1;如果P[2].y=P
.y,則d=0。其中,P
.y和P[2].y分別表示P
和P[2]的縱坐標(biāo)。
②計算B的中點Q坐標(biāo)。
③判斷abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,則以Q點為起點,沿水平方向向右作一射線H;如否,則以Q點為起點沿豎直方向向上作一射線H。本實施方式中,假設(shè)沿水平方向向右作一射線H,如圖14所示。計算字幕對象所有封閉輪廓中與H相交的除B之外的所有二次貝塞爾線段,假設(shè)有M條二次貝塞爾線段與H相交,分別為B
、B[1]至B[M-1]。其中,P
.x和P[2].x分別表示P
和P[2]的橫坐標(biāo),abs函數(shù)為取絕對值函數(shù)。
④分別計算B[i]的方向值d[i],方法與步驟①中計算d值的方法相同。其中,i=0、1、......、M-1。
⑤計算d[i]的和值d′d′=d
+d[1]+......+d[M-1]。
⑥根據(jù)d和d′計算B的內(nèi)外邊屬性值a a=1-abs(SIGN(d+d′)*SIGN(d′))。其中,SIGN(x)定義為(x==0)?0((x>0)?1-1)),即如果x=0,則SIGN(x)=0;如果x>0,則SIGN(x)=1;如果x<0,則SIGN(x)=-1。
如果a=0,則B為內(nèi)邊;如果a=1,則B為外邊。
當(dāng)確定了一個封閉輪廓中的一條二次貝塞爾線段的內(nèi)外邊屬性后,則該封閉輪廓該條二次貝塞爾線段之后的二次貝塞爾線段的內(nèi)外邊屬性與其相同,直到遇到一個交點為止。
利用上述方法可以確定所有封閉輪廓中包含的每條二次貝塞爾線段的內(nèi)外邊屬性。
(2)將屬性為內(nèi)邊的二次貝塞爾線段刪除。
當(dāng)確定了矢量輪廓信息中所有的封閉輪廓中包含的每條二次貝塞爾線段的內(nèi)外邊屬性后,刪除所有標(biāo)記為內(nèi)邊的二次貝塞爾線段的方法為在每條二次貝塞爾線段中,都有一個邊界屬性變量表示內(nèi)邊/外邊屬性,遍歷矢量輪廓信息中所有的二次貝塞爾線段,將邊界屬性為內(nèi)邊的二次貝塞爾線段從封閉輪廓中刪除即可。
(3)根據(jù)交點重構(gòu)字幕對象的封閉輪廓。
刪除屬性為內(nèi)邊的二次貝塞爾線段后,需要對所有的封閉輪廓重新進(jìn)行規(guī)并,即根據(jù)交點將二次貝塞爾線段連接起來,重新構(gòu)建每個封閉輪廓。重新構(gòu)建的封閉輪廓一定是互為不相交的封閉輪廓。
規(guī)并一個字幕對象的具體方法包括以下步驟 a.從所有封閉輪廓中取出一個與已取不同的封閉輪廓G1; b.判斷G1的最后一條二次貝塞爾線段的結(jié)束點坐標(biāo)與第一條二次貝塞爾線段的起始點坐標(biāo)的差值是否小于等于閥值T,通常T取0.00001,如是,則G1不需要處理,重復(fù)步驟a至步驟b,直到所有的封閉輪廓被處理完畢; c.取出與G1相鄰的下一個封閉輪廓G2; d.判斷G1的曲線尾與G2的曲線頭或者G1的曲線頭與G2的曲線尾是否重合,即判斷G1的最后一條二次貝塞爾線段的結(jié)束點坐標(biāo)與G2的第一條二次貝塞爾線段的起始點坐標(biāo)的差值或者G1的第一條二次貝塞爾線段的起始點坐標(biāo)與G2的最后一條二次貝塞爾線段的結(jié)束點坐標(biāo)的差值是否小于等于閥值T,如是,則將G1、G2合并,并從矢量輪廓中刪除G2; e.取出與G2相鄰的下一個封閉輪廓G2′,令G2=G2′,重復(fù)步驟d,直到G2為最后一個封閉輪廓或者G2與C1相等; f.重復(fù)步驟a至步驟e,直到所有的封閉輪廓被處理完畢。
上述過程用偽代碼描述如下 G1=矢量輪廓中第一個封閉輪廓; while(G1!=NULL)//遍歷矢量輪廓中所有的封閉輪廓 { while(G1需要重新處理) { G2=G1.Next;//G2是與G1相鄰的下一個封閉輪廓 while(G2?。絅ULL&&G2!=G1) {if(G2需要重新處理){ if(G1的曲線尾與G2的曲線頭重合) {//將G1和G2首尾相連G1.Tail.Next=G2.Head;G1.Head.Prev=G2.Tail;G2.Tail.Next=G1.Head;G2.Head.Prev=G1.Tail;G1.Tail=G2.Tail;G′=G2;G2=G2.Prev;從封閉輪廓鏈表中刪除G′; } elseif(G1的曲線頭與G2的曲線尾重合) {//將G1和G2首尾相連G2.Tail.Next=G1.Head;G2.Head.Prev=G1.Tail;G1.Tail.Next=G2.Head;G1.Head.Prev=G2.Tail;G1.Head=G2.Head;G′=G2;G2=G2.Prev;從封閉輪廓鏈表中刪除G′; }}G2=G2.Next; }}G1=G1.Next; } (4)計算步驟(3)中獲得的所有封閉輪廓以及所有封閉輪廓中每條二次貝塞爾線段的外接矩形,方法同上,此處不再贅述。
(5)標(biāo)記步驟(3)中獲得的所有封閉輪廓的方向,包括順時針方向和逆時針方向。順時針方向標(biāo)記為1,逆時針標(biāo)記為-1。判斷一條封閉曲線G的方向,只需要取出G中任意一條二次貝塞爾線段,判斷其方向即可。具體處理步驟如下 ①從封閉輪廓G中任取一條二次貝塞爾線段為B,假設(shè)B的三個控制點分別為P
、P[1]、P[2],中點為Q; ②確定B的方向值d如果P[2].y>P
.y,則d=1;如果P[2].y<P
.y,則d=-1;如果P[2].y=P
.y,則d=0; ③計算B的中點Q; ④判斷abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,則以Q點為起點,沿水平方向作一射線H;如否,則以Q點為起點沿豎直方向作一射線H;計算字幕對象所有封閉輪廓中與H相交的除B之外的所有二次貝塞爾線段,假設(shè)有M條二次貝塞爾線段與H相交,分別為B
、B[1]至B[M-1]; ⑤分別計算B[i]的方向值d[i],方法與步驟①中計算d值的方法相同;其中,i=0、1、......、M-1; ⑥計算d[i]的和值d′d′=d
+d[1]+......+d[M-1]; ⑦計算B的方向?qū)傩詁的值,b=d*(1-2*abs(d′));如果b>0,則封閉輪廓G為順時針方向,否則為逆時針方向。
本發(fā)明所述的方法并不限于上述具體實施方式
,本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出其他的實施方式,同樣屬于本發(fā)明的技術(shù)創(chuàng)新范圍。
權(quán)利要求
1.一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,包括以下步驟
(1)確定字幕對象所有封閉輪廓中每條二次貝塞爾線段的內(nèi)外邊屬性;
(2)將屬性為內(nèi)邊的二次貝塞爾線段刪除;
(3)根據(jù)交點重構(gòu)字幕對象的封閉輪廓;
(4)計算步驟(3)中獲得的所有封閉輪廓以及所有封閉輪廓中每條二次貝塞爾線段的外接矩形;
(5)標(biāo)記步驟(3)中獲得的所有封閉輪廓的方向。
2.如權(quán)利要求1所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其特征在于,步驟(1)中確定二次貝塞爾線段的內(nèi)外邊屬性的方法為判斷二次貝塞爾線段上任意一點在字幕對象所有封閉輪廓中是內(nèi)點還是外點;如果是內(nèi)點,則包含該點的二次貝塞爾線段為內(nèi)邊;如果是外點,則包含該點的二次貝塞爾線段為外邊。
3.如權(quán)利要求2所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其特征在于所述的二次貝塞爾線段上任意一點為二次貝塞爾線段的中點。
4.如權(quán)利要求3所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其特征在于,判斷二次貝塞爾線段的中點在字幕對象所有封閉輪廓中是內(nèi)點還是外點的方法包括以下步驟假設(shè)二次貝塞爾線段為B,B的三個控制點分別為P
、P[1]、P[2],中點為Q;
①確定B的方向值d如果P[2].y>P
.y,則d=1;如果P[2].y<P
.y,則d=-1;如果P[2].y=P
.y,則d=0;所述的P
.y和P[2].y分別表示P
和P[2]的縱坐標(biāo);
②計算B的中點Q;
③判斷abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,則以Q點為起點,沿水平方向作一射線H;如否,則以Q點為起點沿豎直方向作一射線H;計算字幕對象所有封閉輪廓中與H相交的除B之外的所有二次貝塞爾線段,假設(shè)有M條二次貝塞爾線段與H相交,分別為B
、B[1]至B[M-1];所述的P
.x和P[2].x分別表示P
和P[2]的橫坐標(biāo),所述的abs函數(shù)為取絕對值函數(shù);
④分別計算B[i]的方向值d[i],方法與步驟①中計算d值的方法相同;所述的i=0、1、......、M-1;
⑤計算d[i]的和值d′d′=d
+d[1]+......+d[M-1];
⑥根據(jù)d和d′計算B的內(nèi)外邊屬性值a;如果a=0,則B為內(nèi)邊;如果a=1,則B為外邊;
所述的a=1-abs(SIGN(d+d′)*SIGN(d′)),所述的SIGN(x)定義為(x==0)?0((x>0)?1-1))。
5.如權(quán)利要求4所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其特征在于步驟(1)中,當(dāng)確定了一個封閉輪廓中的一條二次貝塞爾線段的內(nèi)外邊屬性后,則該封閉輪廓該條二次貝塞爾線段之后的二次貝塞爾線段的內(nèi)外邊屬性與其相同,直到遇到一個交點為止。
6.如權(quán)利要求1所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其特征在于,步驟(4)中計算封閉輪廓中的二次貝塞爾線段和封閉輪廓的外接矩形的方法為
假設(shè)二次貝塞爾線段的三個控制頂點分別為P0、P1和P2,P0點的橫坐標(biāo)為P0.x,縱坐標(biāo)為P0.y;P1點的橫坐標(biāo)為P1.x,縱坐標(biāo)為P1.y;P2點的橫坐標(biāo)為P2.x,縱坐標(biāo)為P2.y;計算由P0、P1和P2構(gòu)成的三角形的外接矩形T,T即為該二次貝塞爾線段的外接矩形,公式如下
T.left=min(P0.x,P1.x,P2.x),
T.right=max(P0.x,P1.x,P2.x),
T.top=min(P0.y,P1.y,P2.y),
T.bottom=max(P0.y,P1.y,P2.y);
其中,T.left表示外接矩形左邊框的橫坐標(biāo),T.right表示外接矩形右邊框的橫坐標(biāo),T.top表示外接矩形上邊框的縱坐標(biāo),T.bottom表示外接矩形下邊框的縱坐標(biāo);min函數(shù)表示取所有參數(shù)中的最小值,max函數(shù)表示取所有參數(shù)中的最大值;
將封閉輪廓中所有的二次貝塞爾線段的外接矩形進(jìn)行合并,便得到該封閉輪廓的外接矩形。
7.如權(quán)利要求4所述的一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,其特征在于,步驟(5)中所述的方向包括順時針方向和逆時針方向,將順時針方向標(biāo)記為1,逆時針方向標(biāo)記為-1;標(biāo)記封閉輪廓方向的方法為首先從封閉輪廓中取出任意一條二次貝塞爾線段B,計算封閉輪廓的方向?qū)傩詁的值,b=d*(1-2*abs(d′));如果b>0,則該封閉曲線為順時針方向,否則為逆時針方向。
全文摘要
本發(fā)明公開了一種根據(jù)內(nèi)外邊屬性對字幕對象矢量輪廓進(jìn)行歸并整理的方法,屬于廣電行業(yè)電視節(jié)目制播機(jī)構(gòu)的字幕編播技術(shù)領(lǐng)域。該方法首先確定字幕對象所有封閉輪廓中每條二次貝塞爾線段的內(nèi)外邊屬性,將屬性為內(nèi)邊的二次貝塞爾線段刪除;然后根據(jù)交點重構(gòu)字幕對象的封閉輪廓;再計算所有封閉輪廓中每條二次貝塞爾線段的外接矩形;最后標(biāo)記所有封閉輪廓的方向。采用本發(fā)明所述的方法,能夠使得封閉輪廓之間互不相交,從而提高了字幕的渲染效率,增強(qiáng)了字幕的渲染效果。
文檔編號H04N5/278GK101764944SQ20081022586
公開日2010年6月30日 申請日期2008年11月4日 優(yōu)先權(quán)日2008年11月4日
發(fā)明者吳正斌, 袁慧晶 申請人:新奧特(北京)視頻技術(shù)有限公司