三維人臉重建講解
來源:投稿?作者:小灰灰?
編輯:學(xué)姐帶你玩AI 公眾號
什么是三維人臉重建
三維人臉重建就是從一張或多張2D圖像中重建出人臉的3D模型,如果是物體重建就是物體的圖片當(dāng)作輸入輸出物體的模型。

如圖所示,我們將input圖片當(dāng)作輸入,通過網(wǎng)絡(luò)輸出三維模型,這個三維模型可以是一個以obj,PLY后綴名的文件名。下圖所示:

2.obj講解
我們將obj文件通過 meshlab 軟件打開,打開后就可以看到我們需要的重建模型。

我們將result.obj用記事本打開可以看到。

那么接下來我們看看obj文件里面怎么表示的。
.obj : 是一種簡單的單獨表示3D幾何圖元的文件格式,通俗來講就是包含頂點的坐標(biāo),每個頂點紋理的UV坐標(biāo),頂點法向量,以及組成多邊形的面的頂點坐標(biāo)、以及紋理UV坐標(biāo)序列,Obj文件可以是ASCII的編碼(.obj)方式也可以是二進(jìn)制格式(.mod)。以ASCII格式存儲的obj文件必須用.obj作為文件拓展名。
我們的result.obj

第一行# OBJ File:是注釋
第二行 mtllib ./result.mtl
因為obj文件不包含面的顏色定義信息,不過可以引用材質(zhì)庫,材質(zhì)庫信息儲存在一個后綴是".mtl"的獨立文件中。mtl文件是obj文件附屬的材質(zhì)庫文件,材質(zhì)庫中包含材質(zhì)的漫射(diffuse),環(huán)境(ambient),光澤(specular)的RGB的定義值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。
所以將 mtllib: 此關(guān)鍵字后參數(shù)為文件名稱,指定了obj文件所使用的材質(zhì)庫文件(mtl文件)的文件名稱。
我們打開result.mtl

可以看見——
newmtl: 定義新的材質(zhì)組,后面參數(shù)為材質(zhì)組名稱
Ka: 材質(zhì)的環(huán)境光(ambient color)
Kd: 散射光(diffuse color)
Ks: 鏡面光(specular color)
d,Tr 均可用于定義材質(zhì)的Alpha透明度
illum:照明度(illumination)后面可接0~10范圍內(nèi)的數(shù)字參數(shù)
0 Color on and Ambient off :顏色打開和環(huán)境光關(guān)閉
1 Color on and Ambient on : 啟用顏色和環(huán)境光
2 Highlight on
3 Reflection on and Ray trace on
4 Transparency: Glass on
Reflection: Ray trace on
5 Reflection: Fresnel on and Ray trace on
6 Transparency: Refraction on
Reflection: Fresnel off and Ray trace on
7 Transparency: Refraction on
Reflection: Fresnel on and Ray trace on
8 Reflection on and Ray trace off
9 Transparency: Glass on ,Reflection: Ray trace off
10 Casts shadows onto invisible surfaces
map_Ka、map_Kd map_Ks 材質(zhì)的環(huán)境,散射和鏡面貼圖,對應(yīng)數(shù)據(jù)為貼圖文件名稱
我們對應(yīng)的是 canonical_image.png

第三行是提示,我們要寫幾何頂點信息?
# vertices:
v -9.1863 9.1863 -5.0000
v -8.8947 9.1863 -5.0000
v -8.6778 9.2662 -5.9126
v -8.3545 9.2339 -5.5443
v -8.0521 9.2233 -5.4228
一個頂點可以用字符 v開頭的一行來提示。接著后面跟上(x, y, z [w])的值來表示頂點坐標(biāo)。W是可選項,默認(rèn)為1.0。一些應(yīng)用支持頂點顏色,通過在x y z后面跟上red, green, blue值來表示。顏色值的范圍為0到1.0。

由上圖可以看見有8065個頂點,有8065行。
接下來是 # vertice textures: 頂點的貼圖坐標(biāo)點 (Texture vertices)紋理坐標(biāo)列表,在(u,v[,w])坐標(biāo)中,這些坐標(biāo)將在0和1之間變化,w是可選的,默認(rèn)為0。

接下來是#vertice normals: (x,y,z)形式的頂點法線列表;法線可能不是單位向量。
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 0.0000 1.0000
接下來是#faces:?
是頂點法線索引,法線索引用于描述頂點的法向量,在描述面的時候是可選項。要添加頂點法線索引,必須在紋理索引之后添加第二根斜線(/),然后在之后添加法線索引。斜線前后不能有空格。
合法的法線索引從1開始,并符合之前面描述的格式。每個面可以包含三個或者更多的單元。
比如"usemtl tex"表示使用的材質(zhì)。
"f 71/71/71"是 “f 頂點索引/uv點索引/法線索引”
usemtl tex
f 1/1/1 65/65/65 4097/4097/4097
f 2/2/2 66/66/66 4098/4098/4098
f 3/3/3 67/67/67 4099/4099/4099
f 4/4/4 68/68/68 4100/4100/4100
f 5/5/5 69/69/69 4101/4101/4101
f 6/6/6 70/70/70 4102/4102/4102
f 7/7/7 71/71/71 4103/4103/4103
以上就是result.obj里面的所有內(nèi)容。
PLY講解
PLY:這個格式主要用以儲存立體掃描結(jié)果的三維數(shù)值,透過多邊形片面的集合描述三維物體,與其他格式相較之下這是較為簡單的方法。它可以儲存的資訊包含顏色、透明度、表面法向量、材質(zhì)座標(biāo)與資料可信度,并能對多邊形的正反兩面設(shè)定不同的屬性。
每個PLY檔都包含檔頭(header),用以設(shè)定網(wǎng)格模型的“元素”與“屬性”,以及在檔頭下方接著一連串的元素“數(shù)值資料”。一般而言,網(wǎng)格模型的“元素”就是頂點(vertices)、面(faces),另外還可能包含有邊(edges)、深度圖樣本(samples of range maps)與三角帶(triangle strips)等元素。
第一行寫PLY
format ascii 1.0 #開頭作為PLY格式的識別。
接著第二行是版本。
element vertex 97991 # 描述元素及屬性,必須使用’element’及’property’的關(guān)鍵字。
element face 194286 一個具有10個面的物體,其PLY檔頭可能包含。
property list uchar int vertex_indices
'property list’表示該元素face的特性是由一行的頂點列表來描述。列表開頭以uchar型態(tài)的數(shù)值表示列表的項目數(shù),后面接著資料型態(tài)為int的頂點索引值(vertex_indices),頂點索引值從0開始。最后,標(biāo)頭必須以此行結(jié)尾:end_header

-0.7221392 63.663975 97.95859 201 150 121: 頂點元素列表一般以x y z方式排列。
3 17141 17426 17427 :表示面元素列表。
更多干貨??關(guān)注我,記得標(biāo)星哦~
