專(zhuān)利名稱(chēng):一種面片化的garbage mask邊界渲染方法
技術(shù)領(lǐng)域:
本發(fā)明屬于圖像/視頻處理技術(shù),具體涉及一種面片化的garbage mask邊界渲染 方法。
背景技術(shù):
在圖像/視頻處理軟件中,對(duì)圖像/視頻進(jìn)行合成或者特效處理時(shí)進(jìn)行掩模處理 是一種很廣泛的需求。通常這種掩模可以通過(guò)鍵特技生成出來(lái)或者是從一張專(zhuān)用的掩模圖 像獲取出來(lái),但是在很多情況下這樣的掩模是不夠的,還需要用于通過(guò)手工繪制的方法創(chuàng) 建出一個(gè)掩模,這種掩模一般稱(chēng)之為garbage mask。一個(gè)garbage mask由若干有序的端點(diǎn)(end point)構(gòu)成,每?jī)蓚€(gè)連續(xù)的端點(diǎn) 構(gòu)成一條曲線,沿端點(diǎn)順序的前進(jìn)方向叫正方向,反之為逆方向,每個(gè)端點(diǎn)有兩個(gè)控制 點(diǎn)(control point),一個(gè)是正向控制點(diǎn)(forward control point),一個(gè)是逆向控制點(diǎn) (backward control point),正向控制點(diǎn)用于控制其所在端點(diǎn)的正向曲線的形狀,逆向控 制點(diǎn)用于控制其所在端點(diǎn)的逆向曲線的形狀。因此,每一條曲線的形狀由兩個(gè)端點(diǎn)和兩個(gè) 控制點(diǎn)決定,它們實(shí)際上是一條三次Beizer曲線,一個(gè)garbage mask就是由若干條三次 Beizer曲線構(gòu)成的一個(gè)閉合曲線所描述出來(lái)的。用參數(shù)方程來(lái)描述三次Beizer曲線如下χ (t) = ax · t3+bx · t2+cx · t+dxy (t) = ay · t3+by · t2+cy · t+dy上式中t為參數(shù)方程的參數(shù),它的范圍是W,l],ax,bx…一系列系數(shù)是由這條曲線 的端點(diǎn)與控制點(diǎn)的坐標(biāo)決定出來(lái)的。除了有描述一個(gè)garbage mask的基本元素端點(diǎn)和其所規(guī)定的Bezier曲線外,還 要有控制garbage mask邊界形狀的元素,這個(gè)元素稱(chēng)之為邊界點(diǎn)(edg印oint),邊界點(diǎn)有 兩個(gè)屬性位置(position)與距離(distance),位置決定這個(gè)邊界點(diǎn)在garbage mask邊界 曲線上的參數(shù)位置,garbage mask邊界曲線全部由Bezier曲線組成,而邊界點(diǎn)的位置屬性 正是它所位于的Bezier曲線的參數(shù)值(參數(shù)方程的參數(shù)值)加上該Bezier曲線的序號(hào), 比如一個(gè)位置為1. 6的邊界點(diǎn)就意味著它位于garbage mask的第二與第三個(gè)端點(diǎn)所構(gòu)成 的曲線之間(起點(diǎn)為0),而且是在參數(shù)t為0. 6的那個(gè)點(diǎn)上;距離決定了這個(gè)邊界點(diǎn)沿曲 線上面的點(diǎn)的法線方向遠(yuǎn)離曲線的距離,距離為正數(shù)表示這是一個(gè)外部邊界點(diǎn),用來(lái)確定 garbage mask的外邊界形狀;為負(fù)數(shù)則表示這是一個(gè)內(nèi)部邊界點(diǎn),用來(lái)確定garbage mask 的內(nèi)邊界形狀。整個(gè)garbage mask的邊界就是由內(nèi)外邊界點(diǎn)所包絡(luò)出來(lái)的形狀來(lái)決定的。那么,一個(gè)garbage mask的外部和內(nèi)部是如何區(qū)分的呢?在這里,一般用garbage mask中Bezier曲線沿正方向看的左側(cè)還是右側(cè)(或者說(shuō)是逆時(shí)針?lè)较蜻€是順時(shí)針?lè)较? 來(lái)規(guī)定哪邊是garbage mask的外部,并將之叫作外部方向。比如我們規(guī)定曲線的左側(cè)是外 部方向,那么也就是說(shuō)Bezier曲線沿正方向看的左側(cè)是garbage mask的外部區(qū)域,右側(cè)是 內(nèi)部區(qū)域。每一個(gè)邊界點(diǎn)有兩個(gè)坐標(biāo),分別是曲線上坐標(biāo)與邊界上坐標(biāo)。曲線上坐標(biāo)是指這個(gè)邊界點(diǎn)在garbage mask上面的對(duì)應(yīng)的那個(gè)點(diǎn)的坐標(biāo),這可以通過(guò)它的位置屬性與它所在 Bezier曲線的參數(shù)方程直接求出來(lái);邊界上坐標(biāo)是指這個(gè)邊界點(diǎn)沿garbage mask上面的 對(duì)應(yīng)的那個(gè)點(diǎn)的法線方向遠(yuǎn)離曲線其距離屬性那么遠(yuǎn)的那個(gè)點(diǎn)的坐標(biāo),它可以通過(guò)曲線上 坐標(biāo)點(diǎn)的切線方順時(shí)針或者逆時(shí)針旋轉(zhuǎn)90度(對(duì)于外部邊界點(diǎn),如果garbage mask的外部 方向是左側(cè)則逆時(shí)針旋轉(zhuǎn),否則順時(shí)針旋轉(zhuǎn),對(duì)于是內(nèi)部邊界點(diǎn)則正好相反)再偏移其距 離屬性那么遠(yuǎn)來(lái)計(jì)算出其邊界上坐標(biāo)。所以,如果已經(jīng)計(jì)算出一個(gè)邊界點(diǎn)的曲線上坐標(biāo)為 (xo,Yo)并且該點(diǎn)的單位切線矢量為(xt,yt),那么計(jì)算它的邊界上坐標(biāo)的計(jì)算方法如下χ' = x0+dist ‘ (xt · cos( θ )-yt · sin( θ ))y' = y0+dist ‘ (xt · sin ( θ )+yt . cos ( θ ))上式中,dist表示該邊界點(diǎn)距離屬性的絕對(duì)值,θ為-Ji/2或者π/2,這取決于 是順時(shí)針旋轉(zhuǎn)還是逆時(shí)針旋轉(zhuǎn)。圖2顯示了一個(gè)garbage mask以及它的邊界點(diǎn)。圖2中 的garbage mask有5個(gè)端點(diǎn),三個(gè)邊界點(diǎn)。它的外部方向是左側(cè),可以看出邊界點(diǎn)A與邊 界點(diǎn)C是外部邊界點(diǎn)而邊界點(diǎn)B是一個(gè)內(nèi)部邊界點(diǎn)。創(chuàng)建這種garbage mask —般是通過(guò)用戶繪制一個(gè)閉合的曲線,然后填充這個(gè)閉合 曲線得到的灰度圖就是一個(gè)garbage mask。填充一個(gè)閉合曲線之后的灰度圖邊界過(guò)于生 硬,所以需要對(duì)邊界進(jìn)行某種修飾使得它看起來(lái)更平滑,另外一般還要對(duì)邊界過(guò)渡的長(zhǎng)度 進(jìn)行控制使得邊界看上去有一定的厚度,為了實(shí)現(xiàn)這些大多數(shù)軟件往往會(huì)利用到形態(tài)學(xué)的 收縮與膨脹算法以及高斯模糊處理算法,但這樣的實(shí)現(xiàn)方法會(huì)造成當(dāng)模糊程度比較大的時(shí) 候整個(gè)garbage mask看起來(lái)過(guò)于模糊,另外它的邊界也比較固定,缺乏靈活的調(diào)控能力。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)的缺陷,提供一種面片化的garbage mask邊界渲 染方法,使渲染后的garbage mask邊界更加清晰,控制更為靈活。本發(fā)明的技術(shù)方案如下一種面片化的garbage mask邊界渲染方法,包括如下步 驟(1)將garbage mask中的所有Bezier曲線劃分為若干子線段;(2)確定garbage mask的外部方向;(3)根據(jù)邊界點(diǎn)的信息計(jì)算出所有分段點(diǎn)的外部邊界距離以及內(nèi)部邊界距離;(4)以每條Bezier曲線為單位繪制其對(duì)應(yīng)的外/內(nèi)部邊界和其起始端點(diǎn)對(duì)應(yīng)的外 /內(nèi)部角邊界。進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(1)中將 Bezier曲線劃分為若干子線段的方法如下對(duì)于一條Bezier曲線,按1/30為步長(zhǎng)向前 行進(jìn),計(jì)算出當(dāng)前這個(gè)點(diǎn)的位切線矢量,并用這個(gè)矢量與前一個(gè)已確定的分段點(diǎn)的單位切 線矢量進(jìn)行點(diǎn)積計(jì)算,得出的值如果小于閾值cos (2.5 · π/180),則當(dāng)前點(diǎn)就確定為一個(gè) 分段點(diǎn),不然這個(gè)點(diǎn)就忽略過(guò)去,然后繼續(xù)按1/30的步長(zhǎng)向前行進(jìn)重復(fù)這一過(guò)程,直到該 Bezier曲線的末端。進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(2)中確定 garbage mask的外部方向的步驟如下①計(jì)算出garbage mask的包圍盒,然后求出包圍盒的最大y值與最小y值的中間值yc ;②找出y = yc這條水平線與garbage mask上面所有Bezier曲線的交點(diǎn),并且找 出這些交點(diǎn)中最左邊的那個(gè)交點(diǎn);③求出最左邊的那個(gè)交點(diǎn)在其Bezier曲線中的切線矢量,然后與χ軸正方向的單 位矢量進(jìn)行叉積運(yùn)算,如果叉積運(yùn)算結(jié)果的ζ值大于0則外部方向是右側(cè),否則是左側(cè)。進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(3)中計(jì)算 分段點(diǎn)的外部邊界距離以及內(nèi)部邊界距離的方法是從garbage mask上面位置屬性數(shù)值 最小的那個(gè)外/內(nèi)部邊界點(diǎn)開(kāi)始,找到與它相鄰的下一個(gè)外/內(nèi)部邊界點(diǎn),設(shè)這兩個(gè)邊界點(diǎn) 的位置屬性分別為PO和pl,距離屬性分別是d 0與dl,遍歷這兩個(gè)邊界點(diǎn)之間的所有分段 點(diǎn),每個(gè)分段點(diǎn)的外/內(nèi)部邊界距離計(jì)算公式為d = d0+(p-p0)/(pl-p0) · (dl-dO),其中, P為所計(jì)算的分段點(diǎn)的位置。進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(4)中所述 的Bezier曲線起始端點(diǎn)對(duì)應(yīng)的外/內(nèi)部角邊界是指該端點(diǎn)的正向切線與逆向切線方向不 一致所造成的一個(gè)扇面形邊界,這個(gè)扇面形邊界的兩個(gè)腰分別垂直于該端點(diǎn)的正向切線與 逆向切線,腰的長(zhǎng)度為這個(gè)端點(diǎn)的外/內(nèi)部邊界距離;繪制外/內(nèi)部角邊界的方法是將這 個(gè)扇面形邊界劃分為若干三角面片,然后計(jì)算出這些三角面片頂點(diǎn)的灰度值,對(duì)于端點(diǎn)對(duì) 應(yīng)的那個(gè)頂點(diǎn)的灰度值是1,對(duì)于外/內(nèi)部邊界上的頂點(diǎn)灰度值就是0,然后利用gouraud shading著色方法渲染這些三角面片。進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(4)中所述 的繪制Bezier曲線對(duì)應(yīng)的外/內(nèi)部邊界的方法是針對(duì)每一個(gè)子線段,找到位置屬性位于 這個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的所有邊界點(diǎn);得到每一個(gè)邊界點(diǎn)在外/內(nèi)部邊界上 的坐標(biāo);將邊界點(diǎn)在曲線上的坐標(biāo)點(diǎn)以及外/內(nèi)部邊界上的坐標(biāo)點(diǎn)作為三角面片的頂點(diǎn), 計(jì)算出這些三角面片頂點(diǎn)的灰度值;然后利用gouraud shading著色方法渲染這些三角面 片。更進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(4)中繪 制Bezier曲線對(duì)應(yīng)的外部邊界時(shí),對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的外部邊 界點(diǎn),根據(jù)它的曲線上坐標(biāo)與它的距離屬性以及當(dāng)前garbage mask的外部方向來(lái)計(jì)算出它 的外部邊界上坐標(biāo);對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的內(nèi)部邊界點(diǎn),根據(jù)它前 面的廣義外部邊界點(diǎn)與后面的廣義外部邊界點(diǎn)的外部邊界距離進(jìn)行線性插值得到它的外 部邊界距離,進(jìn)而計(jì)算出它的外部邊界上坐標(biāo),所述的廣義外部邊界點(diǎn)包括外部邊界點(diǎn)所 對(duì)應(yīng)的邊界上坐標(biāo)點(diǎn)與分段點(diǎn)對(duì)應(yīng)的外部邊界上坐標(biāo)點(diǎn)。更進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(4)中繪 制Bezier曲線對(duì)應(yīng)的內(nèi)部邊界時(shí),對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的內(nèi)部邊 界點(diǎn),根據(jù)它的曲線上坐標(biāo)與它的距離屬性以及當(dāng)前garbage mask的內(nèi)部方向來(lái)計(jì)算出它 的內(nèi)部邊界上坐標(biāo);對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的外部邊界點(diǎn),根據(jù)它前 面的廣義內(nèi)部邊界點(diǎn)與后面的廣義內(nèi)部邊界點(diǎn)的內(nèi)部邊界距離進(jìn)行線性插值得到它的內(nèi) 部邊界距離,進(jìn)而計(jì)算出它的內(nèi)部邊界上坐標(biāo),所述的廣義內(nèi)部邊界點(diǎn)包括內(nèi)部邊界點(diǎn)所 對(duì)應(yīng)的邊界上坐標(biāo)點(diǎn)與分段點(diǎn)對(duì)應(yīng)的內(nèi)部邊界上坐標(biāo)點(diǎn)。再進(jìn)一步,如上所述的面片化的garbage mask邊界渲染方法,其中,步驟(4)中在繪制Bezier曲線對(duì)應(yīng)的外/內(nèi)部邊界的過(guò)程中,每一個(gè)子線段被其起始和結(jié)束 分段點(diǎn)之間的所有邊界點(diǎn)分成若干段,每一段的外部邊界構(gòu)成一個(gè)四邊形,將每個(gè)四 邊形沿Bezier曲線的走向平均劃分為若干個(gè)子四邊形,劃分的數(shù)量計(jì)算方法如下設(shè) 10代表這個(gè)四邊形前面那個(gè)腰的長(zhǎng)度,11代表后面那個(gè)腰的長(zhǎng)度,那么子四邊形數(shù)量 _ |/1-/0|
count = max(1' ce"((/o+/i) ;得出子四邊形數(shù)量后通過(guò)線性插值計(jì)算出這些子四邊形
--0.2
2
的頂點(diǎn)坐標(biāo)以及灰度值,然后再利用相同的方法對(duì)每個(gè)子四邊形沿Bezier曲線法線方向 再劃分為若干子四邊形,最后就可以將整個(gè)四邊形劃分為若干子四邊形;將每個(gè)子四邊形 劃分為兩個(gè)相鄰的三角面片,利用gouraud shading著色方法渲染這些三角面片。本發(fā)明的有益效果如下本發(fā)明所提供的面片化的garbage mask邊界渲染方法, 實(shí)現(xiàn)了 garbage mask中Bezier曲線的子線段的自適應(yīng)劃分,將每條Bezier曲線對(duì)應(yīng)的 外/內(nèi)部邊界和其起始端點(diǎn)對(duì)應(yīng)的外/內(nèi)部角邊界劃分為若干三角面片,利用gouraud shading著色方法渲染這些三角面片,使渲染的邊界更加平滑、清晰,對(duì)操作的調(diào)控更加靈 活。
圖1為本發(fā)明的方法流程圖;圖2為garbage mask的端點(diǎn)以及邊界點(diǎn)示意圖;圖3為Bezier曲線的端點(diǎn)對(duì)應(yīng)的外部角邊界劃分為三角面片的示意圖;圖4為邊界點(diǎn)及分段點(diǎn)在外邊界和內(nèi)邊界上坐標(biāo)關(guān)系示意圖;圖5為本發(fā)明的渲染效果圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)的描述。如圖1所示,本發(fā)明所提供的一種面片化的garbage mask邊界渲染方法,包括如 下步驟(1)將garbage mask中的所有Bezier曲線劃分為若干子線段;(2)確定garbage mask的外部方向;(3)根據(jù)邊界點(diǎn)的信息計(jì)算出所有分段點(diǎn)的外部邊界距離以及內(nèi)部邊界距離;(4)以每條Bezier曲線為單位繪制其對(duì)應(yīng)的外/內(nèi)部邊界和其起始端點(diǎn)對(duì)應(yīng)的外 /內(nèi)部角邊界。在上述方法中,首先要進(jìn)行g(shù)arbage mask中Beizer曲線的分段。由于為了面片 化的處理邊界的渲染,必須將Bezier曲線劃分為若干條相連的子線段,用這些子線段來(lái)近 似表示這條Beizer曲線,這些線段的連接點(diǎn)稱(chēng)之為分段點(diǎn)(segment point), garbage mask 中的一條Beizer曲線至少有兩個(gè)分段點(diǎn),也就是它的起始端點(diǎn)與結(jié)束端點(diǎn)。最簡(jiǎn)單的將一 條Bezier曲線劃分為若干子線段的方法就是按該Bezier參數(shù)方程的參數(shù)t來(lái)進(jìn)行均勻劃 分,但這樣的話如果分得太多會(huì)造成很多曲率很低的曲線白白劃分了很多分段點(diǎn),降低了 后面一些算法的處理的速度,但如果分得太少的話在曲率很高的情況下又會(huì)導(dǎo)致曲線不夠平滑。本發(fā)明采用動(dòng)態(tài)劃分的方法,具體算法如下對(duì)于一條Bezier曲線,規(guī)定最多劃分 為30個(gè)子線段,也就是說(shuō)分段點(diǎn)之間最小的步長(zhǎng)是1/30,按1/30為步長(zhǎng)向前行進(jìn),計(jì)算出 當(dāng)前這個(gè)點(diǎn)的位切線矢量,并用這個(gè)矢量與前一個(gè)已確定的分段點(diǎn)(t = 0 —定是一個(gè)分段 點(diǎn))的單位切線矢量進(jìn)行點(diǎn)積計(jì)算,得出的值如果小于閾值cos (2. 5 · π /180),則當(dāng)前點(diǎn)就 確定為一個(gè)分段點(diǎn),不然這個(gè)點(diǎn)就忽略過(guò)去,然后不管是哪種情況都繼續(xù)按1/30的步長(zhǎng)向 前進(jìn)重復(fù)這一過(guò)程,直到走到該Bezier曲線的末端(t = 1也一定是一個(gè)分段點(diǎn))。這樣劃 分分段點(diǎn)的好處是如果曲線曲率很低(甚至是一條直線)那么劃分的子線段就會(huì)很少甚至 只有一段,曲線曲率越高劃分的子線段就越多,所以這種方法是自適應(yīng)的。接下來(lái)就要對(duì)garbage mask的外部和內(nèi)部進(jìn)行區(qū)分。本發(fā)明用garbage mask中 Bezier曲線沿正方向看的左側(cè)還是右側(cè)(或者說(shuō)是逆時(shí)針?lè)较蜻€是順時(shí)針?lè)较?來(lái)規(guī)定哪 邊是garbage mask的外部,并將此稱(chēng)作外部方向。比如規(guī)定曲線的左側(cè)是外部方向,那么 也就是說(shuō)Bezier曲線沿正方向看的左側(cè)是garbagemask的外部區(qū)域,右側(cè)是內(nèi)部區(qū)域。為 了確定一個(gè)garbage mask的外部方向,有如下算法①計(jì)算出garbage mask的包圍盒(bounding box),然后求出包圍盒的最大y值與 最小y值的中間值yc。^J Tgarbage mask W^lllll^ ^τ^^^ garbage maskBezier 曲線的包圍盒。具體的求解過(guò)程如下對(duì)于水平方向的最大/最小值,首先計(jì)算出χ(0)與 x(l),然后對(duì)χ (t)求一階導(dǎo)函數(shù),χ' (0=3* 42+2*札4+(^,求解1' (t)=0在 t e
內(nèi)的實(shí)根,然后再將這些實(shí)根對(duì)應(yīng)的函數(shù)值與X(O)和x(l)的值進(jìn)行比較,就可 以得到x(t)在t e
區(qū)間的最大值與最小值,這就是該Bez i er曲線包圍盒的左邊 界與右邊界。同理,計(jì)算y(t)在t e
區(qū)間的最大值與最小值,可以求出包圍盒的上 邊界與下邊界。那么再求解出garbage mask中左右曲線的包圍盒之后,我們就可能根據(jù)這 些包圍盒的最左/最右/最上/最下的邊界值得到整個(gè)garbage mask的包圍盒邊界值。②找出y = yc這條水平線與garbage mask上面所有Bezier曲線的交點(diǎn)(在求 交的過(guò)程中實(shí)際上是求該水平線與該Bezier曲線的子線段的交點(diǎn)),并且找出這些交點(diǎn)中 最左邊的那個(gè)交點(diǎn)。③求出最左邊的那個(gè)交點(diǎn)在其Bezier曲線中的切線矢量,然后與χ軸正方向的單 位矢量進(jìn)行叉積運(yùn)算,如果叉積運(yùn)算結(jié)果的ζ值大于0則外部方向是右側(cè),否則是左側(cè)。在進(jìn)行g(shù)arbage mask邊界的具體渲染之前,還需要計(jì)算所有Bezier曲線上的分 段點(diǎn)所對(duì)應(yīng)的外部邊界距離與內(nèi)部邊界距離,這兩個(gè)數(shù)值是為了構(gòu)成整個(gè)內(nèi)部和外部邊界 曲線用的。由于邊界點(diǎn)只決定了若干個(gè)離散的邊界點(diǎn)的位置,但它無(wú)法確定整個(gè)garbage mask的內(nèi)邊界或者外邊界的形狀,因此還無(wú)法渲染整個(gè)邊界。而分段點(diǎn)所對(duì)應(yīng)的外部邊界 距離與內(nèi)部邊界距離正是為了能夠確定整個(gè)garbage mask的內(nèi)邊界或者外邊界的形狀所 需要的數(shù)據(jù),根據(jù)每個(gè)分段點(diǎn)所對(duì)應(yīng)的外部邊界距離與內(nèi)部邊界距離就可以用與背景技術(shù) 中介紹的計(jì)算邊界點(diǎn)邊界上坐標(biāo)類(lèi)似的方法計(jì)算出每個(gè)分段點(diǎn)對(duì)應(yīng)的內(nèi)外邊界上坐標(biāo),從 而將這些坐標(biāo)點(diǎn)連接起來(lái)構(gòu)成整個(gè)內(nèi)/外邊界。下面就介紹如何計(jì)算每個(gè)分段點(diǎn)所對(duì)應(yīng)的 外部邊界距離與內(nèi)部邊界距離,從garbage mask上面位置屬性數(shù)值最小的那個(gè)外/內(nèi)部邊 界點(diǎn)開(kāi)始,找到與它相鄰的下一個(gè)外/內(nèi)部邊界點(diǎn),假設(shè)這兩個(gè)邊界點(diǎn)的位置屬性分別為 PO和pl,距離屬性(邊界點(diǎn)遠(yuǎn)離邊界的距離)分別是d0與dl,遍歷這兩個(gè)邊界點(diǎn)之間的所有分段點(diǎn),每個(gè)分段的外/內(nèi)部邊界距離可以這樣計(jì)算假設(shè)該分段點(diǎn)的位置為P,那么它 的外/內(nèi)部邊界距離d = d0+(p-p0)/(pl-p0) (dl-dO)。按此法依次處理所有的邊界點(diǎn)直 到最后回到第一個(gè)邊界點(diǎn)即可計(jì)算出所有分段點(diǎn)的外/內(nèi)部邊界距離。下面介紹如何用面片化的方法來(lái)渲染garbage mask的邊界,具體的方法是按順 序遍歷garbage mask中每一個(gè)端點(diǎn)E來(lái)渲染它所對(duì)應(yīng)的正向Bezier曲線所對(duì)應(yīng)的邊界。 分為下面兩個(gè)步驟1)渲染該端點(diǎn)的外/內(nèi)部角邊界角邊界是指該端點(diǎn)的正向切線與逆向切線方向不一致所造成的一個(gè)扇面形邊界, 這個(gè)扇面形邊界的兩個(gè)腰分別垂直于該端點(diǎn)的正向切線與逆向切線,腰的長(zhǎng)度就是這個(gè)端 點(diǎn)的外/內(nèi)部邊界距離,圖3為一個(gè)外部角邊界的示意圖。將這個(gè)扇面形邊界劃分為若干三 角面片,本實(shí)施例中將角邊界劃分為固定的20個(gè)三角面片,然后計(jì)算出這些三角面片頂點(diǎn) 的灰度值,對(duì)于端點(diǎn)對(duì)應(yīng)的那個(gè)頂點(diǎn)的灰度值是1,對(duì)于外部邊界上的頂點(diǎn)灰度值就是0, 然后利用gouraud shading著色方法渲染這些三角面片即可。2)渲染該端點(diǎn)正向曲線的外/內(nèi)部邊界渲染該端點(diǎn)正向曲線的外/內(nèi)部邊界要對(duì)該端點(diǎn)正向曲線的每個(gè)子線段進(jìn)行如 下處理找到位置屬性位于這個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的所有邊界點(diǎn),這些邊界 點(diǎn)有些是外部邊界點(diǎn),有些則是內(nèi)部邊界點(diǎn)。渲染外部邊界時(shí),對(duì)于每一個(gè)子線段的起始 和結(jié)束分段點(diǎn)之間的外部邊界點(diǎn),根據(jù)它的曲線上坐標(biāo)與它的距離屬性以及當(dāng)前garbage mask的外部方向來(lái)計(jì)算出它的外部邊界上坐標(biāo)(參見(jiàn)背景技術(shù)中的描述),它的曲線上坐 標(biāo)點(diǎn)以及邊界上坐標(biāo)點(diǎn)在后面將用作三角面片的頂點(diǎn);對(duì)于每一個(gè)子線段的起始和結(jié)束分 段點(diǎn)之間的內(nèi)部邊界點(diǎn),不能直接使用它的邊界上坐標(biāo)點(diǎn)作為三角面片的頂點(diǎn),因?yàn)樗?方向是反的,需要根據(jù)它前面的廣義外部邊界點(diǎn)(包括外部邊界點(diǎn)所對(duì)應(yīng)的邊界上坐標(biāo)點(diǎn) 與分段點(diǎn)對(duì)應(yīng)的外部邊界上坐標(biāo)點(diǎn))與后面的廣義外部邊界點(diǎn)的外部邊界距離進(jìn)行線性 插值得到它的外部邊界距離,進(jìn)而計(jì)算出它的外部邊界上坐標(biāo),比如某個(gè)內(nèi)部邊界點(diǎn)的位 置屬性為P,它前面的那個(gè)廣義外部邊界點(diǎn)的位置為P0,距離為d0,它后面的那個(gè)廣義外部 邊界點(diǎn)的位置為pl,距離為dl,那么它的外部邊界距離d = d0+(p-p0)/(pl-p0) (dl-dO), 那么這樣就可以計(jì)算出它的外部邊界上坐標(biāo),從而可以使用它的曲線上坐標(biāo)點(diǎn)與外部邊界 上坐標(biāo)點(diǎn)作為三角面片的頂點(diǎn)。渲染Bezier曲線對(duì)應(yīng)的內(nèi)部邊界時(shí),對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之 間的內(nèi)部邊界點(diǎn),根據(jù)它的曲線上坐標(biāo)與它的距離屬性以及當(dāng)前garbagemask的內(nèi)部方向 來(lái)計(jì)算出它的內(nèi)部邊界上坐標(biāo)(參見(jiàn)背景技術(shù)中的描述);對(duì)于每一個(gè)子線段的起始和結(jié) 束分段點(diǎn)之間的外部邊界點(diǎn),根據(jù)它前面的廣義內(nèi)部邊界點(diǎn)與后面的廣義內(nèi)部邊界點(diǎn)的內(nèi) 部邊界距離進(jìn)行線性插值得到它的內(nèi)部邊界距離,進(jìn)而計(jì)算出它的內(nèi)部邊界上坐標(biāo),具體 方法與上述渲染外部邊界時(shí)的情況類(lèi)似。圖4顯示了一個(gè)具體實(shí)例,從圖4中可以看出,在兩個(gè)連續(xù)的分段點(diǎn)之間有3個(gè) 邊界點(diǎn),其中有兩個(gè)外部邊界點(diǎn),有一個(gè)內(nèi)部邊界點(diǎn)。這樣就把這條線段分成了 4段,每一 段的外部邊界可以構(gòu)成一個(gè)四邊形,接下來(lái)就是要渲染這些四邊形。但在渲染之前首先要 確定這些四邊形頂點(diǎn)的灰度值。對(duì)于位于外邊界上的頂點(diǎn)其灰度值一定是0 ;對(duì)于位于曲 線上的頂點(diǎn)則需要用其外部邊界距離與內(nèi)部邊界距離的比例在0到1之間進(jìn)行線性插值得
9到。注意外部邊界點(diǎn)在內(nèi)部邊界上坐標(biāo)點(diǎn)的邊界距離或內(nèi)部邊界點(diǎn)在外部邊界上坐標(biāo)點(diǎn) 的邊界距離是通過(guò)其相鄰的廣義內(nèi)/外邊界點(diǎn)的邊界距離插值得到的,比如內(nèi)部邊界點(diǎn)C 的外部邊界距離就是由外部邊界點(diǎn)A與外部邊界點(diǎn)B的外部邊界距離插值得到的。那么下面就是要渲染這些四邊形了,本發(fā)明不是用簡(jiǎn)單地將這些四邊形分成兩個(gè) 三角面片的方法來(lái)渲染它,因?yàn)樵谟行┣闆r下會(huì)出現(xiàn)兩個(gè)三角面片的臨界處有明顯的階梯 感的情況,因此要將這些四邊形再進(jìn)一步細(xì)分為若干子四邊形,細(xì)分方法如下首先將這個(gè) 四邊形沿Bezier曲線的走向平均劃分為若干個(gè)子四邊形,具體劃分的數(shù)量可以這樣計(jì)算 假設(shè)10代表這個(gè)四邊形前面那個(gè)腰的長(zhǎng)度,11代表后面那個(gè)腰的長(zhǎng)度,那么子四邊形數(shù)量
— /01
count = maxcicezzcWiTiyTT^。得出子四邊形數(shù)量后就可以通過(guò)線性插值計(jì)算出這些子
----- 0.2
2
四邊形的頂點(diǎn)坐標(biāo)以及灰度值。然后再利用類(lèi)似的方法對(duì)每個(gè)子四邊形沿Bezier曲線法 線方向劃分為若干子四邊形,最后就可以將整個(gè)四邊形劃分為若干子四邊形。之后將每個(gè) 子四邊形劃分為兩個(gè)相鄰的三角面片然后利用gouraud shading著色方法渲染這些三角面 片即可。本發(fā)明所述的方法并不限于具體實(shí)施方式
中所述的實(shí)施例,本領(lǐng)域技術(shù)人員根據(jù) 本發(fā)明的技術(shù)方案得出其他的實(shí)施方式,同樣屬于本發(fā)明的創(chuàng)新范圍。
10
權(quán)利要求
一種面片化的garbage mask邊界渲染方法,包括如下步驟(1)將garbage mask中的所有Bezier曲線劃分為若干子線段;(2)確定garbage mask的外部方向;(3)根據(jù)邊界點(diǎn)的信息計(jì)算出所有分段點(diǎn)的外部邊界距離以及內(nèi)部邊界距離;(4)以每條Bezier曲線為單位繪制其對(duì)應(yīng)的外/內(nèi)部邊界和其起始端點(diǎn)對(duì)應(yīng)的外/內(nèi)部角邊界。
2.如權(quán)利要求1所述的面片化的garbagemask邊界渲染方法,其特征在于步驟(1) 中將Bezier曲線劃分為若干子線段的方法如下對(duì)于一條Bezier曲線,按1/30為步長(zhǎng)向 前行進(jìn),計(jì)算出當(dāng)前這個(gè)點(diǎn)的位切線矢量,并用這個(gè)矢量與前一個(gè)已確定的分段點(diǎn)的單位 切線矢量進(jìn)行點(diǎn)積計(jì)算,得出的值如果小于閾值cos(2. 5 · π/180),則當(dāng)前點(diǎn)就確定為一 個(gè)分段點(diǎn),不然這個(gè)點(diǎn)就忽略過(guò)去,然后繼續(xù)按1/30的步長(zhǎng)向前行進(jìn)重復(fù)這一過(guò)程,直到 該Bezier曲線的末端。
3.如權(quán)利要求1或2所述的面片化的garbagemask邊界渲染方法,其特征在于步驟 (2)中確定garbage mask的外部方向的步驟如下①計(jì)算出garbagemask的包圍盒,然后求出包圍盒的最大y值與最小y值的中間值yc ;②找出y= yc這條水平線與garbage mask上面所有Bezier曲線的交點(diǎn),并且找出這 些交點(diǎn)中最左邊的那個(gè)交點(diǎn);③求出最左邊的那個(gè)交點(diǎn)在其Bezier曲線中的切線矢量,然后與χ軸正方向的單位矢 量進(jìn)行叉積運(yùn)算,如果叉積運(yùn)算結(jié)果的ζ值大于0則外部方向是右側(cè),否則是左側(cè)。
4.如權(quán)利要求1或2所述的面片化的garbagemask邊界渲染方法,其特征在于步 驟(3)中計(jì)算分段點(diǎn)的外部邊界距離以及內(nèi)部邊界距離的方法是從garbage mask上 面位置屬性數(shù)值最小的那個(gè)外/內(nèi)部邊界點(diǎn)開(kāi)始,找到與它相鄰的下一個(gè)外/內(nèi)部邊界 點(diǎn),設(shè)這兩個(gè)邊界點(diǎn)的位置屬性分別為PO和pl,距離屬性分別是d0與dl,遍歷這兩個(gè) 邊界點(diǎn)之間的所有分段點(diǎn),每個(gè)分段點(diǎn)的外/內(nèi)部邊界距離計(jì)算公式為d = d0+(p-p0)/ (pl-pO) · (dl-dO),其中,ρ為所計(jì)算的分段點(diǎn)的位置。
5.如權(quán)利要求1或2所述的面片化的garbagemask邊界渲染方法,其特征在于步驟 (4)中所述的Bezier曲線起始端點(diǎn)對(duì)應(yīng)的外/內(nèi)部角邊界是指該端點(diǎn)的正向切線與逆向 切線方向不一致所造成的一個(gè)扇面形邊界,這個(gè)扇面形邊界的兩個(gè)腰分別垂直于該端點(diǎn)的 正向切線與逆向切線,腰的長(zhǎng)度為這個(gè)端點(diǎn)的外/內(nèi)部邊界距離;繪制外/內(nèi)部角邊界的方 法是將這個(gè)扇面形邊界劃分為若干三角面片,然后計(jì)算出這些三角面片頂點(diǎn)的灰度值,對(duì) 于端點(diǎn)對(duì)應(yīng)的那個(gè)頂點(diǎn)的灰度值是1,對(duì)于外/內(nèi)部邊界上的頂點(diǎn)灰度值就是0,然后利用 gouraudshading著色方法渲染這些三角面片。
6.如權(quán)利要求1或2所述的面片化的garbagemask邊界渲染方法,其特征在于步驟 (4)中所述的繪制Bezier曲線對(duì)應(yīng)的外/內(nèi)部邊界的方法是針對(duì)每一個(gè)子線段,找到位 置屬性位于這個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的所有邊界點(diǎn);得到每一個(gè)邊界點(diǎn)在外/ 內(nèi)部邊界上的坐標(biāo);將邊界點(diǎn)在曲線上的坐標(biāo)點(diǎn)以及外/內(nèi)部邊界上的坐標(biāo)點(diǎn)作為三角面 片的頂點(diǎn),計(jì)算出這些三角面片頂點(diǎn)的灰度值;然后利用gouraud shading著色方法渲染 這些三角面片。2
7.如權(quán)利要求6所述的面片化的garbagemask邊界渲染方法,其特征在于步驟(4) 中繪制Bezier曲線對(duì)應(yīng)的外部邊界時(shí),對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的外 部邊界點(diǎn),根據(jù)它的曲線上坐標(biāo)與它的距離屬性以及當(dāng)前garbage mask的外部方向來(lái)計(jì)算 出它的外部邊界上坐標(biāo);對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的內(nèi)部邊界點(diǎn),根據(jù) 它前面的廣義外部邊界點(diǎn)與后面的廣義外部邊界點(diǎn)的外部邊界距離進(jìn)行線性插值得到它 的外部邊界距離,進(jìn)而計(jì)算出它的外部邊界上坐標(biāo),所述的廣義外部邊界點(diǎn)包括外部邊界 點(diǎn)所對(duì)應(yīng)的邊界上坐標(biāo)點(diǎn)與分段點(diǎn)對(duì)應(yīng)的外部邊界上坐標(biāo)點(diǎn)。
8.如權(quán)利要求6所述的面片化的garbagemask邊界渲染方法,其特征在于步驟(4) 中繪制Bezier曲線對(duì)應(yīng)的內(nèi)部邊界時(shí),對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的內(nèi) 部邊界點(diǎn),根據(jù)它的曲線上坐標(biāo)與它的距離屬性以及當(dāng)前garbage mask的內(nèi)部方向來(lái)計(jì)算 出它的內(nèi)部邊界上坐標(biāo);對(duì)于每一個(gè)子線段的起始和結(jié)束分段點(diǎn)之間的外部邊界點(diǎn),根據(jù) 它前面的廣義內(nèi)部邊界點(diǎn)與后面的廣義內(nèi)部邊界點(diǎn)的內(nèi)部邊界距離進(jìn)行線性插值得到它 的內(nèi)部邊界距離,進(jìn)而計(jì)算出它的內(nèi)部邊界上坐標(biāo),所述的廣義內(nèi)部邊界點(diǎn)包括內(nèi)部邊界 點(diǎn)所對(duì)應(yīng)的邊界上坐標(biāo)點(diǎn)與分段點(diǎn)對(duì)應(yīng)的內(nèi)部邊界上坐標(biāo)點(diǎn)。
9.如權(quán)利要求6所述的面片化的garbagemask邊界渲染方法,其特征在于步驟 (4)中在繪制Bezier曲線對(duì)應(yīng)的外/內(nèi)部邊界的過(guò)程中,每一個(gè)子線段被其起始和結(jié) 束分段點(diǎn)之間的所有邊界點(diǎn)分成若干段,每一段的外部邊界構(gòu)成一個(gè)四邊形,將每個(gè)四 邊形沿Bezier曲線的走向平均劃分為若干個(gè)子四邊形,劃分的數(shù)量計(jì)算方法如下設(shè) 10代表這個(gè)四邊形前面那個(gè)腰的長(zhǎng)度,11代表后面那個(gè)腰的長(zhǎng)度,那么子四邊形數(shù)量 COUnt = maX°'Ceil{(lQ+ 11) ΛΟ)};得出子四邊形數(shù)量后通過(guò)線性插值計(jì)算出這些子四邊形 的頂點(diǎn)坐標(biāo)以及灰度值,然后再利用相同的方法對(duì)每個(gè)子四邊形沿Bezier曲線法線方向 再劃分為若干子四邊形,最后就可以將整個(gè)四邊形劃分為若干子四邊形;將每個(gè)子四邊形 劃分為兩個(gè)相鄰的三角面片,利用gouraud shading著色方法渲染這些三角面片。
全文摘要
本發(fā)明屬于圖像/視頻處理技術(shù),具體涉及一種面片化的garbage mask邊界渲染方法。該方法首先將garbage mask中的所有Bezier曲線劃分為若干子線段;確定garbage mask的外部方向;然后根據(jù)邊界點(diǎn)的信息計(jì)算出所有分段點(diǎn)的外部邊界距離以及內(nèi)部邊界距離;最后以每條Bezier曲線為單位繪制其對(duì)應(yīng)的外/內(nèi)部邊界和其起始端點(diǎn)對(duì)應(yīng)的外/內(nèi)部角邊界。本發(fā)明將每條Bezier曲線對(duì)應(yīng)的外/內(nèi)部邊界和其起始端點(diǎn)對(duì)應(yīng)的外/內(nèi)部角邊界劃分為若干三角面片,使渲染的邊界更加平滑、清晰,對(duì)操作的調(diào)控更加靈活。
文檔編號(hào)G06T5/00GK101894363SQ20091008473
公開(kāi)日2010年11月24日 申請(qǐng)日期2009年5月20日 優(yōu)先權(quán)日2009年5月20日
發(fā)明者劉鐵華, 見(jiàn)良, 鄭鵬程 申請(qǐng)人:新奧特(北京)視頻技術(shù)有限公司