日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

3DMM之EOS 原理解析

發(fā)布時(shí)間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3DMM之EOS 原理解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:簡(jiǎn)介

eos: 一個(gè)輕量級(jí)的頭型3D Morphable面部模型擬合庫(kù)

GitHub - patrikhuber/eos: A lightweight 3D Morphable Face Model fitting library in modern C++14

1 目前支持以下三種3DMM

Surrey Face Model (SFM),

4D Face Model (4DFM)

Basel Face Model (BFM) 2009

2 使用到的計(jì)算相關(guān)庫(kù) Eigen,glm

3 其中具體示例代碼對(duì)應(yīng)的是一個(gè)低分辨率的SFM模型sfm_shape_3448.bin

3D 頂點(diǎn)數(shù): 3448個(gè)

三角形個(gè)數(shù):6736個(gè)

輸入特征點(diǎn)個(gè)數(shù):68個(gè)

PCA:

形狀PCA: 63 個(gè)特征向量 63 * (3448 * 3)

表情PCA: 6 個(gè)特征向量 6 * (3448 * 3)

提供了三個(gè)文件

1 ? 2D與3D特征點(diǎn)序號(hào)對(duì)應(yīng)關(guān)系表:

landmarks 與 3D mesh頂點(diǎn)對(duì)應(yīng)數(shù)據(jù):只有內(nèi)部的50個(gè)頂點(diǎn);不包含16個(gè)輪廓點(diǎn)。

下巴底部點(diǎn)有對(duì)應(yīng)的3D頂點(diǎn),1-8為右輪廓點(diǎn),10-17位左輪廓點(diǎn)

2 ? 3D mesh 可能為邊緣輪廓點(diǎn)的序號(hào),分左邊輪廓和右邊輪廓

3D mesh上可能的邊緣輪廓點(diǎn)序號(hào),左輪廓有17個(gè)候選點(diǎn),右輪廓有17個(gè)候選點(diǎn);

3 ? ?相鄰面,相鄰頂點(diǎn)關(guān)系圖

根據(jù)三角形關(guān)系可以得到10184個(gè)邊,可以一個(gè)10184*2 的頂點(diǎn)相鄰關(guān)系矩陣

根據(jù)這10184個(gè)邊,每一個(gè)邊對(duì)應(yīng)兩個(gè)三角形面,可以得到10184*2的三角形相鄰關(guān)系矩陣

圖1:2D與3D特征點(diǎn)序號(hào)對(duì)應(yīng)關(guān)系表

圖2:3D mesh 可能為邊緣輪廓點(diǎn)的序號(hào)

圖3: 相鄰面?

?

最終X_projection 是三維模型投影到二維平面的點(diǎn),其中

需要求解的參數(shù)有:形狀系數(shù) α以及表情系數(shù) β,旋轉(zhuǎn)矩陣R,位移t_2d 以及縮放參數(shù)s。

P_orth為一個(gè)已知的正交投影矩陣。

最終的目標(biāo)就是最小化輸入的特征點(diǎn)X與投影到二維平面的X_projection的差。

1 求解旋轉(zhuǎn)矩陣相關(guān)參數(shù)[1]

基于黃金標(biāo)準(zhǔn)算法求相機(jī)仿射矩陣,然后進(jìn)行分解得到R,S,T

2 求解形狀系數(shù) α以及表情系數(shù) β [2]

其中表情使用非負(fù)最小二乘法,形狀使用最小二乘求解系數(shù)

[1]: Gold Standard Algorithm for estimating an affine camera matrix from world to image correspondences

[2] O. Aldrian & W. Smith, Inverse Rendering of Faces with a 3D Morphable Model, PAMI 2013.

二 算法總體介紹

即使只進(jìn)行一次迭代,結(jié)果也很好;

當(dāng)用于單圖像擬合和,為了使所有參數(shù)完全收斂,最多需要300次迭代;

在實(shí)時(shí)跟蹤中,如果基于前一幀作為初始參數(shù),只需要迭代1-5次效果就很好;

這里的表情擬合和形狀擬合是交替的,其實(shí)理論上可以將他們進(jìn)行堆疊,一次性求解,

當(dāng)然這兩個(gè)特征向量很可能不是正交的。 但是在任何情況下,交替使用一般認(rèn)為不會(huì)造成 任何傷害。

具體的算法大致流程:

1 獲得相機(jī)pose

2 計(jì)算表情系數(shù)

開(kāi)始循環(huán)迭代

{

1 3Dmesh 輪廓點(diǎn)確定(可見(jiàn)邊+不可見(jiàn)邊);

2 計(jì)算仿射矩陣

3 形狀系數(shù)求解

4 表情系數(shù)求解

}

3DMM = mean + a * shape_pca + b * exp_pca

第一步:初始化 a和b均為0;沒(méi)有顏色pca

current_combined_shape = mean + a * shape_pca + b * exp_pca

current_mesh(current_combined_shape,uv坐標(biāo),三角形關(guān)系圖)

第二步:

vector model_points; // the points in the 3D shape model

vector vertex_indices; // their vertex indices 同樣對(duì)應(yīng)的也不一定是68個(gè)

vector image_points; // the corresponding 2D landmark points 不一定是68個(gè)

根據(jù)配置表:

可以確定內(nèi)部50個(gè)2D和3D特征點(diǎn)對(duì)應(yīng)關(guān)系;左右16個(gè)輪廓特征點(diǎn)和嘴角里面2個(gè)沒(méi)有。

第三步:姿態(tài)初始估計(jì):

基于上面對(duì)應(yīng)的50個(gè)特征點(diǎn)求解R,S,t

基于黃金標(biāo)準(zhǔn)算法求相機(jī)仿射矩陣,然后基于SVD進(jìn)行分解得到R,S,T,這里談到 QR(正交三角)分解法也應(yīng)該可以。

具體代碼計(jì)算:旋轉(zhuǎn)矩陣會(huì)轉(zhuǎn)為四元數(shù),進(jìn)而得到一個(gè)3*4 的仿射矩陣;

第四步:表情擬合,更新參數(shù)b

因?yàn)槟樀男螤钭兓艽?#xff0c;取決于表情。(還是基于上面50對(duì)特征點(diǎn))

因?yàn)楸砬槭荁lendshapes

fit_blendshapes_to_landmarks_nnls:morphablemodel::Blendshapes

fit_shape_to_landmarks_linear :morphablemodel::PcaModel

采用的非負(fù)數(shù)最小二乘法,不支持任何正則化;不是采用的pca向量基,而是采用 blendshape,也不是采用mean,而是當(dāng)前的mean + a*shape_pca(但是其實(shí)好像還是mean)。感覺(jué)這了blendshape跟pca向量基沒(méi)啥區(qū)別;

第五步: 更新當(dāng)前形狀和mesh

current_combined_shape = mean + a * shape_pca + b * exp_pca

current_mesh(current_combined_shape,uv坐標(biāo),三角形關(guān)系圖)

第六步:迭代

6.1 計(jì)算偏航角yaw:示例-29度,向左;

6.2 確定沒(méi)有遮擋的輪廓點(diǎn)點(diǎn)

6.2.1 確定可能的輪廓點(diǎn)

2D輪廓點(diǎn)有16個(gè)特征點(diǎn),3D頂點(diǎn)提供了可能為輪廓點(diǎn)3D頂點(diǎn)序號(hào)34個(gè)。

尋找3D頂點(diǎn)中候選輪廓點(diǎn),一共有左輪廓17個(gè)點(diǎn),右輪廓17個(gè)點(diǎn)

根據(jù)閾值7.5度,當(dāng)絕對(duì)值介于7.5,認(rèn)為人臉朝正,34個(gè)輪廓點(diǎn)均被選中;

大于7.5,當(dāng)臉部朝左,選中右邊的17個(gè)輪廓點(diǎn),反之選中左邊的17個(gè)輪廓點(diǎn);

6.2.2 配對(duì)2D輪廓點(diǎn)與3D候選頂點(diǎn)

例如示例為-29度,朝左,所以這一步只能確定右輪廓對(duì)應(yīng)的3D頂點(diǎn);

針對(duì)2D輪廓點(diǎn)右邊每一個(gè)特征點(diǎn),計(jì)算3D頂點(diǎn)中與之最近的頂點(diǎn),構(gòu)成關(guān)系對(duì);

這樣可以進(jìn)一步確定8個(gè)3D頂點(diǎn)。

6.3 更新確定的2D特征點(diǎn)與3D頂點(diǎn)關(guān)系,增加右輪廓的8個(gè)頂點(diǎn);

50 + 8

6.4 確定遮擋面輪廓點(diǎn):進(jìn)一步確定上面沒(méi)有找到對(duì)應(yīng)點(diǎn)的左輪廓點(diǎn)

確定了42個(gè)3D頂點(diǎn);這步是很關(guān)鍵的,需要仔細(xì)看。

6.5 更新確定的2D特征點(diǎn)與3D頂點(diǎn)關(guān)系,增加左輪廓的42個(gè)頂點(diǎn);

50 + 8 + 42 (2D頂點(diǎn)存在重復(fù))

6.6 姿態(tài)估計(jì):基于上面對(duì)應(yīng)的100個(gè)特征點(diǎn)求解R,S,t

6.7 形狀擬合:更新參數(shù)a

此時(shí)平均臉為mean + b * exp_pca

這里采用的擬合算法參考 Inverse Rendering of Faces with a 3D Morphable Model, PAMI 2013,它是一個(gè)線性的,封閉的解,有正則化;

6.8 表情擬合:更新參數(shù)b

此時(shí)平均臉為:mean + a * pca_shape

這里采用的擬合算法參考

6.9 整個(gè)算法注重得到參數(shù)a和b,并沒(méi)有確定最終對(duì)應(yīng)的68個(gè)3D頂點(diǎn);

7 輸出結(jié)果mesh

??

結(jié)論:

@1 難點(diǎn)還是在于遮擋面的輪廓點(diǎn)選擇;trade off關(guān)鍵點(diǎn);

eos采取了一種接近全局搜索的方法;

eos:基于法向量,計(jì)算相鄰法向量是否同向;

頂點(diǎn)自檢,發(fā)出射線是否射中三角形;

基于2D頂點(diǎn)構(gòu)建kd樹(shù),距離在閾值以內(nèi)的保留;

2 是否可優(yōu)化:內(nèi)部點(diǎn)選擇都是直接基于映射表獲得;

3 目前的fitting C++ 在選擇遮擋輪廓點(diǎn)的時(shí)候比較簡(jiǎn)單,沒(méi)有

考慮姿態(tài)的影響,應(yīng)該是考慮到速度的平衡;

4 耗時(shí)情況:迭代一次,整體耗時(shí)254ms,其中尋找遮擋邊輪廓點(diǎn)223ms。

?@為什么先生2012

總結(jié)

以上是生活随笔為你收集整理的3DMM之EOS 原理解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。