楊 振, 董洪偉, 杜星悅
(江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 214122)
三維人臉重建一直是計(jì)算機(jī)圖形學(xué)一個(gè)研究熱點(diǎn),其間接方法是指由一張或多張二維圖像重建三維人臉[1],包括基于統(tǒng)計(jì)模型的三維人臉重建[2~4]、基于多視幾何的三維人臉重建[4]、基于光照立體的三維人臉重建[5~7],以及近年來迅速發(fā)展起來的基于機(jī)器學(xué)習(xí)的三維人臉重建[11,12]。本文采用基于光照立體的方法,實(shí)現(xiàn)從單幅人臉照片重建三維人臉。
傳統(tǒng)的由陰影恢復(fù)形狀(shape from shading,SFS)需要知道反射率屬性和光照以及邊界處的深度值,然而這些條件并不容易獲得。 為此,Ira K[7]基于不同的人臉模型在尺寸、長寬比,以及鼻子、眼睛等主要特征的位置是相似的,并且假設(shè)人臉模型滿足朗伯反射,通過引入一個(gè)參考人臉模型,將問題轉(zhuǎn)化為求解圖像的輻照度方程的問題,利用球諧函數(shù)先計(jì)算光照強(qiáng)度,再計(jì)算每個(gè)像素點(diǎn)深度值。
本文的方法與之不同之處是,先將初始模型投影到圖像上以獲取模型上3D點(diǎn)的顏色信息,進(jìn)而更新每個(gè)頂點(diǎn)的法線,最后利用更新后的法線移動(dòng)模型的頂點(diǎn)位置。與文獻(xiàn)[13~15],不同之處是,本文只使用一張圖像。文獻(xiàn)[13,14]理論上需要最少4張圖像,利用SVD建立與球諧函數(shù)的聯(lián)系。但由于人臉是非剛性的,不同圖像中的人臉會(huì)有表情上的差異,這會(huì)影響SVD的結(jié)果,因此需要大量圖像消除噪聲。
本文使用一張人臉圖像重建高質(zhì)量的三維人臉模型。輸入一張人臉圖像,采用文獻(xiàn)[16]方法檢測特征點(diǎn),采用文獻(xiàn)[4]中的形變模型方法擬合一個(gè)初始三維人臉模型;使用基于模型的SFS恢復(fù)模型上每個(gè)頂點(diǎn)的法線;基于法線使模型變形,獲得具有細(xì)節(jié)的三維人臉模型。
本文算法主要包括2部分:基于圖像輻照度方程的模型頂點(diǎn)法線恢復(fù)和基于法線的模型變形。
首先基于輸入的2D人臉圖像,用文獻(xiàn)[4]中的方法獲得模型到圖像的相機(jī)參數(shù),并旋轉(zhuǎn)參考模型使其與圖像對(duì)齊。使用形變模型擬合一個(gè)初始三維人臉模型。為了計(jì)算頂點(diǎn)法線,獲取當(dāng)前視角下的可見點(diǎn)以及每個(gè)頂點(diǎn)在圖像上投影點(diǎn)的顏色信息,利用基于獲得模型到圖像的相機(jī)參數(shù),旋轉(zhuǎn)參考模型使其與圖像對(duì)齊,進(jìn)而獲取初始模型中當(dāng)前視角下的可見頂點(diǎn)以及其在圖像上的投影點(diǎn)的顏色信息。圖1為本文方法的簡要流程。
圖1 本文算法簡要流程
首先用文獻(xiàn)[4]中的形變模型方法擬合一個(gè)初始三維人臉模型,然后利用模型到人臉圖像的相機(jī)參數(shù)旋轉(zhuǎn)模型,并獲取當(dāng)前視角下模型上的可見頂點(diǎn)。 將模型上可見頂點(diǎn)投影到人臉圖像上可以為每個(gè)頂點(diǎn)得到一個(gè)顏色信息。 本文使用球諧函數(shù),基于每個(gè)頂點(diǎn)得顏色信息更新它們法線。
(1)
(2)
首先,計(jì)算光照系數(shù)和每個(gè)頂點(diǎn)的反射率?;谖墨I(xiàn)[9,10]方法,將其修改成適用于三維模型的形式
(3)
基于式(1)~式(3)給出能量函數(shù)
(4)
式中t為當(dāng)前迭代次數(shù)。將第一項(xiàng)稱為數(shù)據(jù)項(xiàng),用于最小化頂點(diǎn)的顏色誤差; 第二項(xiàng)和第三項(xiàng)為平滑約束項(xiàng),其中第二項(xiàng)使得相鄰點(diǎn)的反射率不會(huì)偏差過大,第三項(xiàng)使得相鄰頂點(diǎn)的法線不會(huì)偏差太大;β為法線平滑約束的權(quán)重;第四項(xiàng)稱為規(guī)則化項(xiàng),使得更新后的值不會(huì)過于偏離初始值;γ為規(guī)則化項(xiàng)的權(quán)重。按照以下步驟優(yōu)化式(4):
1)計(jì)算光照系數(shù)
首先計(jì)算光照系數(shù),第一次迭代時(shí),令頂點(diǎn)的反射率為所有頂點(diǎn)在圖像上獲得的顏色的平均值,令頂點(diǎn)的法線等于初始模型上的法線,將補(bǔ)償值d置零。 此時(shí)平滑項(xiàng)和規(guī)則化項(xiàng)可以省略,式(4)可簡化為
(5)
2)計(jì)算反射率補(bǔ)償值
(6)
3)計(jì)算頂點(diǎn)法線
(7)
式(7)同樣可由線性最小二乘法直接求解。
利用更新后的頂點(diǎn)法線優(yōu)化初始模型。與文獻(xiàn)[17]類似,定義
(8)
式中vu,vw為頂點(diǎn)vi的鄰居頂點(diǎn),構(gòu)成一個(gè)三角形網(wǎng)格,vu,vw構(gòu)成vi的一個(gè)對(duì)邊。如圖2所示。 式(8)約束每個(gè)頂點(diǎn)的法線要垂直于頂點(diǎn)的所有對(duì)邊,即利用更新后的法線改變初始模型中頂點(diǎn)的位置。
圖2 頂點(diǎn)和它的對(duì)邊
簡化文獻(xiàn)[17]中的第二項(xiàng)約束為
(9)
(10)
式(10)同樣是一個(gè)過約束的線性最小二乘優(yōu)化問題,可以直接用線性最小二乘求解。圖3給出用本文方法重建的三維人臉模型。
圖3 本文方法重建的三維人臉模型
使用Basel臉模型(Basel face model,BFM)[3]生成初始模型,初始模型有53,490個(gè)頂點(diǎn)和160,470個(gè)由三角形構(gòu)成的面。首先將模型上的頂點(diǎn)投影到二維人臉圖像,獲取所有可見頂點(diǎn)以及這些頂點(diǎn)在彩色圖像上的顏色信息。 利用式(3)更新可見頂點(diǎn)得法線。由于處理側(cè)面人臉時(shí),由于鼻子的遮擋,在鼻子附近會(huì)有一部分頂點(diǎn)不可見。使用式(4)時(shí)并沒有更新這些頂點(diǎn)法線。 對(duì)于每個(gè)被遮擋得頂點(diǎn),通過插值獲取其法線。
實(shí)驗(yàn)中,本文的參數(shù)設(shè)置如下:α=0.2,β=3,γ=10,λ1=1,λ2=1。為了能夠更好地與其他算法相比較,使用文獻(xiàn)[7,10]所用的圖像與本文方法進(jìn)行對(duì)比實(shí)驗(yàn),圖4給出了對(duì)比結(jié)果。
圖4 3種方法實(shí)驗(yàn)結(jié)果對(duì)比
本文首先利用SFS獲取法線,然后基于法線時(shí)模型變形成具有細(xì)節(jié)的三維人臉模型,實(shí)驗(yàn)結(jié)果表明,本文方法可以重建高質(zhì)量的三維人臉模型。 實(shí)驗(yàn)發(fā)現(xiàn),初始模型與輸入圖像的相似度越高、相機(jī)參數(shù)越精確,SFS計(jì)算得到的法線便會(huì)越精確。提升初始模型的精度、優(yōu)化相機(jī)參數(shù),可以提高重建的三維人臉模型的質(zhì)量,將來可以考慮將本文算法擴(kuò)展到從多張圖像重建三位人臉以及基于視頻的三維人臉動(dòng)畫重建。