專利名稱:一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法
技術(shù)領(lǐng)域:
本發(fā)明屬于廣電行業(yè)電視節(jié)目制播機(jī)構(gòu)的字幕編播技術(shù)領(lǐng)域,具體涉及一種字幕
對(duì)象矢量輪廓中自相交封閉輪廓的分割方法。
背景技術(shù):
在字幕編播領(lǐng)域中,字幕對(duì)象可分為文字和圖形兩個(gè)部分。文字包括世界上各種
語種的文字,圖形包括各種規(guī)則形狀的圖形、由基本圖形元素組成的復(fù)合圖形和任意不規(guī)
則圖形。從計(jì)算機(jī)圖形學(xué)的角度來說,可以將所有類型的字幕對(duì)象視為由一系列直線和曲
線組成的圖形。圖形通常由點(diǎn)、線、面、體等幾何元素和灰度、色彩、線型、線寬等非幾何屬性
組成。從處理技術(shù)上看,圖形主要分為兩類一類是基于線條信息表示的,如工程圖、等高線
地圖、曲面的線框圖等;另一類是明暗圖,也就是通常所說的真實(shí)感圖形。 字幕渲染是計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)數(shù)字圖像處理與電視臺(tái)的節(jié)目制作業(yè)務(wù)相結(jié)合
的技術(shù)。從計(jì)算機(jī)數(shù)字圖像處理的角度來說,對(duì)字幕對(duì)象的渲染包括兩個(gè)方面第一,基于
像素或子像素的一系列靜態(tài)處理,如圖象增強(qiáng)、二值化處理、邊緣檢測(cè)、模糊處理、浮雕、邊
緣反走樣、亮度貼圖、材質(zhì)貼圖、防抖動(dòng)、橢圓變形、多邊形變形、勾邊、增亮、銳化、柔化、凸
起、彩色鉛筆、油畫龜裂、交叉影線、剪樣、玻璃、邊緣增亮、墨水輪廓畫、瓷磚、信紙、拼綴物、
塑料包裝、水波紋、海綿、噴涂筆、著色玻璃、高斯模糊等特效;第二,基于關(guān)鍵幀的一系列動(dòng)
態(tài)處理,包括水波、旗飄、螺旋、扭曲、三維投影、火焰、球變、三維形變、彎曲、幻影、巻頁、折
疊、禮花、百葉窗、碎裂、水波、波動(dòng)、劃像、轉(zhuǎn)球、螺旋、旗飄、波動(dòng)虛影、蝶變、流光、凸鏡、萬
花筒、激光、飛光、魔幻螺旋、運(yùn)動(dòng)模糊、徑向模糊、波浪、波浪倒影、回旋等特效。 字幕的渲染效果是衡量一個(gè)字幕系統(tǒng)的重要指標(biāo),特別是在反走樣處理、小字的
細(xì)節(jié)處理、立體邊的處理、虛邊、虛影、真實(shí)三維視覺感、三維字倒角、紋理、光照的處理等方面。 在現(xiàn)有的字幕系統(tǒng)中,字幕渲染存在著以下問題 第一,將文本字幕與圖形字幕的渲染區(qū)別開來,而且不同的圖形元素也使用不同 性質(zhì)的幾何矢量來描述。這個(gè)問題在實(shí)現(xiàn)和應(yīng)用兩個(gè)方面給字幕系統(tǒng)帶來了很多的不利。 從實(shí)現(xiàn)的角度來說,會(huì)導(dǎo)致一個(gè)字幕系統(tǒng)中存在多個(gè)完全不同的渲染引擎和渲染流程,而 且如果要支持一種新的字幕對(duì)象,則需要定義并實(shí)現(xiàn)新的渲染引擎,從而造成字幕系統(tǒng)的 功能擴(kuò)展性存在很大的局限性。從應(yīng)用的角度來說,帶來兩方面致命的問題一方面,不同 類型的字幕對(duì)象最終展現(xiàn)的效果不一致,例如兩個(gè)不同類型的字幕對(duì)象同樣是加了 2個(gè)像 素的全邊,但由于經(jīng)過了不同的渲染引擎,最終的處理結(jié)果可能是不同的,在進(jìn)行字幕創(chuàng)作 時(shí)給使用者帶來了諸多不便;另一方面,在字幕系統(tǒng)中針對(duì)字幕對(duì)象的操作不得不進(jìn)行特 定的限制,例如,有的字幕對(duì)象支持幾何旋轉(zhuǎn)、幾何縮放,有的則不支持,有的字幕對(duì)象支持 任意角度的加邊、加影,有的則只支持固定角度的加邊、加影,有的甚至不支持。所有這些問 題都會(huì)影響字幕系統(tǒng)的普遍適用性和功能完備性。 第二,字幕渲染引擎的核心算法都是基于浮點(diǎn)運(yùn)算,例如三角函數(shù)運(yùn)算、反三角函
5數(shù)運(yùn)算、除法運(yùn)算、冪運(yùn)算、開方運(yùn)算等。這會(huì)導(dǎo)致兩方面的問題一方面,由于最終處理結(jié) 果要求的是整數(shù)型的像素值,因此在渲染引擎算法的不同階段會(huì)進(jìn)行取整運(yùn)算,這就會(huì)造 成計(jì)算上的累計(jì)誤差,導(dǎo)致最終的字幕效果在局部細(xì)節(jié)上存在缺陷,例如筆畫多的文字模 糊不清晰、筆畫粘連等;另一方面,這些浮點(diǎn)運(yùn)算都是占用大量機(jī)器指令的數(shù)學(xué)運(yùn)算,大大 降低了整個(gè)字幕系統(tǒng)的工作效率,影響到字幕制作和播出的時(shí)效性,特別是在高清晰度電 視字幕的制作中,由于其數(shù)據(jù)量是標(biāo)清的5倍,這一點(diǎn)表現(xiàn)的更加明顯。 第三,作為字幕渲染重要指標(biāo)之一的邊緣反走樣的效果不甚理想,甚至無法達(dá)到
實(shí)用的程度。這是因?yàn)楝F(xiàn)有的字幕系統(tǒng)在進(jìn)行反走樣處理時(shí),完全依賴當(dāng)前像素空間的圖
像處理方法,沒有字幕幾何矢量信息的參與,也就無法實(shí)現(xiàn)基于子像素的處理,使得現(xiàn)有的
字幕系統(tǒng)的最終渲染效果出現(xiàn)比較明顯的邊緣鋸齒效應(yīng),影響字幕展現(xiàn)的效果。 由于上述同樣的原因,在對(duì)字幕對(duì)象進(jìn)行基于濾鏡管道的圖像處理時(shí),也會(huì)影響
字幕的最終效果?,F(xiàn)有的字幕系統(tǒng)的渲染流程通常是先進(jìn)行面邊影的貼圖,得到一個(gè)圖像,
然后將這個(gè)圖像放入濾鏡管道中,再進(jìn)行一系列的圖像處理。但是由于沒有字幕幾何矢量
信息的參與,濾鏡管道的處理會(huì)破壞前者反走樣后的效果。也就是說,在本來就不理想的邊
緣處理上累積了新的邊緣鋸齒效應(yīng)。 由于上述同樣的原因,對(duì)于稍微復(fù)雜一些的圖形元素的字幕對(duì)象,在圖形拐點(diǎn)處 出現(xiàn)振蕩效應(yīng),導(dǎo)致圖形輪廓不平滑。例如常用的圓角矩形對(duì)象,由四個(gè)角的圓弧與四條直 線組成,在圓弧與直線相接的地方,就會(huì)出現(xiàn)凸凹不平的現(xiàn)象。 第四,一個(gè)字幕對(duì)象在進(jìn)行漸變色渲染時(shí),應(yīng)該是按照這個(gè)物體的矢量輪廓進(jìn)行 徑向的漸變色彩處理,但是在現(xiàn)有的字幕系統(tǒng)中,對(duì)漸變色的渲染處理是將漸變色放到一 個(gè)內(nèi)存塊中,在渲染時(shí),還是采取了對(duì)應(yīng)像素貼圖的方法。這就使得現(xiàn)有的字幕系統(tǒng)無法實(shí) 現(xiàn)真正意義上的漸變色的渲染效果。 第五,現(xiàn)有的字幕系統(tǒng)無法實(shí)現(xiàn)增加多個(gè)外邊、多個(gè)內(nèi)邊、多個(gè)側(cè)面立體邊、多個(gè) 影子。簡(jiǎn)單的面、邊、影的疊加的字幕展現(xiàn)已經(jīng)無法滿足電視節(jié)目制作對(duì)字幕系統(tǒng)的要求。
第六,現(xiàn)有的字幕系統(tǒng)的渲染都不是基于Bezier曲線輪廓,但是由于TrueType 字庫中的字模都是使用Bezier曲線來描述的,所以就需要將從字庫中提取出來的Bezier 曲線轉(zhuǎn)換成另外一種形式的矢量,由于不同矢量表達(dá)式之間的信息不對(duì)稱性,在轉(zhuǎn)換過程 中會(huì)出現(xiàn)信息的損失,從而使得筆畫的形狀變形,導(dǎo)致筆畫粗細(xì)不均勻,影響字型展現(xiàn)的美 觀。 第七,現(xiàn)有的字幕系統(tǒng)無法將文字字幕對(duì)象轉(zhuǎn)換為圖形字幕對(duì)象,從而無法實(shí)現(xiàn) 字符變形、字符倒影、字符反轉(zhuǎn)、曲線擺放、藝術(shù)字等功能,無法滿足高級(jí)的字幕應(yīng)用需求。
第八,現(xiàn)有的字幕系統(tǒng)無法實(shí)現(xiàn)多種不同類型的加邊方式,如尖角邊、圓角邊、方 角邊等,這在一定程度上影響了字幕應(yīng)用的廣泛性。 第九,現(xiàn)有的字幕系統(tǒng)無法實(shí)現(xiàn)對(duì)任意形狀不規(guī)則圖形的支持,從而無法應(yīng)對(duì)日 益重要的地理信息描述、氣象預(yù)報(bào)、綜合資訊等類型的字幕制作。 貝塞爾(Bezier)曲線是計(jì)算機(jī)圖形學(xué)中一種重要的多項(xiàng)式參數(shù)曲線。平面中的 任意N(N〉二 2)個(gè)點(diǎn)都可以構(gòu)成一個(gè)Bezier曲線,這N個(gè)點(diǎn)稱為Bezier曲線的控制點(diǎn), N個(gè)點(diǎn)組成的多邊形稱為Bezier曲線的控制多邊形。N次Bezier曲線的參數(shù)方程如下
<formula>formula see original document page 7</formula>其中,P。、P!、. . 、Pn是Bezier曲線的控制點(diǎn)。
由此,一次Bezier曲線的參數(shù)表達(dá)式為
B(t) = P。+(P「P。)t = (l-t)P。+tP" t G [O,l] —次Bezier曲線就是線性Bezier曲線,實(shí)際上是兩個(gè)控制點(diǎn)P。和P工之間的直線 段。 二次Bezier曲線的參數(shù)表達(dá)式為 B(t) = (1—t)2p。+2t(l-t)P,t2p2, t G [O,l] 三次Bezier曲線的參數(shù)表達(dá)式為 B (t) = P。 (l-t) 3+3P^ (l-t) 2+3P2t2 (l-t) +P3t3, t G
P。、PpP2、P3四個(gè)點(diǎn)在平面或在三維空間中定義了三次Bezier曲線。曲線起始于 P。走向P工,并從P2的方向來到P3。 一般不會(huì)經(jīng)過Pi或P^這兩個(gè)點(diǎn)只提供方向信息。P。和 Pi之間的間距,決定了曲線在轉(zhuǎn)而趨進(jìn)P3之前,走向P2方向的長(zhǎng)度。
Bezier曲線具有如下特性。 (1)無限可分性一條Bezier曲線可在任意點(diǎn)切割成兩條或任意多條子曲線,每 一條子曲線仍是Bezier曲線。 (2)對(duì)稱性保持Bezier曲線全部控制點(diǎn)Pi的坐標(biāo)位置不變,只是將控制點(diǎn)Pi的 排序顛倒,曲線形狀保持不變。這個(gè)性質(zhì)說明Bezier曲線在起點(diǎn)處有什么幾何性質(zhì),在終 點(diǎn)處也有相同的幾何性質(zhì)。 (3)凸包性Bezier曲線位于其控制點(diǎn)的凸包之內(nèi)。 (4)幾何不變性Bezier曲線位置和形狀與其特征多邊形頂點(diǎn)的位置有關(guān),它不 依賴坐標(biāo)系的選擇。 (5)變差縮減性平面內(nèi)任意直線與曲線的交點(diǎn)個(gè)數(shù)不多于該直線與其特征多邊 形的交點(diǎn)個(gè)數(shù)。 (6)端點(diǎn)切矢量Bezier曲線的起點(diǎn)、終點(diǎn)與相應(yīng)的特征多邊形的起點(diǎn)、終點(diǎn)重 合。其起點(diǎn)和終點(diǎn)處的切線方向和特征多邊形的第一條邊及最后一條邊的走向一致。
鑒于上述Bezier曲線的特性,如果將不同類型的字幕對(duì)象均轉(zhuǎn)換為由二次 Bezier線段組成的一個(gè)或多個(gè)封閉輪廓,則有利于提高字幕的渲染效果,滿足字幕的高 級(jí)應(yīng)用以及解決現(xiàn)有字幕渲染方法存在的問題。在將不同類型的字幕對(duì)象轉(zhuǎn)換為由二次 Bezier線段組成的一個(gè)或多個(gè)封閉輪廓后,在一個(gè)字幕對(duì)象的矢量輪廓中,通常不會(huì)出現(xiàn) 一個(gè)封閉輪廓內(nèi)部自相交的情況,但在某些應(yīng)用場(chǎng)合下,會(huì)出現(xiàn)這種情況,例如自繪曲線、 字幕對(duì)象經(jīng)過旋轉(zhuǎn)或者某些多語種字體中。如果不對(duì)這種情況進(jìn)行處理,則會(huì)影響字幕對(duì) 象的最終渲染效果和效率。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的問題,本發(fā)明的目的是提供一種字幕對(duì)象矢量輪廓中自相 交封閉輪廓的分割方法。該方法能夠?qū)⒆帜粚?duì)象的矢量輪廓信息中自相交的封閉輪廓內(nèi)部 包含的閉合環(huán)路刪除或者分割,有利于字幕對(duì)象的后續(xù)渲染。
為實(shí)現(xiàn)以上目的,本發(fā)明采用的技術(shù)方案是一種字幕對(duì)象矢量輪廓中自相交封 閉輪廓的分割方法,包括以下步驟 (1)從字幕對(duì)象矢量輪廓信息表中取出一個(gè)與已取不同的封閉輪廓G ; (2)判斷封閉輪廓G中是否存在二次貝塞爾線段自相交的情況,如果存在,則繼續(xù)
判斷是相鄰二次貝塞爾線段自相交還是非相鄰二次貝塞爾線段自相交,如果是相鄰二次貝
塞爾線段自相交,則將封閉輪廓G中內(nèi)含的包括自相交的相鄰二次貝塞爾線段的閉合環(huán)路
刪除;如果是非相鄰的二次貝塞爾線段自相交,則將封閉輪廓G和其內(nèi)含的包括自相交的
非相鄰二次貝塞爾線段的閉合環(huán)路分割成多個(gè)封閉輪廓; (3)重復(fù)步驟(2),直到封閉輪廓G中所有的自相交情況處理完畢; (4)重復(fù)步驟(1)至步驟(3),直到字幕對(duì)象矢量輪廓信息表中所有的封閉輪廓處
理完畢。 如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,步驟(2)中判 斷封閉輪廓G是否存在二次貝塞爾線段自相交情況的方法為假設(shè)G中有M個(gè)二次貝塞爾 線段,分別是B
、B[1]、B[2]至B[M-1];依次取出G中每個(gè)二次貝塞爾線段B[j],判斷 B[j]與G中的其它二次貝塞爾線段是否相交,如果相交,則G存在自相交情況;否則,不存 在自相交情況。 如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,步驟(2)中假 設(shè)封閉輪廓G中存在二次貝塞爾線段自相交的情況,則判斷是相鄰二次貝塞爾線段自相交 還是非相鄰二次貝塞爾線段自相交的方法為如果B[j]與相鄰線段B[j+l]相交,則是相鄰 二次貝塞爾線段自相交,否則是非相鄰二次貝塞爾線段自相交。 如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其中,判斷兩 條二次貝塞爾線段是否相交的方法為 首先計(jì)算兩條二次貝塞爾線段的外接矩形;然后判斷兩條二次貝塞爾線段的外接 矩形是否存在交集,如果存在,則這兩條二次貝塞爾線段相交,如果不存在,則這兩條二次 貝塞爾線段不相交。 如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其中,計(jì)算一 條二次貝塞爾線段的外接矩形的方法為 假設(shè)二次貝塞爾線段的三個(gè)控制點(diǎn)分別為P0、P1和P2,P0點(diǎn)的橫坐標(biāo)為PO. x,縱 坐標(biāo)為PO. y ;P1點(diǎn)的橫坐標(biāo)為Pl. x,縱坐標(biāo)為PI. y ;P2點(diǎn)的橫坐標(biāo)為P2. x,縱坐標(biāo)為P2. y ; 計(jì)算由P0、P1和P2構(gòu)成的三角形的外接矩形T, T即為該二次貝塞爾線段的外接矩形,公式 如下 T. left = min (PO. x, Pl. x, P2. x),
T. right = max (PO. x, PI. x, P2. x),
T. top = min (PO. y, PI. y, P2. y),
T. bottom = max (P0. y, PI. 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ù)中的最大值。
如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,步驟(2)中所述的將封閉輪廓G中內(nèi)含的包括自相交的相鄰二次貝塞爾線段的閉合環(huán)路刪除的方法為
假設(shè)G中有M個(gè)二次貝塞爾線段,分別是B
、B[1]、B[2]至B [M_l],兩條自相交的相鄰二次貝塞爾線段分別為B[j]和B[j+l];首先計(jì)算B[j]和B[j+l]的交點(diǎn)S;然后將B[j]的起始控制點(diǎn)與S相連構(gòu)成一條新的二次貝塞爾線段B[j'],將S與B[j+l]的結(jié)束控制點(diǎn)相連構(gòu)成一條新的二次貝塞爾線段B[j+l' ],B[j' ]、B[j+l']與封閉輪廓G中原來的二次貝塞爾線段B[O]到B[j-l]、B[j+2]到B[M-1]構(gòu)成了一個(gè)新的封閉輪廓G',令G二G';最后刪除S與B[j]的結(jié)束控制點(diǎn)構(gòu)成的封閉輪廓。 如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,步驟(2)中所述的將封閉輪廓G和其內(nèi)含的包括自相交的非相鄰二次貝塞爾線段的閉合環(huán)路分割成多個(gè)封閉輪廓的方法為 假設(shè)G中有M個(gè)二次貝塞爾線段,分別是B
、B[1]、B[2]至B [M-1],兩條自相交的非相鄰二次貝塞爾線段分別為B[j]和B[k] , j < k ;首先計(jì)算B[j]和B[k]的交點(diǎn)S ;然后將B[j]的起始控制點(diǎn)與S相連構(gòu)成一條新的二次貝塞爾線段B[j'],并將S與B[k]的結(jié)束控制點(diǎn)相連構(gòu)成一條新的二次貝塞爾線段B[k' ],B[j' ]、B[k']與封閉輪廓G中原來的線段B[O]到B[j-l]、B[k+l]到B[M-1]構(gòu)成了一個(gè)新的封閉輪廓G',令G二G';最后將S與B[j]的結(jié)束控制點(diǎn)和B[k]的起始控制點(diǎn)相連,形成了兩條新的二次貝塞爾線段,將這兩條新的二次貝塞爾線段與B[j+l]到B[k-l]中所有的二次貝塞爾線段構(gòu)成了一個(gè)新的封閉輪廓G〃 ,將G〃加入到字幕對(duì)象矢量輪廓信息表中。 如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其中,計(jì)算兩條二次貝塞爾線段的交點(diǎn)的方法包括以下步驟 (I)假設(shè)兩條相交的二次貝塞爾線段分別為B[j]和B[k],將B[j]和B[k]分別進(jìn)行如下處理 ①計(jì)算二次貝塞爾線段的起始控制點(diǎn)與結(jié)束控制點(diǎn)之間的空間直線距離L,L =^(Xl - x0)2 + (y, 一 y。)2 ,其中,xO、y0為起始控制點(diǎn)橫、縱坐標(biāo),xl和yl為結(jié)束控制點(diǎn)橫、縱坐標(biāo); ②判斷L是否大于M,如果大于,則計(jì)算二次貝塞爾線段的中點(diǎn),將二次貝塞爾線段在中點(diǎn)處劃分成兩條二次貝塞爾線段,所述的M二V ; ③重復(fù)步驟①至步驟②,直到劃分后的每條二次貝塞爾線段的起始控制點(diǎn)與結(jié)束控制點(diǎn)之間的空間直線距離L小于或等于M ; (II)將B[j]和B[k]經(jīng)過步驟(I)處理后,假設(shè)最終相交的兩條二次貝塞爾線段分別為B[j']和B[k'],計(jì)算B[j']的起始控制點(diǎn)和結(jié)束控制點(diǎn)構(gòu)成的直線與B[k']的起始控制點(diǎn)和結(jié)束控制點(diǎn)構(gòu)成的直線的交點(diǎn)。 如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其中,所述的計(jì)算二次貝塞爾線段的中點(diǎn)的方法為=假設(shè)二次貝塞爾線段的三個(gè)控制點(diǎn)分別為PO、 Pl和P2,函數(shù)表達(dá)式為 B(t) = (l-t)2p。+2t(l-t)2p一t2p2 t G [O,l]; 令t = 0.5,計(jì)算二次貝塞爾曲線方程上的一點(diǎn),該點(diǎn)便是二次貝塞爾線段的中點(diǎn),其坐標(biāo)的計(jì)算公式為B = (P0+2*Pl+P2)/4。
如上所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,步驟(2)中,如果分割出來的封閉輪廓仍然存在自相交的情況,則重復(fù)步驟(2)對(duì)分割出來的封閉輪廓進(jìn)行再處理,直到分割出來的所有封閉輪廓中均沒有自相交的情況。 本發(fā)明所述的方法,通過將自相交的封閉輪廓內(nèi)含的閉合環(huán)路刪除或者將其從封閉輪廓中分出的方式,避免了字幕對(duì)象矢量輪廓信息中的封閉輪廓出現(xiàn)自相交的情況,有利于提高字幕對(duì)象的后續(xù)渲染效率,并增強(qiáng)字幕對(duì)象的最終渲染效果。
圖1是具體實(shí)施方式
中將橢圓圖元轉(zhuǎn)換成由三次Bezier線段組成的封閉輪廓示意圖; 圖2是具體實(shí)施方式
中將波浪旗飄圖元轉(zhuǎn)換成由三次Bezier線段組成的封閉輪廓示意圖; 圖3是具體實(shí)施方式
中將心形圖元轉(zhuǎn)換成三次Bezier線段組成的封閉輪廓示意圖; 圖4 一次Bezier線段轉(zhuǎn)換成二次貝塞爾線段示意圖,4a為轉(zhuǎn)換前的一次Bezier線段示意圖,4b為轉(zhuǎn)換后的二次Bezier線段示意圖; 圖5三次Bezier線段轉(zhuǎn)換成兩條二次Bezier線段示意圖,5a —種三次Bezier線段轉(zhuǎn)換前后的對(duì)比示意圖,5b是另一種三次Bezier線段轉(zhuǎn)換前后的對(duì)比示意 圖6是本發(fā)明所示的方法流程圖; 圖7是具體實(shí)施方式
中存在相鄰二次貝塞爾線段自相交情況的封閉輪廓處理前后效果示意圖; 圖8是具體實(shí)施方式
中存在非相鄰二次貝塞爾線段自相交情況的封閉輪廓處理前后效果示意圖; 圖9是具體實(shí)施方式
中二次貝塞爾線段的外接矩形示意 圖10是具體實(shí)施方式
中二次貝塞爾線段中點(diǎn)示意圖; 圖11是具體實(shí)施方式
中存在非相鄰二次貝塞爾線段自相交情況的封閉輪廓兩次處理前后效果示意圖。
具體實(shí)施例方式
下面結(jié)合具體實(shí)施方式
和附圖對(duì)本發(fā)明進(jìn)行詳細(xì)描述。 本發(fā)明所述的方法主要應(yīng)用于在將不同類型的字幕對(duì)象轉(zhuǎn)換為由二次Bezier線段組成的包括一個(gè)或多個(gè)封閉輪廓的矢量輪廓信息時(shí),出現(xiàn)自相交的封閉輪廓的字幕渲染中。將不同類型的字幕對(duì)象轉(zhuǎn)換為由二次Bezier線段組成的包括一個(gè)或多個(gè)封閉輪廓的矢量輪廓信息可以采用如下方法。 由于字幕對(duì)象的類型包括文字字幕、基本圖形字幕和復(fù)合字幕(包括文字和基本圖形的字幕),因此針對(duì)不同類型的字幕對(duì)象需要進(jìn)行不同的處理。 如果字幕對(duì)象的類型為文字字幕,則可以直接使用操作系統(tǒng)的TrueType字庫,無需轉(zhuǎn)換。其方法主要包括以下步驟 ①根據(jù)文字字幕對(duì)象的字體名稱,使用操作系統(tǒng)提供的API (CreateFont)創(chuàng)建邏輯字體對(duì)象F ; ②使用操作系統(tǒng)提供的API (SelectObject),將邏輯字體對(duì)象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)原來的邏輯字體。 如果字幕對(duì)象的類型為基本圖形字幕,則將其轉(zhuǎn)換成由若干條三次貝塞爾線段組 成的封閉輪廓的矢量輪廓信息,主要是根據(jù)基本圖形的幾何參數(shù)確定每條貝塞爾線段上的 控制點(diǎn)坐標(biāo),具體包括以下步驟 ①根據(jù)基本圖形字幕的幾何形狀,將基本圖形字幕劃分成多條曲線段,所述的曲 線段包括直線段、正玄或余玄曲線段、圓弧段和橢圓弧段; ②根據(jù)基本圖形字幕的外接矩形、每條曲線段的參數(shù)方程計(jì)算出每條曲線段轉(zhuǎn)換 成三次貝塞爾線段后的起始控制點(diǎn)和結(jié)束控制點(diǎn)的坐標(biāo); ③對(duì)每條三次貝塞爾線段,根據(jù)起始控制點(diǎn)和結(jié)束控制點(diǎn)的坐標(biāo)和三次貝塞爾參 數(shù)方程,分別計(jì)算t = 1/3和t = 2/3處的另外兩個(gè)控制點(diǎn)的坐標(biāo)。 以基本圖形字幕的幾何形狀為橢圓形為例,如圖1所示。首先,根據(jù)橢圓形與其外 接矩形的四個(gè)交點(diǎn)P100、 P103、 P106和P109將其分成四條Bezier線段,分別為從P100到 P103、從P103到P106、從P106到P109和從P109到PIOO。從P100到P103的三次Bezier 曲線的四個(gè)控制點(diǎn)分別為P100、P101、P102和P103,從P103到P106的三次Bezier曲線的 四個(gè)控制點(diǎn)分別為P103、P104、P105和P106,從P106到P109的三次Bezier曲線的四個(gè)控 制點(diǎn)分別為P106、P107、P108和P109,從P109到P100的三次Bezier曲線的四個(gè)控制點(diǎn)分 別為P109、P110、P111和PIOO。 然后,根據(jù)橢圓圖元的外接矩形的四個(gè)頂點(diǎn)坐標(biāo)計(jì)算出橢圓中心點(diǎn)的坐標(biāo)(a,b)、 橫軸半徑ra和縱軸半徑rb。每條三次貝塞爾線段的各個(gè)控制點(diǎn)坐標(biāo)的計(jì)算公式如下令PinA =ra*0. 55179445, PinBrb*0. 55179445P跳x =a,P跳y=b+rb 5P101.x =a+PinA ;P101.y=b+rb 5P102.X =a+ra jP102.y=b+PinB ;P103.X =a+ra jP103.y=b ;P104.X =a+ra jP104.y=b-PinB ;P105.X =a+PinA ;P105.y=b_rb 5P106.X =P106.y=b_rb 5P107.X =a-PinA ;P107.y=b_rb 5P跳X =P跳y=b-PinB ;P109.X =P109.y=b ;
Pill, x = a-PinA ; Plll.y = b+rb。 其中,PIOO. x表示P100點(diǎn)的橫坐標(biāo),P100. y表示P100點(diǎn)的縱坐標(biāo)。本實(shí)施方式 中,其他類似的表示方式的含義與P100相同。 以基本圖形字幕的幾何形狀為波浪旗飄形為例,如圖2所示。首先,根據(jù)兩條曲線 段與兩條直線段的四個(gè)交點(diǎn)P200、P203、P206和P209將其分成四條曲線段,分別為從P200 到P203、從P203到P206、從P206到P 209和從P209到P200。將每條曲線段轉(zhuǎn)換成三次貝 塞爾曲線后,從P200到P203的三次Bezier線段的四個(gè)控制點(diǎn)分別為P200、 P201、 P202和 P203,從P203到P206的三次Bezier線段的四個(gè)控制點(diǎn)分別為P203、 P204、 P205和P206, 從P206到P209的三次Bezier線段的四個(gè)控制點(diǎn)分別為P206、P207、P208和P209,從P209 到P200的三次Bezier線段的四個(gè)控制點(diǎn)分別為P209、 P210、 P211和P200。
已知波浪旗飄形圖元的外接矩形的四點(diǎn)坐標(biāo),可以計(jì)算出該圖元外接矩形的寬度 和高度,分別為W2和H2。此外,根據(jù)已知的調(diào)節(jié)波浪旗飄圖元的水平和垂直幅度的參數(shù)fx 和fy,可以計(jì)算出來P200點(diǎn)的坐標(biāo)為(a, b) , a = fx*W, b = fy*H。
每條三次貝塞爾線段上控制點(diǎn)坐標(biāo)的計(jì)算過程包括以下步驟。
①基于正玄曲線方程,根據(jù)P200點(diǎn)坐標(biāo)計(jì)算出P203點(diǎn)坐標(biāo)。 [O川]P203.x = W2;P203. y = b+b*0. 9*sin ((W2_a) *2*PI/W2)。 ②以P200點(diǎn)為起點(diǎn),以P203點(diǎn)為終點(diǎn),根據(jù)三次Bezier曲線方程,分別計(jì)算t = 1/3和t = 2/3處的P201點(diǎn)和P202點(diǎn)的坐標(biāo)。P201. x = ((m一C2-ni2化》-(E^氺C2 — El2氺C》氺P200.x_-Ci氺d2)氺P203.x)
-b^cj 。P202. x = ((m一Vm2補(bǔ)》-(Eli氺b2 — El2氺b》氺P200.x_-d2氺b》氺P203.x)
-c一b》。其中,=a+(W2-a)/3, m2 =a+(W2_a)*2/3 ;t丄=1/3, t2 =:2. 0/3 ;a! = (1-^)*(1-^)*(1-^);b工=3氺t一(1-、)*(1-1》;c! = 3襯一t一(l-t》;d丄=;a2 = a-t2)*a-t2)*a-t2);b2 = 3*t2*(l-t2)*(l_t2);c2 = 3*t2*t2*(l-t2);d2 = t2*t2*t2。P201. y = ((r^氺C2—ri2氺c》一(E^氺C2 — El2氺C》氺P200.y--Ci氺d2)氺P203. y)
-b^cj 。P202. y = ((r^氺b2—ri2氺b》一(Eli氺b2 — El2氺b》氺P200.y--d2氺b》氺P203.y)
-c一b》。其中,= b-b*0. 9*sin((W2--a)*2*PI/(3*W2)),n2 = b-b*0. 9*sin((W2—a)*2*PI*2/(3*W2))。
12
③基于正玄曲線方程,根據(jù)P200點(diǎn)坐標(biāo)計(jì)算出P206點(diǎn)坐標(biāo)。
P206. x = W2_a;P206. y = H2-b-b*0. 9*sin((W2-a)*2*PI/W2)
④計(jì)算P209點(diǎn)坐標(biāo)。
P209.x = 0;
P209.y = H2_b ⑤以P206點(diǎn)為起點(diǎn),以P209點(diǎn)為終點(diǎn),根據(jù)三次Bezier曲線方程,分別計(jì)算t = 1/3和t = 2/3處的P207點(diǎn)和P208點(diǎn)坐標(biāo),計(jì)算方法與計(jì)算P201點(diǎn)、P202點(diǎn)的坐標(biāo)相同。
P204點(diǎn)坐標(biāo)等于P203點(diǎn)坐標(biāo),P205點(diǎn)坐標(biāo)等于P206點(diǎn)坐標(biāo),P210點(diǎn)坐標(biāo)等 于P209點(diǎn)坐標(biāo),P211點(diǎn)坐標(biāo)等于P200點(diǎn)坐標(biāo)。之所以要重復(fù)這幾個(gè)點(diǎn),是為了使得該字 幕對(duì)象的封閉矢量輪廓信息中的每條Bezier線段都是三次Bezier曲線。實(shí)際上,由控制 點(diǎn)P203、 P204、 P205、 P206形成的三次Bezier曲線,以及由控制點(diǎn)P209、 P210、 P211、 P200 形成的三次Bezier曲線是一條直線段。 以基本圖形字幕的幾何形狀為心形為例,如圖3所示。已知心形圖元的外接矩形 的四點(diǎn)坐標(biāo),可以計(jì)算出該圖元的寬度和高度,分別為W3和H3。首先將該圖元分成8條曲 線段,分別為從P300到P303、從P303到P306、從P306到P309、從P309到P312、從P312到 P315、從P315到P318、 P318到P320,從P320到P300。將每條曲線段轉(zhuǎn)換成三次貝塞爾線 段后各個(gè)控制點(diǎn)坐標(biāo)的計(jì)算過程包括以下步驟。
① 首先根據(jù)心形圖元的形狀特點(diǎn),計(jì)算點(diǎn)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點(diǎn)為起點(diǎn),以P303點(diǎn)為終點(diǎn),分別計(jì)算t = 2/3處的P301點(diǎn)和P302點(diǎn)的坐標(biāo)。三次Bezier曲線的矩陣形式如下
2 _21 「 _2 -l 1 0 0 o 1 1
1/3禾口 t P(X)=
f 1
_3
0
1
2 X(t) = [t3 t2 t 1
-3
0
1
3 0 0
_2 3 0 0
.2 —1
1
0
0 0
600 尸601 尸602 P603
Xo Xi
x2
X3
t
t
13
Y(t)=t3 t2
2_211Yo
一33-2_1Yi
0010Y2
1000Y3 將上面矩陣展開后,得到
X (t) = Ao+A^t+A^f+A^t3
Y(t) = Bo+B^t+B^^+B^t3其中,A。 = X。 ;A丄=—3X。+3X丄;A2 = 3X?!?X一3X2 ;A3 =-3Yo+3Y丄;B2 = 3Y。-6Y,3Y2 ;B3 = -Y0+3Y「3Y2+Y3。 由于P300點(diǎn)和P303點(diǎn)的坐標(biāo)X。、X3、 Y。、 Y3已知,P301點(diǎn)的t值為1/3,P302點(diǎn)的 t值為2/3,因此可以列出一個(gè)如下四元一次方程組
-X0+3X「3X2+X3 ;B0 = Y0 ;B!
Y9
A。 +A^ (1/3) +A2* (1/3) 2+A3* (1/3):
B。 +B^ (1/3) +B2* (1/3) 2+B3* (1/3):
A。 +A^ (2/3) +A2* (2/3) 2+A3* (2/3):
B。 +B^ (2/3) +B2* (2/3) 2+B3* (2/3):
解該方程組,即可得到P301和P302點(diǎn)的坐標(biāo)X2、 Y2的值。 ③利用三次Bezier參數(shù)方程,以P303點(diǎn)為起點(diǎn),以P306點(diǎn)為終點(diǎn),分別計(jì)算t =
1/3和t = 2/3處的P304點(diǎn)和P305點(diǎn)的坐標(biāo)。方法與第③步中求P301、P302的坐標(biāo)相同,
不再贅述。
利用三次Bezier參數(shù)方程,以P306點(diǎn)為起點(diǎn),以P309點(diǎn)為終點(diǎn),分別計(jì)算t = 1/3和t = 2/3處的P307點(diǎn)和P308點(diǎn)的坐標(biāo)。方法與第③步中求P301、P302的坐標(biāo)相同, 不再贅述。 ⑤根據(jù)心形圖元的左右對(duì)稱性,可以得到P311、P312、P313、P314、P315、P316、P317 和P318的坐標(biāo)。
P320點(diǎn)的坐標(biāo)為(W/2, H)。 ⑦P323、 P324點(diǎn)的坐標(biāo)等于P300點(diǎn),P319點(diǎn)的坐標(biāo)等于P318點(diǎn),P321、 P322點(diǎn) 的坐標(biāo)等于P320點(diǎn)。 最后,得到8條三次貝塞爾線段組成的矢量輪廓信息。這8條三次貝塞爾線段如
下
第一條線段由控制點(diǎn)(P300、P301、P302、P303)形成的三次貝塞爾線段 第二條線段由控制點(diǎn)(P303、P304、P305、P306)形成的三次貝塞爾線段 第三條線段由控制點(diǎn)(P306、P307、P308、P309)形成的三次貝塞爾線段 第四條線段由控制點(diǎn)(P309、P310、P311、P312)形成的三次貝塞爾線段 第五條線段由控制點(diǎn)(P312、P313、P314、P315)形成的三次貝塞爾線段 第六條線段由控制點(diǎn)(P315、P316、P317、P318)形成的三次貝塞爾線段 第七條線段由控制點(diǎn)(P318、 P319、 P320、 P321)形成的三次貝塞爾線段(由于 P318、P319的坐標(biāo)相同,P320、P321的坐標(biāo)相同,因此這條線段實(shí)際上是一條直線段);
第八條線段由控制點(diǎn)(P321、 P322、 P323、 P324)形成的三次貝塞爾線段(由于 P321、P322的坐標(biāo)相同,P323、P324的坐標(biāo)相同,因此這條線段實(shí)際上是一條直線段)。
14
對(duì)于其他類型的基本圖形字幕對(duì)象,可以按照同樣的思想,將其轉(zhuǎn)換為由一次、二 次或者三次Bezier線段組成的封閉輪廓。 當(dāng)字幕對(duì)象的類型為復(fù)合字幕時(shí),將其轉(zhuǎn)換成矢量輪廓信息的方法包括以下步 驟 ①根據(jù)復(fù)合字幕對(duì)象的數(shù)據(jù)結(jié)構(gòu),將其拆分為M(M為正整數(shù))個(gè)基本字幕對(duì)象?;?本字幕對(duì)象就是指文字字幕對(duì)象或者基本圖形字幕對(duì)象。 ②分別使用上述"文字字幕對(duì)象"和"基本圖形字幕對(duì)象"的處理方法得到這M個(gè) 基本字幕對(duì)象的矢量輪廓信息。 ③根據(jù)M個(gè)基本字幕對(duì)象的相對(duì)空間坐標(biāo),將步驟②中得到的M個(gè)矢量輪廓信息 組合在一起,形成該復(fù)合字幕對(duì)象的最終矢量輪廓信息。 將字幕對(duì)象經(jīng)過上述轉(zhuǎn)換后,還需要根據(jù)字幕對(duì)象的旋轉(zhuǎn)、變形參數(shù),將變換后的 矢量輪廓信息進(jìn)行空間幾何變換。 假設(shè)字幕對(duì)象的旋轉(zhuǎn)角度為A,基本字幕對(duì)象的控制點(diǎn)個(gè)數(shù)為n(n為正整數(shù)),分 別為P[O]至P[n-l],則對(duì)一個(gè)基本字幕對(duì)象進(jìn)行空間幾何變換的過程包括以下步驟。
a.根據(jù)基本字幕對(duì)象的外接矩形的四個(gè)頂點(diǎn)坐標(biāo)計(jì)算基本字幕對(duì)象的中心點(diǎn)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]點(diǎn)橫、縱坐標(biāo),Q.x和Q.y分別為Q點(diǎn)的橫、縱坐標(biāo)。 在將不同類型的字幕對(duì)象轉(zhuǎn)換為由一次、二次或三次Bezier曲線組成的封閉輪 廓后,為了使渲染引擎在算法處理上的一致性,降低算法的復(fù)雜度,優(yōu)化算法的效率,還需 要將不同次數(shù)的Bezier線段統(tǒng)一轉(zhuǎn)換為二次Bezier線段。 將一次Bezier線段轉(zhuǎn)換為二次Bezier線段的原理為將一次Bezier線段的前后 兩個(gè)控制點(diǎn)RO和Rl作為二次Bezier線段的第一和第三個(gè)控制點(diǎn),RO和Rl的中點(diǎn)作為二 次Bezier線段的第二個(gè)控制點(diǎn)。 圖4是一次Bezier線段轉(zhuǎn)換為二次貝塞爾線段示意圖,4a為轉(zhuǎn)換前的一次 Bezier線段,4b為轉(zhuǎn)換后的二次Bezier線段。其中,P40 = R40, P42 = R41, P41 = (R40 和R41的中點(diǎn)),即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è)一個(gè)三次Bezier線段的控制點(diǎn)分別為R50、R51、R52、R53。 Ql是R50和 R51的中點(diǎn),Q2是R52和R53的中點(diǎn),Q3是R51和R52的中點(diǎn),Q4是Q1和Q3的中點(diǎn),Q5是 Q2和Q3的中點(diǎn),Q6是Q4和Q5的中點(diǎn),Q7是Q4和Q5構(gòu)成的直線與R0和Rl構(gòu)成直線的 交點(diǎn),Q8是Q4和Q5構(gòu)成的直線與R52和R53構(gòu)成直線的交點(diǎn)。
根據(jù)R50、 R51、 R52、 R53四點(diǎn)的坐標(biāo)以及Bezier參數(shù)方程計(jì)算出Ql、 Q2、 Q3、 Q4、 Q5、Q6、Q7、Q8的坐標(biāo)如下: Ql. x = (R50. x+R51. x)/2, Ql. 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 = (Ql. x+Q3. x)/2, Q4. y = (Ql. 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-RO. 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點(diǎn)處分成兩條二次Bezier線段, 一條Bezier線 段的三個(gè)控制點(diǎn)分別為R50, Q7, Q6,另一條Bezier線段的三個(gè)控制點(diǎn)分別為Q6, Q8, R53。
在由二次Bezier曲線組成的封閉輪廓的矢量輪廓信息中,可能存在自相交的二 次Bezier線段,即封閉輪廓內(nèi)含一個(gè)或多個(gè)閉合環(huán)路,如圖7、圖8和圖ll所示。為了增強(qiáng) 字幕的渲染效果,提高渲染效率,需要對(duì)這種情況進(jìn)行處理,刪除或者分割閉合環(huán)路。
圖6出示了本發(fā)明所述的字幕對(duì)象矢量輪廓中自相交的二次貝塞爾曲線的分割 方法流程,包括以下步驟。
(1)從字幕對(duì)象矢量輪廓信息表中取出一個(gè)與已取不同的封閉輪廓G。
(2)判斷封閉輪廓G中是否存在二次貝塞爾線段自相交的情況,如果存在,則繼續(xù)
判斷是相鄰二次貝塞爾線段自相交還是非相鄰二次貝塞爾線段自相交,如果是相鄰二次貝
塞爾線段自相交,則將封閉輪廓G中內(nèi)含的包括相鄰二次貝塞爾線段自相交的閉合環(huán)路刪
除;如果是非相鄰的二次貝塞爾線段自相交,則將封閉輪廓G和其內(nèi)含的包括非相鄰二次
貝塞爾線段自相交的閉合環(huán)路分割成多個(gè)封閉輪廓。 判斷封閉輪廓G中是否存在二次貝塞爾線段自相交的方法為假設(shè)G中有M個(gè) 二次貝塞爾線段,分別是B
、B[1]、B[2]至B[M-1];依次取出G中每個(gè)二次貝塞爾線段 B[j],判斷B[j]與G中的其它二次貝塞爾線段是否相交,如果相交,則G存在自相交情況; 否則,不存在自相交情況。 判斷兩條二次貝塞爾線段是否相交的方法為首先計(jì)算兩條二次貝塞爾線段的外 接矩形;然后判斷兩條二次貝塞爾線段的外接矩形是否存在交集,如果存在,則這兩條二次 貝塞爾線段相交,如果不存在,則這兩條二次貝塞爾線段不相交。
參照?qǐng)D9,計(jì)算一條二次貝塞爾線段的外接矩形的方法為假設(shè)二次貝塞爾線段 的三個(gè)控制點(diǎn)分別為P0、P1和P2,P0點(diǎn)的橫坐標(biāo)為PO. x,縱坐標(biāo)為PO. y ;P1點(diǎn)的橫坐標(biāo)為 PI. x,縱坐標(biāo)為PI. y ;P2點(diǎn)的橫坐標(biāo)為P2. x,縱坐標(biāo)為P2. y ;計(jì)算由P0、P1和P2構(gòu)成的三 角形的外接矩形T, T即為該二次貝塞爾線段的外接矩形,公式如下
T. left = min (PO. x, PI. x, P2. x),
T. right = max(PO. x, PI. x, P2. x),
T. top = min (PO. y, PI. y, P2. y),
16
T. bottom = max (P0. y, PI. 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+l]相
交,則是相鄰二次貝塞爾線段自相交,否則是非相鄰二次貝塞爾線段自相交。 參照?qǐng)D7,如果是相鄰二次貝塞爾線段自相交,則將封閉輪廓G中內(nèi)含的包括自相
交的相鄰二次貝塞爾線段的閉合環(huán)路刪除的方法為 假設(shè)G中有M個(gè)二次貝塞爾線段,分別是B
、B[1]、B[2]至B [M_l],兩條自相交 的相鄰二次貝塞爾線段分別為B[j]和B[j+l];首先計(jì)算B[j]和B[j+l]的交點(diǎn)S;然后將 B[j]的起始控制點(diǎn)與S相連構(gòu)成一條新的二次貝塞爾線段B[j'],將S與B[j+l]的結(jié)束 控制點(diǎn)相連構(gòu)成一條新的二次貝塞爾線段B[j+l' ],B[j' ]、B[j+l']與封閉輪廓G中 原來的二次貝塞爾線段B[O]到B[j-l]、B[j+2]到B[M-1]構(gòu)成了一個(gè)新的封閉輪廓G', 令G二G';最后刪除S與B[j]的結(jié)束控制點(diǎn)構(gòu)成的封閉輪廓。圖7中(7a)為處理前的 封閉輪廓G, (7b)為處理后的封閉輪廓G, (7c)為刪除的封閉輪廓。 參照?qǐng)D8,如果是非相鄰二次貝塞爾線段自相交,則將封閉輪廓G和其內(nèi)含的包括 自相交的非相鄰二次貝塞爾線段的閉合環(huán)路分割成多個(gè)封閉輪廓的方法為
假設(shè)兩條自相交的非相鄰二次貝塞爾線段分別為B[j]和B[k], j < k ;首先計(jì)算 B[j]和B[k]的交點(diǎn)S ;然后將B[j]的起始控制點(diǎn)與S相連構(gòu)成一條新的二次貝塞爾線段 B[j'],并將S與B[k]的結(jié)束控制點(diǎn)相連構(gòu)成一條新的二次貝塞爾線段B[k' ],B[j']、 B[k']與封閉輪廓G中原來的線段B[O]到B[j-l]、B[k+l]到B[M-1]構(gòu)成了一個(gè)新的封 閉輪廓G',令G二G';最后將S與B[j]的結(jié)束控制點(diǎn)和B[k]的起始控制點(diǎn)相連,形成了 兩條新的二次貝塞爾線段,將這兩條新的二次貝塞爾線段與B[j+l]到B[k-l]中所有的二 次貝塞爾線段構(gòu)成了一個(gè)新的封閉輪廓G〃 ,將G〃加入到字幕對(duì)象矢量輪廓信息表。
計(jì)算字幕對(duì)象矢量輪廓信息中兩條二次Bezier曲線交點(diǎn)的方法,從理論上來說, 可以根據(jù)兩條二次Bezier曲線的聯(lián)合參數(shù)方程計(jì)算。但這種方法是不可取的,因?yàn)椴坏?jì) 算量巨大,而且都是基于浮點(diǎn)數(shù)的運(yùn)算,算法的效率會(huì)比較低。因此,本實(shí)施方式采用"二 分迭代法"。該方法的核心思想為如果兩條二次Bezier線段相交,那么根據(jù)中點(diǎn)將這兩條 二次Bezier線段分別分成兩條二次Bezier線段,得到4條二次Bezier線段;然后再按照 同樣的方法,處理這4條線段,直到最終每條線段的起始控制點(diǎn)和結(jié)束控制點(diǎn)的空間直線
距離小于某一個(gè)值(通常情況下,這個(gè)值為V^"),最終可以歸結(jié)為計(jì)算兩條直線段的交點(diǎn)。
該方法具體包括以下步驟 (I)假設(shè)兩條相交的二次貝塞爾線段分別為B[j]和B[k],將B[j]和B[k]分別進(jìn) 行如下處理 ①計(jì)算二次貝塞爾線段的起始控制點(diǎn)與結(jié)束控制點(diǎn)之間的空間直線距離L, L — xo)2 + (y, 一 y0)2 ,其中,x0、y0為起始控制點(diǎn)橫、縱坐標(biāo),xl和yl為
結(jié)束控制點(diǎn)橫、縱坐標(biāo);
17
②判斷L是否大于M,如果大于,則計(jì)算二次貝塞爾線段的中點(diǎn),將二次貝塞爾線 段在中點(diǎn)處劃分成兩條二次貝塞爾線段,所述的M-; ③重復(fù)步驟①至步驟②,直到劃分后的每條二次貝塞爾線段的起始控制點(diǎn)與結(jié)束 控制點(diǎn)之間的空間直線距離L小于或等于M ; (II)將B[j]和B[k]經(jīng)過步驟(I)處理后,假設(shè)最終相交的兩條二次貝塞爾線段 分別為B[j']和B[k'],計(jì)算B[j']的起始控制點(diǎn)和結(jié)束控制點(diǎn)構(gòu)成的直線與B[k'] 的起始控制點(diǎn)和結(jié)束控制點(diǎn)構(gòu)成的直線的交點(diǎn)。 本實(shí)施方式中,計(jì)算二次貝塞爾線段的中點(diǎn)的方法為假設(shè)二次貝塞爾線段的三
個(gè)控制點(diǎn)分別為P0、 PI和P2,函數(shù)表達(dá)式為 B(t) = (l-t)2p。+2t(l-t)2p一t2p2 t G [O,l]; 令t = 0.5,計(jì)算二次貝塞爾曲線方程上的一點(diǎn),該點(diǎn)便是二次貝塞爾線段的中 點(diǎn),其坐標(biāo)的計(jì)算公式為B = (P0+2*Pl+P2)/4。 如圖10所示,Rl是直線(PO, PI)的中點(diǎn),R2是直線(Pl, P2)的中點(diǎn),R3是直線 (P2, PO)的中點(diǎn),Q是直線(R1, R2)與直線(R3, PI)的交點(diǎn)。Q點(diǎn)便是二次Bezier曲線 (P0,P1,P2)的中點(diǎn)。 Rl點(diǎn)橫坐標(biāo)Rl. x = (PO. x+Pl. x) /2, Rl點(diǎn)縱坐標(biāo)Rl. y = (PO. y+Pl. y) /2 ;R2點(diǎn) 橫坐標(biāo)R2. x = (PI. x+P2. x)/2, R2點(diǎn)縱坐標(biāo)R2. y = (PI. y+P2. y)/2。其中,PO. x、PO. y為 PO點(diǎn)橫、縱坐標(biāo);Pl. x、 PI. y為PI點(diǎn)橫、縱坐標(biāo);P2. x、 P2. y為P2點(diǎn)橫、縱坐標(biāo)。
Q點(diǎn)的橫坐標(biāo)Q. x = (Rl. x+R2. x) /2 = (PO. x+2*Pl. x+P2. x) /4, Q點(diǎn)的縱坐標(biāo)Q. y =(Rl. y+R2. y)/2 = (PO. y+2*Pl. y+P2. y)/4。 當(dāng)封閉輪廓G中非相鄰二次貝塞爾線段自相交的情況處理后,分割后的封閉輪廓 仍有可能存在自相交的情況。如圖ll所示,(11a)所示的封閉輪廓經(jīng)過處理后,將其分割 成(llb)、 (11c)和(lid)所示的封閉輪廓,其中(11c)所示的封閉輪廓仍然存在自相交的 情況,因此需要重復(fù)上述步驟對(duì)(11c)所示的封閉輪廓進(jìn)行再處理,直到分割后的所有封 閉輪廓中沒有自相交的情況發(fā)生。(11c)所示的封閉輪廓經(jīng)過再處理后,分割成(llcl)和 (11c2)兩個(gè)封閉輪廓。 (3)重復(fù)步驟(2),直到封閉輪廓G中所有的自相交情況處理完畢。
(4)重復(fù)步驟(1)至步驟(3),直到字幕對(duì)象矢量輪廓信息表中所有的封閉輪廓處
理完畢。 本發(fā)明所述的方法并不限于上述具體實(shí)施方式
,本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技 術(shù)方案得出其他的實(shí)施方式,同樣屬于本發(fā)明的技術(shù)創(chuàng)新范圍。
18
權(quán)利要求
一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,包括以下步驟(1)從字幕對(duì)象矢量輪廓信息表中取出一個(gè)與已取不同的封閉輪廓G;(2)判斷封閉輪廓G中是否存在二次貝塞爾線段自相交的情況,如果存在,則繼續(xù)判斷是相鄰二次貝塞爾線段自相交還是非相鄰二次貝塞爾線段自相交,如果是相鄰二次貝塞爾線段自相交,則將封閉輪廓G中內(nèi)含的包括自相交的相鄰二次貝塞爾線段的閉合環(huán)路刪除;如果是非相鄰二次貝塞爾線段自相交,則將封閉輪廓G和其內(nèi)含的包括自相交的非相鄰二次貝塞爾線段的閉合環(huán)路分割成多個(gè)封閉輪廓;(3)重復(fù)步驟(2),直到封閉輪廓G中所有的自相交情況處理完畢;(4)重復(fù)步驟(1)至步驟(3),直到字幕對(duì)象矢量輪廓信息表中所有的封閉輪廓處理完畢。
2. 如權(quán)利要求1所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其特征 在于,步驟(2)中判斷封閉輪廓G是否存在二次貝塞爾線段自相交情況的方法為假設(shè)G中 有M個(gè)二次貝塞爾線段,分別是B
、B[1]、B[2]至B[M-1];依次取出G中每個(gè)二次貝塞爾 線段B[j],判斷B[j]與G中的其它二次貝塞爾線段是否相交,如果相交,則G中存在自相交 情況;否則,不存在自相交情況。
3. 如權(quán)利要求2所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其特征 在于,步驟(2)中假設(shè)封閉輪廓G中存在二次貝塞爾線段自相交的情況,則判斷是相鄰二 次貝塞爾線段自相交還是非相鄰二次貝塞爾線段自相交的方法為如果B[j]與相鄰線段 B[j+1]相交,則是相鄰二次貝塞爾線段自相交,否則是非相鄰二次貝塞爾線段自相交。
4. 如權(quán)利要求2或3所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其 特征在于,判斷兩條二次貝塞爾線段是否相交的方法為首先計(jì)算兩條二次貝塞爾線段的外接矩形;然后判斷兩條二次貝塞爾線段的外接矩形 是否存在交集,如果存在,則這兩條二次貝塞爾線段相交,如果不存在,則這兩條二次貝塞 爾線段不相交。
5. 如權(quán)利要求4所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其特征 在于,計(jì)算一條二次貝塞爾線段的外接矩形的方法為假設(shè)二次貝塞爾線段的三個(gè)控制點(diǎn)分別為P0、P1和P2,P0點(diǎn)的橫坐標(biāo)為PO. x,縱坐標(biāo) 為PO. y ;P1點(diǎn)的橫坐標(biāo)為PI. x,縱坐標(biāo)為PI. y ;P2點(diǎn)的橫坐標(biāo)為P2. x,縱坐標(biāo)為P2. y ;計(jì) 算由P0、P1和P2構(gòu)成的三角形的外接矩形T, T即為該二次貝塞爾線段的外接矩形,公式如 下T. left = min(PO. x, PI. x, P2. x), T. right = max (PO. x, PI. x, P2. x), T. top = min (PO. y, PI. y, P2. y), T. bottom = max (PO. y, PI. 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ù)中的最大值。
6. 如權(quán)利要求1所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其特征 在于,步驟(2)中所述的將封閉輪廓G中內(nèi)含的包括自相交的相鄰二次貝塞爾線段的閉合環(huán)路刪除的方法為假設(shè)G中有M個(gè)二次貝塞爾線段,分別是B
、B[1]、B[2]至B[M-1],兩條自相交的相 鄰二次貝塞爾線段分別為B[j]和B[j+l];首先計(jì)算B[j]和B[j+l]的交點(diǎn)S;然后將B[j] 的起始控制點(diǎn)與S相連構(gòu)成一條新的二次貝塞爾線段B[j'],將S與B[j+l]的結(jié)束控制 點(diǎn)相連構(gòu)成一條新的二次貝塞爾線段B[j+l' ],B[j' ]、B[j+l']與封閉輪廓G中原來 的二次貝塞爾線段B[O]到B[j-l]、B[j+2]到B[M-1]構(gòu)成了一個(gè)新的封閉輪廓G',令G: G';最后刪除S與B[j]的結(jié)束控制點(diǎn)構(gòu)成的封閉輪廓。
7. 如權(quán)利要求1所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其特征 在于,步驟(2)中所述的將封閉輪廓G和其內(nèi)含的包括自相交的非相鄰二次貝塞爾線段的 閉合環(huán)路分割成多個(gè)封閉輪廓的方法為假設(shè)G中有M個(gè)二次貝塞爾線段,分別是B
、B[1]、B[2]至B[M-1],兩條自相交的非 相鄰二次貝塞爾線段分別為B[j]和B[k],j 〈k;首先計(jì)算B[j]和B[k]的交點(diǎn)S;然后將 B[j]的起始控制點(diǎn)與S相連構(gòu)成一條新的二次貝塞爾線段B[j'],并將S與B[k]的結(jié)束 控制點(diǎn)相連構(gòu)成一條新的二次貝塞爾線段B[k' ],B[j' ]、B[k']與封閉輪廓G中原來 的線段B[O]至ljB[j-l]、B[k+l]到B[M-1]構(gòu)成了一個(gè)新的封閉輪廓G',令G二G';最后 將S與B[j]的結(jié)束控制點(diǎn)和B[k]的起始控制點(diǎn)相連,形成了兩條新的二次貝塞爾線段,將 這兩條新的二次貝塞爾線段與B[j+l]到B[k-l]中所有的二次貝塞爾線段構(gòu)成了一個(gè)新的 封閉輪廓G〃 ,將G〃加入到字幕對(duì)象矢量輪廓信息表中。
8. 如權(quán)利要求6或7所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其 特征在于,計(jì)算兩條二次貝塞爾線段的交點(diǎn)的方法包括以下步驟(I) 假設(shè)兩條相交的二次貝塞爾線段分別為B[j]和B[k],將B[j]和B[k]分別進(jìn)行如 下處理① 計(jì)算二次貝塞爾線段的起始控制點(diǎn)與結(jié)束控制點(diǎn)之間的空間直線距離L, L :^/(x, — x0)2 + - y0)2 ,其中,xO、y0為起始控制點(diǎn)橫、縱坐標(biāo),xl和yl為結(jié)束控制點(diǎn)橫、縱坐標(biāo);② 判斷L是否大于M,如果大于,則計(jì)算二次貝塞爾線段的中點(diǎn),將二次貝塞爾線段在中點(diǎn)處劃分成兩條二次貝塞爾線段,所述的M-V^" ,③ 重復(fù)步驟①至步驟②,直到劃分后的每條二次貝塞爾線段的起始控制點(diǎn)與結(jié)束控制 點(diǎn)之間的空間直線距離L小于或等于M ;(II) 將B[j]和B[k]經(jīng)過步驟(I)處理后,假設(shè)最終相交的兩條二次貝塞爾線段分別 為B[j']和B[k'],計(jì)算B[j']的起始控制點(diǎn)和結(jié)束控制點(diǎn)構(gòu)成的直線段與B[k']的 起始控制點(diǎn)和結(jié)束控制點(diǎn)構(gòu)成的直線段的交點(diǎn)。
9. 如權(quán)利要求8所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其特征 在于,所述的計(jì)算二次貝塞爾線段的中點(diǎn),將二次貝塞爾線段在中點(diǎn)處劃分成兩條二次貝 塞爾線段的方法為假設(shè)二次貝塞爾線段的三個(gè)控制點(diǎn)分別為PO、 Pl和P2,函數(shù)表達(dá)式為B(t) = (l-t)2p。+2t(l—t)2p,t2p2t G [O,l];令t = 0. 5,計(jì)算二次貝塞爾曲線方程上的一點(diǎn)Q,該點(diǎn)便是二次貝塞爾線段的中點(diǎn),其 坐標(biāo)的計(jì)算公式為Q = (P0+2*Pl+P2)/4 ;將該二次貝塞爾曲線從中點(diǎn)Q處分成兩條二次貝塞爾線段,其中一條的三個(gè)控制點(diǎn)分 別為P0、 Rl、 Q,另一條的三個(gè)控制點(diǎn)分別為Q、 R2、 P2。
10.如權(quán)利要求1所述的一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,其特 征在于步驟(2)中,如果分割出來的封閉輪廓仍然存在自相交的情況,則重復(fù)步驟(2)對(duì) 分割出來的封閉輪廓進(jìn)行再處理,直到分割出來的所有封閉輪廓中均沒有自相交的情況。
全文摘要
本發(fā)明公開了一種字幕對(duì)象矢量輪廓中自相交封閉輪廓的分割方法,屬于廣電行業(yè)電視節(jié)目制播機(jī)構(gòu)的字幕編播技術(shù)領(lǐng)域。在將不同類型的字幕對(duì)象轉(zhuǎn)換成二次貝塞爾曲線后,在字幕對(duì)象的矢量輪廓中有可能出現(xiàn)封閉輪廓自相交的情況。本發(fā)明所述的方法當(dāng)字幕對(duì)象的輪廓信息中存在相鄰二次貝塞爾線段自相交時(shí),將封閉輪廓中內(nèi)含的包括相鄰二次貝塞爾線段自相交的閉合環(huán)路刪除;當(dāng)存在非相鄰的二次貝塞爾線段自相交時(shí),則將封閉輪廓和其內(nèi)含的包括非相鄰二次貝塞爾線段自相交的閉合環(huán)路分割成多個(gè)封閉輪廓。從而避免了字幕對(duì)象矢量輪廓信息中的封閉輪廓出現(xiàn)自相交的情況,影響字幕對(duì)象的后續(xù)渲染效果和效率。
文檔編號(hào)G06T1/00GK101764948SQ20081022587
公開日2010年6月30日 申請(qǐng)日期2008年11月4日 優(yōu)先權(quán)日2008年11月4日
發(fā)明者吳正斌, 袁慧晶 申請(qǐng)人:新奧特(北京)視頻技術(shù)有限公司