王 華, 馬亞丹, 李紳紳, 徐 靜, 徐明亮, 張 旭, 金保華
(1.鄭州輕工業(yè)大學(xué) 計(jì)算機(jī)與通信工程學(xué)院,河南 鄭州 450001; 2.鄭州大學(xué) 圖書館,河南 鄭州 450001; 3.鄭州大學(xué) 信息工程學(xué)院,河南 鄭州 450001)
隨著虛擬現(xiàn)實(shí)技術(shù)和人機(jī)交互技術(shù)的迅速發(fā)展,實(shí)現(xiàn)三維場(chǎng)景中實(shí)時(shí)的、任意形狀的蒙版擦除動(dòng)畫,可極大提高人機(jī)交互的體驗(yàn),具有較為重要的現(xiàn)實(shí)意義。
目前國(guó)內(nèi)外已有大量相當(dāng)成熟的技術(shù)和軟件系統(tǒng)用于實(shí)現(xiàn)蒙版擦除動(dòng)畫。例如,photoshop軟件采用基于alpha通道圖像融合技術(shù)實(shí)現(xiàn)的二維底版/蒙版圖像的蒙版擦除[1-3]。在水果忍者、說(shuō)劍等擁有豐富擦除交互效果的虛擬現(xiàn)實(shí)游戲中,用戶通過(guò)各種交互方式擦除場(chǎng)景蒙圖,實(shí)現(xiàn)用戶任意需求形狀的實(shí)時(shí)蒙版擦除動(dòng)畫。 上述軟件可以實(shí)現(xiàn)任意形狀的擦除動(dòng)畫,但主要是用于實(shí)現(xiàn)二維圖像的擦除,通常并不支持三維虛擬場(chǎng)景中的蒙版擦除動(dòng)畫。 三維仿真軟件如Unity 3D、Unreal Engine 4等,利用其強(qiáng)大的shader功能,在三維場(chǎng)景中將包含擦除形狀信息的圖像和蒙版圖像進(jìn)行紋理透明度混合,從而實(shí)現(xiàn)三維場(chǎng)景中任意位置處的蒙版擦除動(dòng)畫[4-5]。但是,針對(duì)多次擦除的可視化,需要?jiǎng)?chuàng)建加載多個(gè)shader,非常耗時(shí)。
針對(duì)上述問(wèn)題,筆者提出了一種三維場(chǎng)景中基于模板的個(gè)性化蒙版擦除動(dòng)畫方法。 方法包含擦除模板制作和擦除動(dòng)畫繪制2個(gè)步驟,如圖1所示。 在擦除模板制作過(guò)程中,首先對(duì)包含形狀信息的圖像進(jìn)行矢量化處理,其次進(jìn)行矩陣標(biāo)準(zhǔn)化及相應(yīng)的移位變換和仿射變換,使得擦除模板數(shù)據(jù)格式統(tǒng)一且和場(chǎng)景蒙版數(shù)據(jù)大小比例相當(dāng),為后續(xù)動(dòng)畫繪制效率提升提供標(biāo)準(zhǔn)化且合理有效的高質(zhì)量擦除模板數(shù)據(jù)。 在擦除動(dòng)畫繪制過(guò)程中,采用三維空間正射投影分層繪制的方法,先繪制三維場(chǎng)景,然后在其近裁剪面繪制蒙版,并通過(guò)alpha通道不同的參數(shù)設(shè)置來(lái)區(qū)分當(dāng)前已擦除部分集合和未擦除部分集合。 實(shí)驗(yàn)結(jié)果表明,本文方法可以實(shí)現(xiàn)三維場(chǎng)景中任意個(gè)性化擦除形狀的定制,并且可以實(shí)現(xiàn)任意大小,任意旋轉(zhuǎn)角度的蒙版擦除動(dòng)畫。
本文方法主要具有如下優(yōu)點(diǎn):首先,方法支持任意個(gè)性化的擦除形狀數(shù)據(jù),可以是任意凸/凹多邊形,也可以是任意單/多連通區(qū)域形狀; 其次,方法可以在蒙版上實(shí)現(xiàn)不同大小、不同形狀、不同旋轉(zhuǎn)角度的個(gè)性化擦除;最后,也是最重要的,方法可以實(shí)現(xiàn)任意三維場(chǎng)景內(nèi)的大規(guī)模實(shí)時(shí)蒙版擦除動(dòng)畫。
現(xiàn)有蒙版擦除技術(shù)主要指的是二維圖像摳圖技術(shù)。 以圖像的統(tǒng)計(jì)特征以及近鄰像素的相關(guān)性為依據(jù),圖像摳圖方法可以簡(jiǎn)單地分為基于采樣的方法、基于傳播的方法、采樣和傳播相結(jié)合的方法。
基于采樣的方法[3-4]基本思想:假設(shè)未知區(qū)域的像素可以依據(jù)已知的給定區(qū)域附近前景顏色和背景顏色進(jìn)行估計(jì),利用這些已知給定的樣本像素,計(jì)算出透明度α的值, 用于未知區(qū)域內(nèi)像素的劃分。 如:Berman等[3]設(shè)計(jì)了Knockkout方法,這也是著名的Photoshop插件采用的方法。 Ruzon等[4]將統(tǒng)計(jì)學(xué)方法用于摳圖方法,采用概率統(tǒng)計(jì)的方法實(shí)現(xiàn)了圖像的摳圖。 Chuang[5]提出了Bayes摳圖算法等。
與基于采樣的方法不同,基于傳播的方法[6-11]不對(duì)前景和背景的顏色進(jìn)行估計(jì),而是根據(jù)圖像的統(tǒng)計(jì)特性做出假設(shè),從顏色、空間位置等方面描述近鄰像素之間的關(guān)系。 如由Levin等[6]提出的基于封閉模式的摳圖模型、Chen等[9]提出了K近鄰摳圖模型以及Sun[8]提出的泊松摳圖模型,創(chuàng)造性地將偏微分方程引入摳圖領(lǐng)域,并取得了不錯(cuò)的實(shí)驗(yàn)效果。
基于采樣的方法和基于傳播的方法都有其優(yōu)點(diǎn)和缺點(diǎn),為了更好地將2種方法的優(yōu)點(diǎn)相結(jié)合,同時(shí)盡力避免其不足。近年來(lái)不少學(xué)者提出了將基于采樣和傳播方法相結(jié)合的方法[12-14],如:shared-matting方法[12]、gobal matting方法[13]、魯棒摳圖方法[14]等。 其中魯棒摳圖方法是一種具有代表性的基于采樣和傳播相結(jié)合的方法。 該方法解決了采樣不準(zhǔn)確以及前景和背景色階相似或重疊的問(wèn)題,提高了摳圖的質(zhì)量。 同時(shí),通過(guò)添加信任系數(shù),增加采樣距離等,較好地均衡了準(zhǔn)確性和魯棒性。
上述蒙版擦除技術(shù)一般是根據(jù)用戶提供的樣本像素,對(duì)圖像中用戶感興趣的像素區(qū)域進(jìn)行摳圖。 這些方法主要是基于二維圖像的摳圖處理,很難移植至三維場(chǎng)景中的蒙版擦除動(dòng)畫中。
如圖1所示,本文方法主要包括擦除模板制作和擦除動(dòng)畫繪制,擦除模板制作包括形狀提取和模板制作,只需輸入包含形狀信息的圖像數(shù)據(jù)、場(chǎng)景數(shù)據(jù)以及蒙版圖像數(shù)據(jù),本文方法即可實(shí)現(xiàn)三維場(chǎng)景內(nèi)的任意形狀的蒙版擦除。
圖1 本文方法技術(shù)框架Figue 1 Technical framework of this method
2.1.1 形狀提取
首先要導(dǎo)入包含用戶需求形狀信息的圖像數(shù)據(jù); 然后對(duì)圖像進(jìn)行摳圖處理以獲取圖像中用戶需要的形狀邊界;最后根據(jù)摳圖獲得的邊界信息,得到1張包含形狀信息且前景背景區(qū)分明顯、不包含任何噪聲的灰度圖。
本文中用戶需求形狀可以由任意凸多邊形或者凹多邊形構(gòu)成,也可以是任意單連通或多連通區(qū)域。
采用photoshop軟件直接摳取獲得上述圖像中的形狀信息。以上述邊界為前景圖和背景圖的邊界,構(gòu)建新的圖像。 對(duì)新圖像前景和背景分別進(jìn)行純色區(qū)域填充。 填充過(guò)程采用灰度像素填充,使得新圖像為灰度圖像, 所有像素僅有2類取值,這里設(shè)2類像素值的灰度值分別為(0,0,0)和(200,200,200),其中灰度值為(0,0,0)組成的區(qū)域即為用戶需求形狀區(qū)域,灰度值為(200,200,200)組成的區(qū)域?yàn)楸尘皥D區(qū)域。
2.1.2 模板制作
將上述柵格形狀數(shù)據(jù)經(jīng)處理制作成具有一定格式的矢量數(shù)據(jù),并將其作為模板供后續(xù)繪制使用。 具體過(guò)程包含3個(gè)部分,如圖2所示。
圖2 模板制作過(guò)程Figue 2 Making process of template
(1)柵格數(shù)據(jù)矢量化:用戶需求形狀通常是不規(guī)則的,形狀圖形還有可能是多連通的,如何采用一種通用的矢量化方法存儲(chǔ)形狀數(shù)據(jù)顯得至關(guān)重要。
筆者借用多邊形掃描轉(zhuǎn)換算法的思路,采用逐行掃描的思路來(lái)獲得用戶需求形狀的邊界矢量數(shù)據(jù),將由點(diǎn)陣表示的形狀柵格數(shù)據(jù)轉(zhuǎn)換為易于進(jìn)行幾何變換的邊界坐標(biāo)序列矢量數(shù)據(jù),從而實(shí)現(xiàn)柵格數(shù)據(jù)的矢量化。 具體來(lái)說(shuō),柵格數(shù)據(jù)矢量化過(guò)程包括:求交、排序、配對(duì)。
求交:也就是求交點(diǎn),計(jì)算按行掃描得到的掃描線和需求形狀各邊的交點(diǎn),如圖3所示。
圖3 柵格數(shù)據(jù)矢量化掃描轉(zhuǎn)換示意圖Figue 3 Process of row-by-row scanning
排序:交點(diǎn)求出后,要對(duì)交點(diǎn)進(jìn)行排序,將這些交點(diǎn)按照沿圖像水平方向坐標(biāo)遞增的順序進(jìn)行排列。
配對(duì):將沿水平方向按行排序后的交點(diǎn)第1個(gè)和第2個(gè)配對(duì),第3個(gè)和第4個(gè)配對(duì),依此類推,每對(duì)交點(diǎn)表示掃描線和用戶需求形狀區(qū)域的左右邊界。
至此,得到采用二維坐標(biāo)序列表示的形狀邊界矢量數(shù)據(jù)集P1:
(1)
式中:(xi,2j-1yi)和(xi,2jyi)(i∈[1,t],j∈[1,si])表示掃描線和形狀區(qū)域的左右邊界交點(diǎn);t表示掃描線的條數(shù);2si表示第i(i∈[1,t])條掃描線和形狀區(qū)域邊界交點(diǎn)的個(gè)數(shù)。
令pij=(xi,yj),i∈[1,t],j∈[1,2si]則
(2)
式中:P1為按行掃描得到的用戶需求形狀邊界坐標(biāo)對(duì)序列集合。
若將序列集合中{pi1,pi2,…p2si}(i∈[1,t])作為第i行,不難發(fā)現(xiàn),式(2)中每行的坐標(biāo)對(duì)個(gè)數(shù)并不一定相等,即si≠sj,(i≠j且i,j∈[1,t])。 這是因?yàn)閷?duì)于不同的用戶需求形狀,掃描線掃描不同行得到的坐標(biāo)對(duì)個(gè)數(shù)并不一定相等。
(2)矩陣化:為了方便后續(xù)進(jìn)行數(shù)據(jù)變換和操作, 接下來(lái)對(duì)集合P1進(jìn)行矩陣標(biāo)準(zhǔn)化處理。 集合P1矩陣化的過(guò)程,即將P1補(bǔ)全為矩陣的過(guò)程。 為使得每行數(shù)據(jù)個(gè)數(shù)相等,采用矩陣P表示該方陣,設(shè)P=Pm×n=(pij)m×n,則m=t,n=max{2si|i∈[1,m]}。
補(bǔ)全規(guī)則如下:對(duì)于?i∈[1,t],如果j∈(2si,n],則pij=(-10 000,-10 000)。
由于2.1.2節(jié)中矢量化掃描中通過(guò)按行配對(duì),使得P中pi,2j-1和pi,2j(i∈[1,m]且j∈[1,si])分別為同一連通區(qū)域的左右邊界, 但是并無(wú)法保證pi,2j-1和pi,2j(i∈[1,m]且j∈[1,si])為同一連通區(qū)域的左邊界。
此外,為方便后續(xù)直接對(duì)形狀區(qū)域進(jìn)行紋理填充,這里對(duì)矩陣進(jìn)行按列配對(duì)的移位變換。變換的偽代碼如下。
For (i=2;i<=n;i++)
For (j=1;j If (xi-1,2j-1>xi,2j) For (h=i-1;h>=1;h--) For (k=2si;k>=2j+2;k--) xh,k=xh,k-2;yh,k=yh,k-2; End xh,k=-10 000;yh,k=-10 000 xh,k-1=-10 000;yh,k-1=-10 000 End End Else if (xi-1,2j For (k=2si;k>=2j+2;k--) xi,k=xi,k-2;yi,k=yi,k-2; End xi,k=-10 000;yi,k=-10 000; xi,k-1=-10 000;yi,k-1=-10 000; End End End (3)仿射變換:上述矩陣化后的形狀邊界數(shù)據(jù)直接用來(lái)繪制仍存在如下問(wèn)題:①相對(duì)于蒙版而言,形狀邊界坐標(biāo)值過(guò)大,需要經(jīng)過(guò)平移后才能將形狀繪制至蒙版上。②相對(duì)于蒙版而言,形狀圖形過(guò)大,需要進(jìn)行縮放后才能將形狀繪制至蒙版上。 筆者通過(guò)對(duì)矢量數(shù)據(jù)做平移和縮放變換來(lái)避免上述兩種情況的發(fā)生。 具體通過(guò)對(duì)矩陣P作平移和縮放變換2種仿射變換來(lái)實(shí)現(xiàn)。 (a) 縮放變換: P1=PA, (b) 平移變換: P2=[P11]B, 根據(jù)2.1得到的模板矢量數(shù)據(jù),在三維場(chǎng)景中的蒙版上擦除出用戶需求形狀的場(chǎng)景。 受圖像摳圖技術(shù)以及現(xiàn)有三維仿真引擎中采用shader實(shí)現(xiàn)蒙版擦除工作的啟發(fā), 筆者采用三維空間正射投影分圖層繪制的方式實(shí)現(xiàn)形狀繪制。即在正射投影構(gòu)成的三維空間中,沿觀察者視線方向上,先繪制底版信息,然后在其正前方繪制蒙版圖像。在蒙版繪制中,已被擦除區(qū)域的alpha通道設(shè)置為0,即完全透明,其他區(qū)域的alpha通道設(shè)置為1,即完全不透明。 其中,已被擦除區(qū)域?yàn)楫?dāng)前時(shí)刻位置,即所有用戶在蒙版上所有擦除形狀的集合。 為驗(yàn)證本文方法的有效性,這里分兩部分對(duì)本文方法進(jìn)行驗(yàn)證:方法豐富的繪制效果以及方法的計(jì)算效率。 測(cè)試環(huán)境:CPU為Intel(R) Core 8 Xeoni7-4790,RAM為4.0 G。 3.1.1 對(duì)各種個(gè)性化擦除形狀的支持 本文方法支持各類擦除形狀,可以是單連通區(qū)域,也可以是多連通區(qū)域,可以是凸多邊形,也可以是凹多邊形。如圖4所示分別為采用橢圓形、五角星、紅旗、以及多連通凹多邊形繪制的效果圖。 可以看出,本文方法對(duì)不同用戶需求形狀繪制的效果非常好。 圖4 不同個(gè)性化擦除形狀繪制示意圖Figue 4 Erasure animations with different erasure shapes 3.1.2 指定形狀下個(gè)性化的變形效果 任意大小繪制:本文方法制作出來(lái)的形狀數(shù)據(jù)模板是經(jīng)過(guò)縮放變換后的數(shù)據(jù),用戶可以通過(guò)設(shè)置不同的縮放系數(shù)來(lái)實(shí)現(xiàn)形狀大小的變化,如圖5所示。 由于本文方法繪制過(guò)程中無(wú)法使用OpenGL列表等方法進(jìn)行優(yōu)化加速,為了提高繪制效率,本方法減少了繪制過(guò)程匯總的計(jì)算量,目前暫不支持繪制過(guò)程中的縮放變換。 任意角度繪制:本文方法制作的形狀數(shù)據(jù)模板是唯一的。但是,在繪制過(guò)程中,通過(guò)旋轉(zhuǎn)變換,仍可以繪制出各種旋轉(zhuǎn)角度的形狀圖形,繪制擦除次數(shù)增加時(shí)動(dòng)畫效果:指定擦除形狀,擦除底板和擦除蒙版后,隨著擦除次數(shù)的增加,本文方法可以自動(dòng)生成擦除動(dòng)畫,圖7示為擦除次數(shù)增加時(shí),本文方法生成的擦除動(dòng)畫效果截圖。 圖5 任意形狀大小圖形繪制Figue 5 Erasure animations with different size of the shaking actions 效果如圖6所示。 圖6 不同旋轉(zhuǎn)角度形狀圖形繪制Figue 6 Erasure animations with different rotation angles of the shaking actions 圖7 擦除動(dòng)畫效果截圖Figue 7 The snapshot of the erase animations 針對(duì)同一模板,測(cè)試了形狀繪制次數(shù)和計(jì)算時(shí)間的關(guān)系。 圖8 形狀擦除次數(shù)和相應(yīng)計(jì)算時(shí)間的關(guān)系Figue 8 Relationship between the number of shape erasures and corresponding calculation time 測(cè)試采用的形狀邊界頂點(diǎn)個(gè)數(shù)為1 192個(gè),LOD級(jí)別為1,即采用最高精度繪制,測(cè)試結(jié)果如圖8所示。從圖8可以看出,對(duì)于上述形狀,本文方法可以實(shí)時(shí)繪制2 000個(gè)以上。 這個(gè)數(shù)值看起來(lái)并不大, 原因如下:首先是由于對(duì)形狀實(shí)行了最高精度的繪制; 其次是由于每個(gè)形狀圖像位置不同,所以擦除出來(lái)的場(chǎng)景數(shù)據(jù)像素也不相同,導(dǎo)致形狀貼圖紋理隨之變化,無(wú)法直接采用OpenGL中顯示列表之類的繪制方法,每次都需要進(jìn)行紋理映射計(jì)算繪制,并且為了實(shí)現(xiàn)繪制的多樣化,每次繪制還進(jìn)行了平移和旋轉(zhuǎn)變換。 具體應(yīng)用中,可以采用如下方法來(lái)提高本文的繪制效率: (1) 根據(jù)蒙版距離觀察者視點(diǎn)的遠(yuǎn)近,采用不同的LOD級(jí)別實(shí)現(xiàn)圖形繪制。 (2) 對(duì)形狀頂點(diǎn)進(jìn)行壓縮,有效減少頂點(diǎn)個(gè)數(shù)。 筆者提出了一種三維場(chǎng)景中基于模板的個(gè)性化蒙版擦除動(dòng)畫方法,通過(guò)模板制作和動(dòng)畫繪制可以快速地在蒙版上擦除出三維場(chǎng)景中個(gè)性化的形狀,從而間接地實(shí)現(xiàn)了蒙版擦除、展示三維場(chǎng)景的功能。 實(shí)驗(yàn)證明,本文方法支持各種場(chǎng)景數(shù)據(jù)的輸入,也支持各類擦除形狀,并且本文方法有較高的計(jì)算效率。 本文方法可以通過(guò)和移動(dòng)終端相結(jié)合,用于各類互動(dòng)游戲中,實(shí)現(xiàn)刷屏等功能。2.2 擦除動(dòng)畫繪制
3 實(shí)驗(yàn)
3.1 個(gè)性化動(dòng)畫效果
3.2 圖形繪制效率測(cè)試
4 結(jié)論