肖志良 李中華
1(佛山職業(yè)技術學院電子信息學院 廣東 佛山 528137)
2(中山大學智能工程學院 廣東 廣州 510006)
隨著計算機多媒體相關技術的快速發(fā)展,三維重建[1-2]技術逐漸普及,其應用常出現(xiàn)在網絡媒體和商品中,如線上產品介紹與營銷、虛擬現(xiàn)實的體驗產品等。由于三維重建可帶給人們完全不同于二維的視覺感官和體驗,且應用范圍廣泛,因此,該領域的研究具有較大商業(yè)價值和意義。
目前較多的方法是采用了視頻動畫方法,如文獻[3]提出一種“視頻紋理”方法,從視頻中創(chuàng)建較大長度的視頻,從動作捕捉視頻中生成特定于人物的視頻紋理。文獻[4]通過在時間和空間中對給定視頻進行分割來創(chuàng)建具有運動效果的圖像,但運動幅度非常有限。文獻[5]提出一個完整的重建系統(tǒng)用于恢復包含多個剛體運動目標的視頻動態(tài)場景結構,主要通過大尺度光流法獲得特征點軌跡,并在此基礎上對獨立目標進行姿態(tài)估計。文獻[6]提出基于圖像特征點匹配的視頻三維重建方法,對特征點一定鄰域內圖像的紋理、結構以及其他特征進行統(tǒng)計,采用體繪制法完成圖像序列的三維重建,但該方法的重建效率較低。
與視頻或圖像集合相比,從單幅圖像中進行動畫重建,也可實現(xiàn)較好的效果,所需的信息較少,且約束條件較少。如文獻[7]利用梯度場修改的方法將樣本表情映射到輸入人臉上,對輸入圖像的眼睛部分進行紋理合成處理,并創(chuàng)建人臉變化。文獻[8]利用大姿態(tài)三維人臉重建技術,基于可變形模型的三維人臉圖像重建方法,對一幅人臉圖像進行姿態(tài)調整并重建,以滿足人臉匹配的條件。但該方法無法對人臉動畫做后續(xù)處理,屬于靜態(tài)重建。文獻[9]針對自由曲面的表面無紋理、曲率變化不可預測特點,提出了一種基于網格投影的三維重建方法,將網格條紋投影到自由曲面表面,使得自由曲面具有確定的可識別紋理與特征。但未能較好解決網格邊框線條和內部線條交叉區(qū)域畸變,從而影響曲線擬合。文獻[10]提出一種利用手繪人體動作草圖到三維骨骼模型的重建方法,將三維骨骼模型渲染為二維圖像來建立維度映射關系,使用基于深度卷積神經網絡對圖像分類模型進行構建。該方法需要大量離線樣本的學習,且必須在沒有自遮擋的理想情況下進行。針對單幅圖像中3D人體形態(tài)估計,文獻[11]提出了捕捉各種不同的人體三維形態(tài)SMPL模型,其中,SMPL是一種參數(shù)化(可微分)的人體模型。并證明該模型可有效進行3D姿態(tài)和形狀估計,然而,該方法不能重建全3D模型。文獻[12]提出一種單幅圖像重建動作的視圖場景表示方法,利用場景幾何的強先驗信息提高姿態(tài)估計的精度,利用多視圖多點光線完成人體動作姿態(tài)重建。但該方法需要較多的場景約束先驗知識,場景設定較為固化。文獻[13]利用深度神經網絡和SMPL模型,提出了用于單視角人體姿態(tài)估計的端到端框架,并研究人體與紋理圖的稠密對應關系。但不一定適用于動畫重建。
大部分單幅圖像人物動畫制作方法主要著眼于2D或偽3D動畫,與此不同,本文旨在提供全3D體驗,并考慮到人物著裝,尋求動畫繪制解決方法。且提出的方法支持部分遮擋的處理,特別是身體前方的手臂所造成的遮擋。與以往方法相比,所提方法能夠較好完成各種樣例的3D動畫重建,并提供更好的增強現(xiàn)實體驗。
本文研究的核心技術問題是如何從單幅圖像中重建出可動畫、紋理化的3D網格。所提方法的流程如圖1所示。首先執(zhí)行人物檢測、分割和2D姿態(tài)估計。利用上述結果,創(chuàng)建裝配網格。其后,將SMPL模板模型[13]擬合到2D姿態(tài),并投影到圖像中,作為法線貼圖和蒙皮貼圖。所提方法的主要思想在于:找到人物輪廓與SMPL輪廓之間的映射,將SMPL法線/蒙皮貼圖扭曲到輸出,通過優(yōu)化SMPL網格上的頂點位置,并考慮到輪廓邊界,避免擠壓,以及自相交,強制SMPL模型適應輪廓。利用整合扭曲后的法線圖建立深度圖。重復該過程,以模擬模型的背面視圖,并結合深度圖和蒙皮圖,以創(chuàng)建完整的裝配后3D網格。同時在修補背景上使用運動捕捉序列對網格做進一步紋理化和動畫繪制。
圖1 方法主要流程
首先,針對沒有自遮擋的對象建立裝配網格的程序。對SMPL輪廓進行扭曲,以匹配原始圖像中的目標人物輪廓;然后,向投影SMPL法線貼圖和蒙皮貼圖應用該扭曲。得出的法線貼圖和蒙皮貼圖用于構建人物正面視圖和背面視圖。
從人物的2D姿態(tài)和輪廓遮罩S開始,為簡單起見,本文用S表示一個集合以及一個函數(shù),即作為人物輪廓內所有像素的集合,以及一個二元函數(shù)(對于輪廓內像素x,S(x)=1;對于輪廓外像素x,S(x)=0)。為構建帶骨架裝配的3D網格,首先利用文獻[13]提出的方法將SMPL模型擬合到2D輸入姿態(tài),該操作同時也會恢復相機參數(shù)。其后,將該網格投影到相機視圖中,以形成一個輪廓遮罩SSMPL。對于像素x∈SSMPL,該投影還額外提供了深度圖ZSMPL(x)、法線貼圖NSMPL(x)以及蒙皮貼圖WSMPL(x)。從SMPL模型中頂點蒙皮權重中推導出蒙皮貼圖。
基于SSMPL和輸入圖像的輪廓遮罩S,對ZSMPL、NSMPL和WSMPL進行扭曲,以分別建立輸出深度圖(位于人物輪廓處)Z?S(x∈?S)、法線貼圖N(x)和蒙皮貼圖W(x)。具體來說,尋求平滑逆扭曲f(x),以使得:
S(x)=SSMPL(f(x))
(1)
然后,將該扭曲應用到深度圖和蒙皮貼圖:
(2)
根據(jù)實證經驗,設Z(x)=ZSMPL(f(x)),得出的網格在z軸方向上常會過平。
扭曲程序一般會對平面中的幾何形狀進行拉伸(SMPL模型通常比著裝對象更薄,甚至常會比未著裝的對象更薄),但不會對深度進行拉升。為解決該問題,對法線貼圖進行扭曲,以到達N(x)處。然后,對其進行整合以生成Z(x)。具體來說,對于像素x∈?S,求解稀疏線性系統(tǒng)[14],從而生成在邊界約束Z(x)=Z?S(x)下,與扭曲后的法線貼圖N(x)高度相符的Z(x)。
為構建逆向扭曲函數(shù)f(x),有很多可用的平滑扭曲函數(shù)供選擇。本文選擇了基于均值坐標的平滑扭曲函數(shù),因為該類函數(shù)在不自交的平面多邊形的整個平面上均有著明確定義,能夠較好地滿足所提方法的要求。具體來說,給定輸入輪廓的閉合多邊形邊界上的點(頂點)的有序集合,pi∈?S=(p0,p1,…,pm-1),則可以將S內的任何一個點表示為:
(3)
其中,(λ0(x),λ1(x),…,λm-1(x))為任意x∈S相對于邊界頂點pi的均值坐標。
假定存在對應函數(shù)φ,該函數(shù)可利用SMPL輪廓邊界上的點:
(4)
其后,利用式(3)的相同均值坐標,將扭曲函數(shù)定義為:
(5)
實踐中,通過f(x)進行扭曲時可能會產生空洞,即由于?S和?SSMPL之間的非雙射映射而產生的較小區(qū)域(其中f(x)?SSMPL)。對于該問題,可在扭曲后的法線和蒙皮權重貼圖中平滑地填充這些空洞。為重建人物背面,對擬合SMPL模型的背面視圖進行虛擬渲染,建立人物遮罩鏡像,然后應用上文描述的扭曲方法即可。
在人物對象存在自遮擋,即人體某部分遮住另一部分之上的情況下,僅從二元輪廓中重建單個深度圖(例如正面)并不足以解決該問題[15]。為處理自遮擋問題,本文通過人體標簽圖將身體分割為多個部位,補完被部分遮擋的區(qū)段,然后,使用1.1節(jié)描述的方法對每個部分進行重建。提出方法的流程如圖2所示。
圖2 自遮擋問題解決的流程
1.2.1初始身體標簽
投影SMPL模型提供的人體標簽參考圖LSMPL與圖像不夠一致。本文利用標簽參考圖,通過兩個步驟構建最終標簽圖:① 估計每個像素x∈S的初始標簽圖Linit,盡可能與LSMPL相似;② 在遮擋邊界處重新定義Linit,其中標簽的間斷面應該與輸入圖像的邊重合。
通過對馬爾可夫隨機場(MRF)目標函數(shù)進行最小化,以求解初始(粗糙)身體標簽圖Linit:
(6)
式中:
(7)
(8)
N(p)為p的八近鄰。基于到LSMPL中具有相同標簽的最近點距離得到U(·)的標簽,由此鼓勵Linit的形狀與LSMPL相似;V(·)則鼓勵了空間相關標簽。
1.2.2身體標簽微調
接下來,對身體標簽圖進行改良,以更明確地區(qū)分遮擋邊界。
當有著不同部位標簽的兩個像素在圖像中為近鄰關系,但兩者在3D身體表面上并不是鄰近像素時,即會出現(xiàn)遮擋邊界。為識別這些像素,首先,依次計算各個身體部位的扭曲函數(shù)f,該函數(shù)將每個身體部位Linit=映射到相應的身體部位LSMPL=。其后,沿著Linit的手臂部位的邊界,對于具有不同標簽的每對鄰近像素(p,q),確定相應的投影SMPL位置(fLinit(p)(p),fLinit(q)(q)),將其反投影到SMPL網格上,并檢查其在表面上是否彼此鄰近。如果并不接近,則將這些像素識別為遮擋像素。最后,在這些遮擋像素周圍擴張,以生成一個遮擋遮罩O。結果如圖2(c)所示。
現(xiàn)在,對O內的標簽進行微調,以更好地跟蹤圖像I中的顏色不連續(xù)性,得到最終的身體標簽圖L。為此,定義另一個MRF:
(9)
U(L(p))=-log(GMM(L(p),I(p)))
(10)
V(L(p),L(q))=C(L(p),L(q))e-β‖I(p)-i(q)‖2
(11)
(12)
式中:GMM(L(p),I(p))為使用高斯混合模型建模,將顏色I(p)的像素p標記為L(p)的概率。依據(jù)SMPL模型[13]參數(shù)設定,一般γ取8,β的定義如下:
(13)
式中:〈·〉表示取遮擋遮罩O中所有成對的鄰近像素的均值。
一般通過擴展迭代方法[16]求解該問題,在每次迭代中,利用最新估計出的L(L初始時為Linit)重新估計高斯混合模型GMM(·),最終身體標簽圖如圖2(d)所示。
1.2.3網格構建
在完成身體標簽并恢復遮擋形狀后,按各個部位依次投射SMPL模型,以得到每個部位的SMPL深度、法線和蒙皮權重圖,然后按照1.1節(jié)方法構建身體部位網格(圖2(h)),并將其組合在一起得到最終的身體網格(圖2(i))。最后,應用Laplacian平滑,以減少由于二元輪廓分割所造成的沿著網格邊界的鋸齒偽跡。
為了使得問題的解決方案更加魯棒性,這里討論一下其他簡單遮擋(非自遮擋)的處理方式,值得一提,這種遮擋只限于簡單小部分遮擋。首先對圖像進行標簽初始化,明確遮擋的罩蓋位置和大小,由于是其他物體的遮擋,需要將身體和物體分割。然后,將遮擋的物體移除,重新繪制身體部分,并對移除后的空洞區(qū)域按照一定程序進行蒙皮。最后,按照1.1節(jié)方法對身體各部分進行重建,為了進一步改良身體標簽圖,采用1.2.2節(jié)的標簽微調方法,恢復遮擋形狀后,完成網絡構建。
對于動畫繪制來說,頭部姿態(tài)的準確度非常重要,但SMPL的頭部姿態(tài)通常是不正確的。為此,檢測圖像中的面部基準點,并尋找能夠實現(xiàn)檢測到的面部基準點與相應的投影3D基準點的3D頭部姿態(tài)。完成頭部深度圖的重建后,應用平滑扭曲,將投影3D基準點與圖像基準點完全對齊。在未檢測到面部或基準點的情況下,省略該步驟。
對于目標人物的正面,將圖像投影到幾何體上。使用PatchMatch[17]對被遮擋的正面身體部位進行填充。本文提供了兩個選項:(1) 將正面紋理的鏡像拷貝粘貼到背面;(2) 通過指導用戶進行手動修復。對于第2個選項,通過身體標簽圖來引導身體背面的修復,利用具有相同身體標簽的區(qū)域進行紋理繪制。用戶可輕易更改這些標簽圖,例如用頭發(fā)紋理來填充頭部背面。最后,利用泊松混合理論[18-19]將正面和背面的紋理拼接在一起。
本文從互聯(lián)網上下載滿足本文方法所需規(guī)格的圖像,主要為全身照,大部分為正面圖,共70幅照片,包括藝術作品、海報、涂鴉等,對提出的方法進行了測試,并與其他方法進行比較。
實驗建立了一個用戶接口界面,如圖3所示,并提供以下用戶互動:1) 修改動畫:默認動畫為“奔跑”,而用戶可以固定一些身體部位,改變序列,修改姿態(tài),并讓模型從修改后的姿態(tài)開始執(zhí)行一個動作。2) 在有必要時,對自動檢測包圍盒、骨架、分割和身體標簽圖進行微調。3) 針對目標人物背面,選擇使用鏡像紋理;或通過編輯身體標簽圖進行調整。
圖3 用戶接口界面
姿態(tài)編輯處理樣例如圖4所示。在用戶界面中,網格是透明的,以顯示出身體骨架。通過選擇并拖拽關節(jié),用戶可以改變相應骨骼的方向。這樣可以生成包含編輯后姿態(tài)的新圖像。
圖4 姿態(tài)編輯處理樣例
一些動漫人物的重建結果如圖5所示。左邊為輸入圖像,右邊為重建的結果,重建結果選取的是單幅圖像幀,如果將多個連續(xù)的重建結果組合在一起,則可以形成一個三維動畫效果。
圖6和圖7是針對兩幅常見的卡通圖像的重建結果,比較的方法是兩種優(yōu)秀的方法:文獻[11]和文獻[13]??梢钥闯?文獻[13]未能正確處理目標人物的輪廓,因此,該方法重建的結果中出現(xiàn)多處缺失的部分,如圖6中的“孫悟空”頭部有明顯缺失,腳部、腿部等軀干有明顯的消減效果。同理,圖7中的人物頭部和軀干部分大面積缺失,細節(jié)部分非常粗糙。本文方法明顯優(yōu)于文獻[13]。由于實際3D建模,所提方法在靜態(tài)幀中出現(xiàn)的畸變比文獻[13]的方法要小得多,且所提方法可以3D體驗(例如AR)。而文獻[13]方法則無此功能。本文還進行了定性觀察,讓一些用戶在兩種方法的結果中選擇更接近現(xiàn)實的動畫,共收到120位參與者的回復,其中89%的用戶選擇了本文方法。
(a) 輸入圖像 (b) 文獻[13]
文獻[11]的方法對SMPL網格進行優(yōu)化,從而對單目視頻序列中的旋轉人體對象的輪廓進行近似匹配。該方法使用120個輸入幀,并對目標權重做了相應調整。而本文在相同的2D人物姿態(tài)和分割之外,還向其方法額外提供了120個輸入圖像副本。與本文方法相比,文獻[11]方法不能很好地擬合輪廓。舉例來說,平滑SMPL部分的復雜度不夠,從圖6(c)可以看出,“孫悟空”的頭部映射為較大的鋸齒狀頭發(fā),對于握緊的拳頭或抽線藝術手臂,未處理好手指細節(jié)。同樣的,在圖7(c)中,其頭部與手部有多處缺失,且衣服的紋理沒有較好地保留。文獻[11]的不足之處主要源自于過強的人物形狀先驗知識,不適用于處理例如卡通人物或抽象畫等案例。而所提方法在細節(jié)處理方面較好,手部、頭發(fā)等細節(jié)部分得到了較好地保留和再現(xiàn)。
表1是各方法的綜合比較情況,對于評價指標,遮擋處理可以增加方法的適用性,增加虛擬現(xiàn)實體驗可以使得用戶獲得更加真實的體驗;SMPL模型是目前公認的最佳人體模型之一,適用于各種人體形狀和姿態(tài);用戶接口可以增加用戶的參與度,增強方法的人性化設計。從這四個方面可以看出本文方法更優(yōu)。
表1 綜合比較結果
在計算效率方面,本文方法的主要耗時集中在:對SMPL輪廓進行扭曲、匹配的計算過程,以及身體標簽圖的初始化計算(如有遮擋)。以卡通人物“孫悟空”為例(256×448),其運行總時間為3.76 s,提供了120個輸出幀,繪制出3D動畫,即圖像幀以大于30幀/s的幀率播放,給人眼以實時的播放效果。文獻[11]的主要耗時集中在SMPL的網格優(yōu)化和對旋轉人體輪廓的匹配計算上,幀率估計在25幀/s和35幀/s之間,基本上達到實時播放的效果。文獻[13]的SMPL計算時間并不多,但需要較多時間進行深度神經網絡的學習,沒有達到實時播放的效果。
本文提出了從單幅圖像中創(chuàng)建人物3D動畫的方法,通過可變姿態(tài)模板人體模型的形變來擬合人體的復雜輪廓,在單幅圖像中以3D形式重建并呈現(xiàn)人物動畫的應用,且可以處理部分自遮擋問題。所提方法適用于多種類型的全身正面照,包括體育照片、藝術作品或海報等。此外,本文還提出了一個交互接口,允許改變3D人物的姿態(tài)。
所提方法能夠處理頭部、軀干或腿部被手臂遮擋了一部分的情況。但其他類型的遮擋,如坐下時的交叉遮擋難以處理,這將是本文未來研究方向。