林琴,李衛軍,董肖莉,寧欣,陳鵬
(1. 中國科學院半導體研究所 高速電路與神經網絡實驗室,北京 100083; 2. 中國科學院大學 電子學院,北京100029; 3. 認知計算技術威富聯合實驗室,北京 100083)
人臉的三維結構信息廣泛地應用在人臉圖像處理中,例如人臉識別、人臉跟蹤、人臉對齊、人臉表情識別等方面。在過去幾年,國內外研究者提出了許多人臉三維重建的方法,一類方法是基于額外的硬件設備進行三維人臉結構的采集,如使用三維激光掃描儀、結構光掃描儀等。這類方法能夠獲得精度較高的人臉三維結構數據,但是需要使用硬件設備,使得此方法具有造價高、不靈活、復雜度高等諸多限制,并不適合應用于普通場合[1-2]。另一類方法是基于視頻[3]或者基于多角度照片[4]的三維人臉重建方法,這類方法成本低,使用靈活,能夠應用在日常生活中。
第二類人臉三維重建的方法主要包含基于立體視覺的[5-6]人臉三維重建方法,基于明暗恢復形狀(shape from shading,SFS)[7-9]的人臉三維重建方法,基于運動的SFM(structure from motion)人臉三維重建方法,和基于三維形變模型(3-D morphable model,3DMM)的人臉三維重建的方法等。
SFS方法假設圖像中的樣本與參考樣本間具有大致相似的形狀和反射率,從單幅圖像中物體表面的明暗變化來恢復其表面各點的相對高度或表面法向量等參數。雖然該方法使用了不同的限制,但其所求得的解的存在性和唯一性仍然是一個問題[7-8]。SFM方法根據包含局部運動信號的二維圖像序列來估計三維結構信息。王琨等[9]提出了根據兩幅正面人臉圖像和一幅側面圖像重建人臉三維模型,雖然此方法能夠重建出三維人臉,但是結果并不夠準確。H. S. Koo等[4]提出了對一組不同姿態的人臉圖像進行相似變換從而恢復人臉的三維結構的方法,但是該方法計算復雜,運算效率低。Z. L. Sun等[10-11]提出了基于非線性最小方差(non-linear least-squares,NLS)模型和基于帶約束的獨立成分分析(constrained independent component analysis,cICA)的方法,通過使用一個正面人臉照片和非正面人臉照片來估計人臉特征點的深度值,該方法提高了運算效率。3-D形變模型[12-14]是以人臉空間的基向量為基礎,建立三維人臉的表示模型,通過將形變模型與輸入圖像匹配的方式來實現對輸入圖像的三維重建。這類方法在恢復人臉細節特征方面效果不夠理想,并且需要使用通用的模型進行訓練。
然而如何使用雙目立體圖像來重建人臉的三維結構仍然是一個有挑戰的問題,這種方法只使用一對圖像,它們來自雙目攝像頭的左攝像頭和右攝像頭,從而對人臉的三維信息進行恢復。目前存在很多雙目匹配的方法,如BM[15]算法、SGM[16]算法、Meshstereo[17]算法等。但是人臉區域的低紋理問題是人臉結構三維重建需要解決的主要問題。因此,提出了專門針對人臉結構的雙目立體匹配方法,如基于人臉先驗的塊匹配方法[18]、基于種子點增長法[6]等進行三維人臉結構的恢復,這類方法采用高分辨率(1 380×1 030)的攝像頭采集設備,獲得較高準確的結果,或者采取普通分辨率(640×480)的攝像頭,但是獲得的人臉精度比較差。
本文提出了一種通過普通的雙目攝像頭獲取精度較高的三維人臉結構的方法。本文通過立體匹配得到臉部的視差值,從而恢復出臉部對應三維結構。該方法結合臉部具有的拓撲結構,通過獲取臉部稀疏點的視差值,進行線性插值,初始化出臉部稠密的視差值,再利用局部匹配方法PatchMatch[19]對臉部的視差值進行平滑處理,更好地恢復出臉部的曲面特征。
在雙目視覺系統中,通過立體匹配算法,找到左右兩幅圖中相匹配的點,如圖1所示。

圖 1 校正后的立體視覺系統的幾何模型Fig. 1 Rectified stereo vision system
根據相似三角形原理,可以得到式(1),由此變換后,得到式(2),從而求得此點對應的深度值。


式中:Z代表深度值,T代表兩個攝像機之間的基線長度,f代表攝像機的焦距,、分別代表左右攝像機的列坐標,d代表視差值。
由此可知,空間的一點,投射在左右攝像機平面上,該點在左邊攝像機的圖像平面上具有圖像點,其坐標為,同樣此空間點在右邊攝像機的圖像平面具有圖像點坐標,其坐標為,因為對相機平面進行了校正,使得,視差值為左右匹配點的橫坐標之差。
在已知兩個對應點的坐標的前提下,根據式(2)就可以獲取對應點的深度值。
由于人臉具有較多的弱紋理區域,使用常用的立體匹配算法來恢復人臉的三維結構具有一定難度,所以本文利用人臉結構的特殊性,通過人臉檢測技術和關鍵點定位技術,匹配出左右兩幅圖像中的人臉關鍵點,獲得人臉稀疏的視差值,進而通過插值算法得到整個臉部的粗略的視差值。接著將此視差值作為初值應用到稠密匹配方法Patchmath算法中,調整整個臉部視差值。最后通過三角測量原理恢復出對應點的三維坐標。
為了定位出人臉的關鍵點信息,本算法采用回歸樹集合 (ensemble of regression trees,ERT)[20]算法獲取人臉的初始形狀的關鍵點。通過ERT算法進行初始定位后,能夠得到左右兩幅圖上的臉部關鍵點的拓撲結構,計算相應的視差值,再對臉部稀疏的視差值進行線性插值,得到臉部整體的初始視差值,保證了臉部初始結構連續性且有一定的平滑性。通過初始化臉部的視差值,可以減小PatchMatch的迭代次數,使得算法更加快速地計算出準確值。
為了獲得臉部區域的初始視差值,本文首先計算了臉部稀疏的視差值。本文在左右兩個圖像上分別采用ERT算法定位出關鍵點,建立臉部關鍵點的匹配。此算法利用線下訓練得到模型,定位檢測圖像中關鍵點的位置,恢復人臉的稀疏結構。至此,獲得人臉先驗的稀疏拓撲信息,得到左圖人臉形狀SL和右邊人臉形狀SR,其中包含的左臉特征點坐標,n代表特征點的總數。右臉特征點坐標。如圖2所示,由于左右圖像是經過立體校正的,所以左右的匹配點位于同一行。點的視差的計算如式(3)所示:

至此得到了n個特征點的視差值,但是對于人臉的結構來說,這樣的視差值太過稀疏,不能夠很好地描述人臉的結構。

圖 2 臉部關鍵點定位Fig. 2 Facial landmark
以上述稀疏的臉部關鍵點的視差值為基礎,利用以下兩個步驟來計算臉部的稠密視差:1)結合得到的臉部關鍵點的位置及視差值,對臉部進行Delaunay三角剖分并對三角形內的點進行視差插值,得到臉部稠密的視差初始值;2)通過PatchMatch算法對得到的初始視差值進行平滑處理。
首先利用臉部定位出的關鍵點對臉部進行Delaunay三角剖分,如圖3(a)所示,將臉部劃分成n個三角形,此處假設,位于同一三角形內的點的視差與三角形3個頂點的視差成線性關系,從而通過一個三角形的3個頂點視差值獲得三角形內點的視差值。如果三角形的3個頂點為、、,對于三角形內的任意點,都存在一個和,使得點與、、存在如式(4)的關系:


從而由式(6)進行插值運算得到對p點的視差D(p):

插值后的臉部視差的偽彩色圖如圖3(b)所示,圖中中間區域代表距離攝像頭近,邊緣區域代表距離攝像頭遠。從圖中可以看出臉部鼻子區域比眼睛區域距離攝像頭更近,臉部輪廓的區域比眼睛區域距離攝像頭更遠。獲得的結構與人臉結構基本符合。

圖 3 臉部的三角剖分及視差圖的偽彩色圖集合Fig. 3 Face triangulation and Pseudo color image of disparity maps
圖4(a)和圖4(b)分別是未經過初始化和經過插值初始化的視差恢復的三維結構圖,圖4(b)中的人臉額頭部分由于沒有關鍵點,不能通過上述步驟得到,所以采取使用眉毛部位的視差值對其進行初始化。可以看出沒有經過初始化的臉部三維結構是一些隨機點,而經過插值初始化后的人臉三維結構已經初步具有人臉的基本形狀信息,但是僅經過線性初始化的方法得到的人臉三維結構不平滑所以需要通過2.3部分的內容進行進一步優化。

圖 4 臉部三維效果圖Fig. 4 Face 3-D renderings
傳統的局部的立體算法以整數視差作為支持窗,此處假設,位于同一個支持窗區域內的像素具有相同的視差值,但是該假設不適用于傾斜的平面,所以會導致重建的前向平行的表面出現一定的偏差。PatchMatch立體算法提出使用傾斜的支持窗策略來解決該問題。因此,對于臉部這樣的曲型平面,PatchMatch方法能夠較好地恢復。
該算法通過對每個像素構造一個平面,然后找到局部最優平面,再以此平面來描述此點的視差值。該算法與其他的局部立體匹配算法一致,包含代價匹配、代價聚合、代價計算和后處理4個步驟。本文采用的代價匹配算法是census[21]算法。對于圖片上的像素,對應的視差為d,對應的視差平面表示平面,單位向量表示平面的法向量。對于某一個像素點的聚合視差代價,如式(7):



對于某個像素點選用具有最小的聚合匹配代價的平面作為當前點的最優平面,如式(10)所示:

f代表所有的視差平面,所對應的解是無窮多的。通過下面的方式找到較優的平面參數。
首先初始化平面參數和視差參數,Patch-Match方法采用的是隨機初始化方式,但是人臉重建與場景重建之間存在差別,人臉可以通過檢測方法確定其所在區域,并且通過關鍵點檢測技術,初步匹配出左右圖像人臉的關鍵點,從而獲得稀疏的視差值,結合線性插值方法恢復稠密的視差,為視差提供更好的初始化方式,從而使得算法能夠更快地收斂到正確的視差值。本文采用2.1和2.2中的方法得到的臉部視差值進行初始化,圖片其余部分視差值進行隨機初始化。平面參數采用隨機初始化方式。通過迭代步驟和后處理步驟來更新最優平面參數。迭代步驟中包括空間傳播、視角傳播和平面細化3個步驟。
該部分中對提出的方法從定性和定量兩個方面進行分析。首先,使用雙目立體相機采集人臉圖像,獲取的圖像分辨率為640像素×480像素,構建實驗室自主人臉數據庫,后文用數據庫1表示,由于該數據庫上缺乏人臉的基準三維坐標,因此,僅從定性方面進行分析。然后在公開的人臉數據庫Bosphorus[22]上進行了臉部深度的定性分析和定量分析。Bosphorus數據庫提供了人臉圖像和對應點的三維坐標,有利于對人臉三維重建結果做評估,并且與其他在該庫上進行的人臉三維重建[10-11,15]算法進行比較。
數據庫1包含20人的不同圖像對,圖像通過雙目相機采集,圖片大小為640像素×480像素。將該算法與局部立體匹配算法BM和半全局立體匹配算法SGBM(semi-global block matching)進行比較。SGBM是opencv基于SGM算法改進得到的算法。從圖5可以看出,BM算法雖然能夠得到人臉的總體輪廓,但人臉三維點云很稀疏,說明該算法對弱紋理區域重建較差;SGBM算法相比較BM算法,能夠得到更加稠密的點云,但是人臉的下巴與人臉分離,連續性較差,出現了分層現象。而本文提出的算法能夠得到更加稠密的人臉點云信息,而且得到的人臉結構也更加真實。可以看出針對人臉結構的雙目立體匹配的算法能夠更加準確地恢復出人臉的三維結構。

圖 5 不同算法對人臉的三維重建效果Fig. 5 Face 3-D renderings on different algorithms
圖6展現了本文提出的方法對數據庫1中的部分人臉的三維結構恢復,由于側面信息能夠更加直觀地展現出人臉的深度信息,所以通過展示人臉的側臉深度信息來進行比較,前5張圖是真實人臉的三維點云效果圖,最后一張是人臉照片所得到的三維點云效果圖。從圖中可以看出,對于不同的人都具有能夠區分的三維結構,而人臉照片并不具有人臉結構,說明重建的效果具有一定的區分性。
現在大多數基于雙目視覺進行人臉三維重建的方法都只進行了定性分析,為了對本文提出的算法進行定量分析,使用Bosphorus數據庫進行實驗,但是數據庫中只提供了一個攝像頭采集的照片,需要對圖像進行雙目合成。實驗中,使用數據庫中每個人物的5個模型,這5個模型對應不同的姿態(被命名為PR_D、PR_SD、PR_SU、PR_U和YR_R10,分別代表向下傾斜,輕微向下傾斜,輕微向上傾斜,向上傾斜,向右偏轉10°)。利用每一個模型的照片對應的三維坐標,計算了每個照片對應的視差圖,從而合成了每一個照片對應的雙目圖像,即下文提及的左圖和右圖。其中bs003人物對應的雙目圖像和對應的視差圖像如圖7所示。圖7中展示了數據庫中人物4(命名為bs003人物)5個姿態下(不同列)的圖像,第1行圖像是數據庫中的原圖,將此作為雙目立體視覺系統中的左攝像頭獲取的數據;第2行是通過雙目立體視覺原理模擬得到的右攝像頭獲取的數據;第3行是對應雙目立體視覺系統下的左圖視差值。此值作為后續估計的基準值。

圖 6 不同人物的人臉深度圖Fig. 6 Face 3-D renderings on different person

圖 7 bs003人物不同姿態Fig. 7 Different poses of bs003
3.2.1 定性分析
使用數據庫中的人物7(命名為bs006人物)5個姿態下的圖像為例,將本文方法與其他方法進行比較,(取迭代次數為3),定性分析如圖8所示,第1行是Meshstereo的方法,是一個全局的算法;第2行是原PatchMatch方法;第3行是本文提出的改進方法;第4行是基準圖。圖8展現了同一個人臉在不同的姿態下人臉視差的恢復,可以看出本文所提出的方法在不同的旋轉角度下都最接近基準圖,對于同樣的迭代次數,按照臉部結構初始化視差的方法使得算法更快地收斂到正確的人臉視差值,使得人臉區域更加接近真實的深度值。

圖 8 不同方法在不同姿態下的視差圖效果Fig. 8 Disparity renderings of different face pose on different methods
圖9中展現了不同方法對不同姿態人臉進行三維重建后的臉部誤差分布圖。第1行是Meshstereo的方法,第2行是原PatchMatch方法,第3行是本文提出的方法。圖中藍色區域為正確匹配的區域(即視差誤差小于等于1個像素),綠色區域表示視差誤差小于2像素大于1個像素,紅色區域表示視差誤差小于3個像素大于2個像素,黃色區域為視差誤差大于3個像素。從錯誤點的分布來看,Meshstereo藍色區域比較小,參雜了很多綠色區域,說明視差誤差為2個像素的區域偏多,而PatchMatch算法和提出的算法有較多的藍色區域,說明能獲得更準確的視差區域。還可以看出3個算法在鼻子區域和臉部輪廓區域出現了較大誤差的區域,這些區域都是遮擋區域,說明算法不能很好地對遮擋區域進行視差的恢復,但是比起前兩個方法,本文算法能夠減少誤差較大區域的面積,從而提高算法的準確率。可以看出結合人臉結構算法有助于人臉區域的重構。

圖 9 不同方法在不同姿態下的臉部誤差分布圖Fig. 9 Error map of different face pose on different methods
3.2.2 定量分析
將提出的方法與M. Bleyer等提出的Patch-Match方法進行比較,如圖10所示。可以看出當迭代次數為4時,兩個算法基本收斂,并且迭代次數等于3與等于4差大概3%,差距減小的速度小了很多。本文提出的方法比原方法在同樣的迭代次數下能夠減小5%的錯誤率。

圖 10 PatchMatch與本文方法的錯誤率比較Fig. 10 Error rate of PatchMatch and proposed method
表1展示了數據庫中前20個人物對應5個姿態下PBM(percentage of bad matching pixel)的平均值,PBM表示錯誤匹配點的百分比,計算如式
(11)所示,PBM值越小表示重建得越準確。可以看出,在每個姿態下,本文提出的方法具有最高的PBM值。



表 1 不同方法在人臉不同姿態下的PBM值Table 1 PBM of different face pose on different methods %
圖11將本文所提出的算法與NLS[10]方法、ICA算法[11](被稱為cICA_MI算法),以及基于塊匹配算法[18]的雙目匹配的算法進行比較。為了與這些算法進行比較,計算臉部基準圖中的22個關鍵點的深度值與本文提出算法建立的深度圖中對應點的相關系數。圖11比較了數據庫中的前20個人物的相關系數。從圖7中可以看出,本文算法的相關系數普遍高于另外3種算法,只有人物2的相關性低于別的算法,根據測試結果,分析發現是22點中的右眼內角點與實際差別較大。

圖 11 不同方法對應的前20個人物的相關系數Fig. 11 The correlation coefficient of the top 20 individuals corresponding to different methods
以人物1(bs000的PR_D姿態)為例,比較人物真實的22個特征點的深度值與本文算法重建所得到的值。為了進行比較,將深度值進行了歸一化,歸一化到[0,1]。通過式(13)對估計的深度值進行歸一化[11]:

從圖12中可以看出,人臉特征點中的大部分的點得到了正確的估計。可以看出算法能夠較好地恢復出人臉的三維深度。

圖 12 真實人臉特征點的深度值與本文方法估計的人臉特征點深度值的比較Fig. 12 Comparison of depth of face key points between ground truth and estimated value by proposed method
綜上所述,無論是與雙目匹配算法比較,還是與人臉重建算法進行比較,本文提出的算法都表現出了較好的性能。
本文通過分析人臉的拓撲結構,結合雙目立體視覺系統,提出了一種新穎的人臉稠密三維點云的三維重建方法。通過對人臉進行關鍵點檢測,獲取稀疏的人臉視差值,然后結合線性插值獲得初始的稠密視差初始值,最后使用立體稠密匹配算法PatchMatch對獲得的值進行了平滑處理。實驗結果證明,本文算法能夠得到光滑稠密的三維人臉重建點云模型。下一步研究的問題是人臉的曲面重建工作及其在人臉識別的應用。