最近想往3D的方向走,自己本身是做基于skeleton(keypoints)的手势识别的,就想在现有的基础上看能怎么衔接到mesh这里。
之前一段时间看过一点mesh相关的东西,但是忘得差不多了,现在再重新梳理一下。
手部几何建模
1.参数化网格
前几年(21年左右)似乎参数化网格方法是主流。代表:SMPL(body)、MANO(hand)
基于mesh结构(由一系列顶点(xyz坐标表示)以及顶点相连构成的边和面)再加上一个蒙皮函数 W \textbf{W} W(如LBS)可以建模一个SMPL模型。整个过程可以理解为制作一个mesh皮 T p ( β ⃗ ) T_{p}(\vec{\beta}) Tp(β),并根据骨架关节点 J ( β ⃗ ) J(\vec{\beta}) J(β)提供的支撑将皮铺好:
M ( β ⃗ , θ ⃗ ) = W ( T p ( β ⃗ , θ ⃗ ) , J ( β ⃗ ) , θ ⃗ , W ) \textbf{M}(\vec{\beta}, \vec{\theta}) = \textbf{W}(T_{p}(\vec{\beta}, \vec{\theta}), J(\vec{\beta}), \vec{\theta}, \mathcal{W}) M(β,θ)=W(Tp(β,θ),J(β),θ,W)
1)SMPL的皮
T p ( β ⃗ , θ ⃗ ) = T ⃗ + B s ( β ⃗ ) + B p ( θ ⃗ ) T_{p}(\vec{\beta}, \vec{\theta}) = \vec{T} + B_{s}(\vec{\beta}) + B_{p}(\vec{\theta}) Tp(β,θ)=T+Bs(β)+Bp(θ)
T ⃗ ∈ R 6890 × 3 \vec{T} \in R^{6890\times3} T∈R6890×3是统计得到的人体的基本姿态,由N=6890个端点组成。 β ⃗ ∈ R 10 \vec{\beta} \in R^{10} β∈R10是代表高矮胖瘦的10个形状参数, θ ⃗ \vec{\theta} θ是代表23个关节点+1个根节点的旋转角度的72个姿态参数,都会对具体人体形状产生影响,而这个影响是线性的,分别由 B s B_{s} Bs和 B p B_{p} Bp实现。
B s ( β ⃗ ; S ) = ∑ n = 1 ∣ β ∣ β n ⃗ S n B_{s}(\vec{\beta};\mathcal{S}) = \sum_{n=1}^{|\beta|}\vec{\beta_{n}}S_{n} Bs(β;S)=n=1∑∣β∣βnSn
S n ∈ R 6890 × 3 × 10 S_{n} \in R^{6890\times3\times10} Sn∈R6890×3×10是通过数据学习出来的10个参数对mesh顶点的影响。
B p ( θ ; P ) = ∑ n = 1 9 K ( R n ( θ ) − R n ( θ ∗ ) ) P n B_{p}(\theta;\mathcal{P}) = \sum_{n=1}^{9K}(R_{n}(\theta)-R_{n}(\theta^{*}))P_{n} Bp(θ;P)=n=1∑9K(Rn(θ)−Rn(θ∗))Pn
R n ∈ R 6890 × 3 × 207 R_{n} \in R^{6890\times3\times207} Rn∈R6890×3×207是旋转矩阵,三维旋转矩阵参数是 3 × 3 = 9 3\times3=9 3×3=9个,207=23*9。上式表示了相对于 T ⃗ \vec{T} T的姿态 R n ( θ ∗ ) R_{n}(\theta^{*}) Rn(θ∗)的变化。
到这里,就拥有了一个mesh皮。接下来,我们要将皮和骨架关节点连接起来,就是蒙皮操作。
2)蒙皮
这里我曾经有点困惑的地方是,其实在前面我们是没有关节点的三维坐标信息的,只有每个关节相对于根部骨骼的旋转信息。因此,首先我们需要估计出关节点:
J ( β ⃗ ; J , T ⃗ , S ) = J ( T ⃗ + B s ( β ⃗ ; S ) ) J(\vec{\beta}; \mathcal{J},\vec{T},S) = \mathcal{J}(\vec{T} + B_{s}(\vec{\beta};S) ) J(β;J,T,S)=J(T+Bs(β;S))
之后,我们看基础的LBS公式:
v ′ = ∑ j = 1 m ω j ( v ) T j v v^{'} = \sum_{j=1}^{m}\omega_{j}(v)T_{j}v v′=j=1∑mωj(v)Tjv
ω \omega ω为权重矩阵, T T T为关节点的旋转平移矩阵, v v v, v ′ v^{'} v′代表变换前后的网格顶点。新的网格顶点考虑了每个关节点的影响加权求和计算得到,在原文中也是这个形式, T T T由每个关节点的旋转矩阵经过世界坐标转换得到。我还没有看具体的细节,看之后有没有再补充。
3)MANO
2. 隐式(Implict)
后处理耗时。
3. Skeleton-Driven
参考博客
旋转矩阵
三维人体动捕模型 SMPL:A Skinned Multi Person Linear Model
人体动作捕捉与SMPL模型 (mocap and SMPL model)