張姝潔,鄭利平,韓 清,張 晗
合肥工業(yè)大學(xué) 計(jì)算機(jī)與信息學(xué)院,合肥230001
隨著計(jì)算機(jī)技術(shù)的發(fā)展和人們精神生活的豐富,在影視動畫、城市規(guī)劃和游戲等領(lǐng)域,人們不再滿足于單純的平面圖像,對圖像三維化的需求日益增多。在需要大規(guī)模仿真人群的場景中,使用單一的人物模型會降低場景的真實(shí)感,而使用人工精細(xì)建模的人力和時間成本太高,精細(xì)的人物模型也會降低渲染場景的效率[1]。本文提出了一種可以從單張圖片直接快速生成相似人物角色及其服飾的三維模型的方法。
在通過人物圖片生成三維人物模型的研究方面,大部分研究的著眼點(diǎn)在于通過對一個人物不同面向的多張圖片進(jìn)行處理,從而生成三維模型。例如立體視覺法,這種方法應(yīng)用兩臺及以上的相機(jī)從不同角度拍攝同一物體,通過計(jì)算視角的視差來恢復(fù)物體的深度信息,從而進(jìn)行建模[2];例如紋理形狀恢復(fù)法,它是通過分析多張圖像的面向不同而導(dǎo)致的紋理變化,來恢復(fù)三維物體的形狀[3]。
在利用單張人物圖片生成相似人物三維模型的研究方面,多采用人工使用建模軟件輔助生成衣物服飾的具體模型,再通過技術(shù)手段結(jié)合到人體模型的方法。張恒[4]使用基于CAD 的建模系統(tǒng),將手繪草圖作為輸入,采用了從草圖到三維幾何重構(gòu)的方法。他通過計(jì)算草圖的特征線,將其與人物模型進(jìn)行擬合,由此生成服裝的曲面來進(jìn)行服飾表面的建模,使用的輔助技能手段較多且流程較為復(fù)雜。在由圖片生成較為精細(xì)的人物服飾模型方面,劉雅琪研究的是從古代人圖片還原古代人模型的方法[5],使用了手動選取服飾的關(guān)鍵信息點(diǎn)與OpenCV自動掃描功能相結(jié)合的操作,提取圖片中服飾信息的數(shù)字模型,然后再將數(shù)字建模與物理建模相結(jié)合得到初步的模型輪廓,最后使用Maya 的腳本編程對建模進(jìn)行優(yōu)化得到最終的古代人服飾,使用了多種工具,流程和系統(tǒng)較為龐大。Chen 等人[6]的方法首先使用kinect 掃描服裝,再用檢測器和分類器從掃描得到的RGB 圖像中分別識別出服裝部件及其屬性,然后將各個部分分別匹配自己的服裝組件庫,最后縫合各個組件。關(guān)于人物服飾系統(tǒng)的研究方面,文獻(xiàn)[7]提出基于單張圖片的服裝試穿系統(tǒng),首先獲取服裝衣片,網(wǎng)格化衣片后通過網(wǎng)格的形變匹配用戶的圖片來達(dá)成試穿的效果。成俊燕[8]使用了基于SVM 的HOG 行人檢測算法,并與KNN 相結(jié)合,通過網(wǎng)格剛性形變匹配服裝樣板,模擬服飾,達(dá)成實(shí)現(xiàn)虛擬試衣系統(tǒng)的目的。這種試衣方式得到的結(jié)果只有人物穿著服飾的正面圖片,而無法形成人物的完整三維模型。Berthouzoz等人[9]提出了自動解析現(xiàn)有服裝片面圖案并將其縫合轉(zhuǎn)換為3D服裝的技術(shù),以方便用戶的試衣操作。
縱觀前人在生成與圖片相似的人物三維模型方面的研究,大多需要軟件和較多人工人力的輔助,而當(dāng)前依托人工智能的生成人物模型的方式,雖然有些能夠大致達(dá)成分步驟的自動化,但每一步都需要大量訓(xùn)練庫的支持。本文聚焦于從單張圖片到相似的虛擬三維角色服飾的快速仿真,使用輕量級的方法流程,通過簡單的人機(jī)交互,從圖片中提取出角色服飾的關(guān)鍵信息并進(jìn)行計(jì)算,將服飾信息應(yīng)用到模型庫中所選取的合適模型上,再經(jīng)過編程渲染即完成了從單張人物圖片到相似角色服飾的三維模型的快速生成。
本文使用方法雖然輕便快捷,但是不能較好地保存并展示人物圖片中服飾的細(xì)節(jié)紋理信息,圖片處理中的人機(jī)交互也使系統(tǒng)自動化流程不夠完善,這些將在后續(xù)工作中繼續(xù)進(jìn)行完善。
從圖片到角色服飾模型的第一步是進(jìn)行圖片信息的識別處理,以獲取圖片中人物的服飾部分?;谌斯ぶ悄艿膱D像分割與識別法是近年來熱門的研究方向,且分割識別效果最好的,但是若要取得良好的效果,需要構(gòu)建大規(guī)模的訓(xùn)練集作為基礎(chǔ),且處理耗時較長。而其余的傳統(tǒng)算法大多對圖像的背景要求較高,復(fù)雜的背景會影響分割識別的效果,所以本文選取了相對來說效果較好的基于圖論的GrabCut分割算法,在背景復(fù)雜情況下,可以使用額外的交互操作來避免背景處理效果不佳。
GrabCut 算法是2004 年Rother 等人提出的一種優(yōu)秀且高效的交互式的圖像分割算法,結(jié)合基于Graph Cuts[10]的優(yōu)化迭代和Border Matting[11]來處理目標(biāo)邊界處圖像模糊和像素重疊等問題,能在較復(fù)雜的圖像中通過簡單的交互操作得到較高精度的分割效果。GrabCut是一種基于圖論的分割方法,首先定義一個Gibbs 能量函數(shù),然后求解這個函數(shù)的min-cut,這個min-cut就是前景和背景的分割像素集合。
交互部分,通過用戶框選目標(biāo),得到一個初始的方框圖,方框外的像素全部作為背景像素,方框內(nèi)的像素全部作為“可能是目標(biāo)的像素”。
首先使用高斯混合模型(Gaussian Mixture Model,GMM)來建立彩色圖像數(shù)據(jù)模型。每一個GMM 都可以看作是一個K 維的協(xié)方差。為了方便處理GMM,在優(yōu)化過程中引入向量作為每個像素的獨(dú)立GMM 參數(shù),相應(yīng)像素點(diǎn)上的不透明度an=0或1。使用的Gibbs能量函數(shù)定義為公式(1):
其中,D(αn,kn,θ,zn)=-log p(zn|αn,kn,θ)-log π(αn,kn),p是高斯概率分布,π 是第高斯函數(shù)對概率貢獻(xiàn)的權(quán)重系數(shù)(累積和為常數(shù))[12]。
其次能量最小化是通過迭代不斷更新,修正GMM參數(shù),利用初始三元圖的TU像素中重新確定的像素來校正彩色模型GMM 的參數(shù)θ。再采用border matting對分割的邊界進(jìn)行平滑等后期處理,由此可以降低交互過程的工作量,實(shí)現(xiàn)了圖的分割。
UV圖是U、V紋理貼圖坐標(biāo)的簡稱,它是在多邊形網(wǎng)格的定點(diǎn)上的二維紋理坐標(biāo)點(diǎn)。它精確定義了紋理圖片文件上,每個點(diǎn)與3D模型上的點(diǎn)互聯(lián)的位置信息,以決定表面紋理貼圖對應(yīng)的三維模型的位置。如果沒有UV,多邊形網(wǎng)格將不能被渲染出紋理[13]。
三維角色模型創(chuàng)建完成后如需添加表面紋理,第一個任務(wù)就是進(jìn)行UV 展開,一般使用的工具是Maya 和3DMax 自帶的工具,本文使用的是操作更方便快捷的UVLayout工具[14]。使用此工具,加載模型的obj格式文件后,按流程操作展開,并排布好展開的UV 片面。布局后的UV圖呈現(xiàn)為一張布局均勻的二維平面圖(如圖1),在其上附上不同的顏色和紋理就可實(shí)現(xiàn)生成不同的紋理貼圖并改變模型外觀的目的[15]。
圖1 模型切分及其UV圖
本文所采用的實(shí)驗(yàn)系統(tǒng)流程如圖2,輸入人物圖片后,首先使用圖像分割算法GrabCut 分割識別人物圖像,通過分割從圖片中直接獲取服飾的上衣和下衣的圖片前景信息。將獲取的服飾信息經(jīng)過極值剔除的計(jì)算后,分別獲得上衣和下衣的顏色均值。然后從事先準(zhǔn)備好的人物模型實(shí)驗(yàn)庫中,選取和圖片相似的人物模型作為人物模板,模板需通過軟件預(yù)先處理獲取其UV展開圖及對應(yīng)的表面紋理圖。隨后將從圖片中獲取的上衣下衣的顏色均值信息,填充到庫模型的服飾片面上,再將處理后的紋理圖向人物模型貼合即獲得和原圖片相似的人物模型。
圖2 從圖片到角色服飾系統(tǒng)流程圖
對輸入的人物圖片使用GrabCut 的算法進(jìn)行初步處理,分別識別出人物的衣服和褲子的具體區(qū)域,并提供服飾的前景圖像供后續(xù)步驟使用。
讀取人物圖片之后,需要進(jìn)行簡單的人機(jī)交互,人為選擇出需要分割的服飾的大致區(qū)域,選擇的區(qū)域在操作中以綠色方框標(biāo)記。在服飾顏色和背景顏色復(fù)雜時,可以為了取得更好的分割效果,進(jìn)行額外的交互步驟操作。算法運(yùn)行時使用提示的按鍵可以進(jìn)行相對應(yīng)的操作,即可以手動標(biāo)注部分前景和背景色。如圖3,前景色標(biāo)記為淺藍(lán)色,背景色標(biāo)記為深藍(lán)色。適當(dāng)?shù)娜藱C(jī)交互處理后即可進(jìn)行圖像的分割操作,研究者可自行選擇迭代次數(shù),直到獲取到所需的前景圖像,一般情況下,三次迭代以內(nèi)即可得到較為滿意的結(jié)果。衣服區(qū)域分割完畢后,需要再進(jìn)行一次褲子區(qū)域的分割識別,對下衣區(qū)域進(jìn)行同樣的交互操作后,可分割得到人物衣服和褲子的前景圖像,保存并進(jìn)行下一步操作。
圖3 一次迭代分割結(jié)果
為了生成與圖片中近似的三維角色服飾,在分割識別出圖片中人物的衣服和褲子區(qū)域后,需要對其各部分的前景圖像計(jì)算出對應(yīng)部位的顏色風(fēng)格信息。事先從模板庫中選取并處理好三維人物服飾模板的UV 和紋理圖,將代表風(fēng)格的顏色分別填充進(jìn)紋理圖中。這張重新生成的模型紋理圖,因?yàn)樯岛头棙邮脚c輸入圖片的人物相似,貼合到人物角色的模板模型后,能達(dá)到使新外表更接近原圖的效果。
為獲取圖片中服飾的主色調(diào),需要對獲取的前景圖像進(jìn)行合適的計(jì)算。計(jì)算顏色色彩的表現(xiàn)是否相近時,效果較好的是采用HSV 色值空間[16]或LAB 色值空間[17],但原圖在進(jìn)行分割操作時,采用的色彩空間是RGB 色值空間,進(jìn)行色彩轉(zhuǎn)換的時間代價太大。在試驗(yàn)后發(fā)現(xiàn),因?yàn)榉指詈蟮膱D像色彩已經(jīng)較為一致,采用均值的方式得到顏色信息即可大致代表衣服色值風(fēng)格。但是在一些分割不精確的情況下,與主色調(diào)差值很大的像素點(diǎn)會一定程度影響得到的顏色風(fēng)格。在直接取均值之后,得到的服飾顏色雖然也接近原圖,但是色澤略微泛白,剔除極端值之后,得到的服飾顏色更接近原圖顯示的服飾色澤。最終采用了剔除極端值后的計(jì)算顏色均值的方法,計(jì)算出當(dāng)前服飾片面的顏色風(fēng)格。此種方法得到的色彩效果,在肉眼辨別下與原圖片服飾色調(diào)無明顯差別,在速度表現(xiàn)上較轉(zhuǎn)換色彩空間更快。
極端值的剔除采用的方法步驟如下所示。
(1)使用公式(2):
分別計(jì)算服飾前景的所有像素的RGB各顏色通道的初始均值為vR1、vG1、vB1。
(2)使用公式(3):
計(jì)算出每一個像素點(diǎn)xi的RGB值xRi、xGi、xBi,與初始均值vR1、vG1、vB1的差值sxi。經(jīng)過實(shí)驗(yàn),設(shè)定剔除像素點(diǎn)的閾值為300,將計(jì)算出的sxi超過此閾值的像素點(diǎn)x 視為極端值,從均值計(jì)算中剔除,將其是否參與計(jì)算的flag歸0。
(3)剔除極端像素值后,對服飾前景中所留下的像素點(diǎn)再次使用公式(1)分別計(jì)算RGB通道的均值,得到最終的均值顏色RGB的值分別為vR、vG、vB。
分別計(jì)算衣服和褲子的顏色均值,得到的RGB 值分別存儲進(jìn)包含RGB 三值的Color 結(jié)構(gòu)體中,記為C_COLOR和P_COLOR。
此步驟是通過對人物模型的衣服和褲子對應(yīng)的紋理圖區(qū)域進(jìn)行圖像處理,從而改變原模板模型的外觀。
首先對原模型進(jìn)行UV 的展開。根據(jù)實(shí)驗(yàn)需要從模型庫中選取的幾個較為典型的人物模型,使用UVLayout軟件進(jìn)行UV的展開,得到模板中人物模型的UV 展開圖,展開的UV 圖中擁有模型與紋理圖圖片相對應(yīng)的坐標(biāo)信息。
其次對衣服和褲子的展開圖區(qū)域,使用不同的鮮明的顏色,分別平滑填充展開后的UV圖中衣服和褲子的片面。對每個作為人物樣例的模型模板都進(jìn)行相應(yīng)處理。得到顏色區(qū)分后的UV圖,我們就完成了程序運(yùn)行前的UV準(zhǔn)備。
最后將取得的衣服和褲子的顏色均值C_COLOR和P_COLOR,分別填充到UV 圖用顏色區(qū)分后的對應(yīng)區(qū)域中,將衣服的所有紅色部分像素顏色值替換為C_COLOR,褲子的所有藍(lán)色部分的像素顏色值替換為P_COLOR,即完成了UV圖的處理部分。如圖4所示。
圖4 UV對應(yīng)的紋理圖處理過程
得到自動處理好的UV 紋理圖后,利用OpenGL 的圖形接口結(jié)合OpenCV 的圖形庫進(jìn)行編程,將UV 圖中各個像素點(diǎn)的顏色信息根據(jù)每個點(diǎn)對應(yīng)模型的坐標(biāo)信息,貼合到人物的.obj 格式的多邊形模型上,即完成相似人物模型的生成。
實(shí)驗(yàn)環(huán)境為64位Win7 SP1操作系統(tǒng),主機(jī)CPU為Intel Core i7-2600,內(nèi)存8 GB。程序運(yùn)行環(huán)境為Visual Studio 2013,采用的OpenCV 庫版本為3.0.0,采用OpenGL的編程接口作為顯示和交互平臺。作為原始模型讀取和格式轉(zhuǎn)換的工具為3DMax 2015版。
實(shí)驗(yàn)選取的輸入圖像為幾張較為典型的人物照片和古代繪畫,選取的角色服飾模板是從模型庫中匹配對應(yīng)圖片選擇的典型模板,以展示輸入和輸出的模型結(jié)果作為驗(yàn)證。實(shí)驗(yàn)展示分別分為人物照片到模型和古代繪畫到模型兩個部分。
本文選取了具有代表性的三張現(xiàn)代人物照片進(jìn)行實(shí)驗(yàn),為表普適性,分別展示了長袖長褲女性、短袖長褲男性、短袖短褲男性這三種服飾樣式的模型生成。
實(shí)驗(yàn)輸入及結(jié)果展示如圖5,每一列的第一行數(shù)據(jù)是輸入的人物照片,第二行是采用的人物服飾模型庫中的原模型,第三行是經(jīng)過實(shí)驗(yàn)的系統(tǒng)處理之后,生成的類似第一行人物角色服飾的虛擬模型。經(jīng)過實(shí)驗(yàn)展示,可證明能夠生成有一定相似度的人物模型。
為了展示本文方法在今后可能適用的更多虛擬場景,實(shí)驗(yàn)選取了具有代表性的一張多人古代繪畫進(jìn)行仿真的操作。
如圖6 是從模型庫中選取的典型古代女性模型。如圖7 是輸入的古代繪畫——搗練圖的局部截取圖。因?yàn)楣糯说姆椂酁槿寡b,所以將圖中女性的服飾分為上衣和長裙部分分別識別,用以代替現(xiàn)代人的上衣和下衣。原模型女性上衣和裙裝的部分紋理圖案較多影響仿真,預(yù)處理時將其圖案平滑處理。
圖5 輸入圖片與生成模型
圖6 采用的典型古代女性角色三維服飾模型及其服飾紋理展開圖
圖7 搗練圖局部
如圖8是對圖7這種典型的多人物古代繪畫進(jìn)行處理的效果。實(shí)驗(yàn)展示的是,對圖中每個人物分別進(jìn)行識別,最后分別生成對應(yīng)每個人物的角色服飾模型的實(shí)驗(yàn)結(jié)果。圖8(a)是古代畫作中從左到右分別識別出的四個人物服飾上衣和下衣的圖片前景,及其對應(yīng)生成的單個人物角色服飾模型。圖8(b)展示的是將生成的與原圖相似的人物模型導(dǎo)入3DMax 的軟件,通過3DMax 給角色模型賦予骨骼,從而改變角色的姿態(tài)動作以趨近于原圖后再進(jìn)行合并的多角色模型效果圖。
圖8 生成的古畫角色模型
實(shí)驗(yàn)證明經(jīng)過本文的實(shí)驗(yàn)方法處理,可以生成與原古代畫作有一定相似度的古代角色服飾模型。
本文主要提出了一種簡單便捷的由人物圖片生成相似的三維人物模型的方法。結(jié)合了圖像識別相關(guān)技術(shù)、三維人物模型建模的相關(guān)知識和OpenGL 編程技術(shù),快速地生成近似的人物三維模型,并且得到的模型可用于多樣化人物的生成。不同于以往的對圖片上的每一個人物進(jìn)行手動精細(xì)建模的方法,也不同于由二維圖片更換人物頭部模型而實(shí)驗(yàn)的二維試衣系統(tǒng),本文系統(tǒng)雖然可以快速生成與圖片相似的人物模型,但是在模型的相似程度和精細(xì)程度上還有待改善。進(jìn)一步的工作主要有兩個方面:一是在使用非人機(jī)交互的方式,采用深度學(xué)習(xí)中對抗網(wǎng)絡(luò)的方式[18],自動識別并區(qū)分人物的衣服和褲子;二是如何將圖片中衣飾的具體紋理細(xì)節(jié)一并貼到人物模型上。