實驗流程

1. Data Transfer

 將 *.wrl 這種資料的檔案轉換成我們要的格式。*.wrl檔案中包含有coord coordinate(3D模型點座標)、coordIndex(3D模型點Index)、texture coordinate(各點在對應圖片上的位置比例)、textCoordIndex(對應圖片各點Index)。其中coordIndex \ textCoordIndex是由三個到五個coord coordinate \ texture coordinate的點為一組,形成組成3D人臉模型的三角片。

  為了確定資料正確性,利用coorIndex和textCoordIndex的相對應關係,把3D人臉模型上的各點位置與顏色投影到平面上,確認是否與原本照片的人臉相同。

 圖2. 模型的對應圖片           圖3.投影到平面上的模型各點顏色
                       

  確定資料正確後,將coord coordinate資料存成*.v_vtx,依照相對應順序將texture coordinate存成*.v_tuv。

 

2. Re-sampling

a. Landmarks selection

  在人臉的照片上將眼、眉、鼻、嘴、輪廓分別點上特徵點。個人眼部8個點*2、眉毛10個點*2、鼻子12個點*1、嘴巴20個點*1、輪廓15個點*1,共83個點。將各特徵點在圖片上的座標存成*.fp檔案。


 圖4. 83個特徵點示意圖

b. Alignment

   因為3D資料庫中的人臉不一定是對齊的,所以先建構一個Generic Model當基準,資料庫中的所有3D模型都以這個Generic Model為準,利用3D的特徵點計算出Pose的資訊,包含scaling,Rotation,以及Translation,再利用算出的Pose資訊套用至所有的Model,使每個Model的Pose 一致。

c. RBF transformation [1]

  由於在第二步驟中仍然無法使特徵點完全對應,所以我們用RBF以保證所有特徵點的對應是完全正確的。

d. Cylindrical re-sampling

  將每個經過RBF轉換過的人臉模型以及Generic Model都轉換到Cylindrical Coordinate座標系中,此時特徵點的對應是完全正確的,而其餘的點則用線性內插的方式得到在原始Model上的Geometry。

     圖5. Cylindrical coordinate transformation (CCT): the 3D face model is
      transformed to a 2D cylindrical coordinate space. [3]

e. Smoothing
  經過以上步驟,由於多次轉換逼近造成models的三角片過度變形,使人臉模型變的凹凸不平,所以利用weights的關係將過度變形的三角片拉回可允許的範圍內。

圖6.過度變形的三角片與smoothing示意圖

3. PCA Models [2]

  將Re-sample過後且點數相同的三維人臉模型的*.v_vtx *.v_tuv檔案統合成各表情的的檔案,如︰An.vtx & An.rgb ,Di.vtx & Di.rgb …,*.vtx & *.rgb中包含100個人、1~4種程度的表情變化,每個表情的模型由11291個點構成,每個點包含x,y,z座標,所以一個*.vtx共有(100*n)*33873筆資料。以*.vtx & *.rgb來建出各個表情的PCA model,存檔為*.pdm。接著就可以利用建好的PCA model來將輸入的照片重建為3D人臉模型。


圖7.各種表情的四種程度變化

4. Reconstruction from Landmarks
  上個步驟建好的各表情*.pdm檔案內,存有能夠涵蓋該表情80%表情變化趨勢的eigen value 和 eigen vector,大約14~16組。可用來將標準模型加以變化,使其更為逼近輸入的人臉圖片。

圖8. 無表情人臉模型使用14組eigen value的變化(正面)

圖9. 無表情人臉模型使用14組eigen value的變化(側面)

圖10.由2D人臉圖片建立的3D model