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