Life sucks, but you're gonna love it.

0%

论文阅读 | SCAPE: Shape Completion and Animation of People

摘要

文章介绍了 SCAPE 方法,一种在人体形态和姿态的变量上都可拓展的数据驱使的方法。这个方法是基于关节点(articulated)和非刚性(non-rigid)的表达方式。文章学习了一种姿态分解模型可以驱使非刚性曲面作为一个关于关节点骨骼变化(articulated skeleton)的方程。文章同样学习了另一种基于人体形态的变量模型。结合两种模型,作者可以生产不同人在不同姿态下具有真实肌肉变化的人体模型,即使这个模型不在训练集中。

文章展示了自己的模型如何实现 shape completion , 也就是说在有限的已知标定点(marker)下,实现目标人体模型曲面(surface mesh)。该方法可以生成一个正在运动的人高质量动画曲面,拥有真实的肌肉变化。而实现这些只需要一个数据扫描模型和一系列的标记点。

简介

文章介绍的 SCAPE 方法主要就是数据驱使的建立人体模型的方法。这个方法可以实现非刚性的变化,不仅仅局限于低纬度的刚性的骨骼姿态变化,还可实现非刚性比如肌肉的曲面变化。并且这个模型可以实现人体形态在多变量下的变化,比如改变人的身高体重三维等等。

这个方法可以应用在两个重要的图形问题方面:一个是对于不完整的扫描模型的补全以及动作的预测,第二个就是利用稀疏的标记点可以预测认得完整模型并且实现一系列的动作动画。

Acquiring and Processing Data Meshes

  1. Range Scanning. 利用Cyberware WBX全身扫描器。主要生成两组dataset。其一是 pose dataset,是某个指定人的70个姿势的扫描, 其二是 shape dataset 包含37个不同人在相同(相似)姿态下的扫描。同样添加了从CAESAR数据集的八个数据。pose dataset中选择一个mesh(也就是由三角形连接成的曲面人体模型)作为template mesh, 其他的数据都叫做instance mesh
  2. Correspondence. 将template mesh和其他的instance mesh关联起来。非刚性模型注册算法需要在instance mesh和template mesh之间找一组对应的markers。文章通过 Correlated Correspondence(CC)来寻找markers。最终通过 CC找到140-200个markers。
  3. Non-rigid Registration. 在给出了template和instance中的markers之后,我们要进行非刚性注册。也就是将两个mesh进行匹配。这样的话就可以得到具有同样topology了。
  4. Recovering the Articulated Skeleton. 利用模型的mesh来构建骨骼结构。因为在同样的骨骼关节上的点是在空间上相接触的,并且在不同的扫描下呈现出相似的动作。它可以自动将建立18部分的骨骼结构。
  5. Data Format and Assumptions. 最后得到的数据包括一个 model mesh $X$ 和一系列的 instance meshes $Y = {Y^1,…,Y^N}$. Model mesh $X = {V_X, P_X}$ 包含有一个顶点集 $V_X = {x_1,…x_M}$ 和一个三角集(表示的是顶点和顶点之间的关联,因为mesh是又三角形构成的曲面(triangle mesh))$P_X = {p_1, …p_P}$. Instance mesh就包含有 同一个人在不同动作下的扫描模型,以及不同的人在同一个动作下的扫描模型。因为在之前我们做的Non-rigid registration,我们可以得知这些meshes都有相同的点和triangle。 因此,让$Y^i = {y_1^i, …y_m^i}$ 作为第$i$个模型的点集,对于每一个 $Y_i$ 我么还有一个旋转集 $R^i$ 其中包含了不同的刚性关节的旋转系数 记做 $R_l^i$ 。

Pose Deformation

这部分主要说明的是模型的姿态变换。目标是对 $Y_i$ 中同一个人不同动作的mesh进行建模(找到变化矩阵),与template mesh相匹配。

Deformation process

模型的变形使用了一个两步的,三角形位移不变量表达,来负责一个非刚性和一个刚性变形的部分。

假设我们有个一triangle 的connectivity $pk$ ,包含三个顶点 $x{k,1}, x{k,2}, x{k,3}$. 在我们把 $x{k,1}$ 平移到全局坐标原点下后,变形是应用的三角形的局部坐标系下的。这样变形将会用在三角形的边 $\hat v{k,j} = x{k,j} - x{k,1}, j = 2, 3$

对于这个triangel $p_k$ 而言,有两个部分的变换,一部分是属于非刚性部分的变化,另一部分是属于刚性部分的旋转。

  1. 首先,对于非刚性部分而言有一个 $3 \times 3$ 的线性变化矩阵 $Q_k^i$ ,这部分变化由非刚性的姿态引入(人体肌肉的变形),这部分的变化针对mesh $Y_i$ 中的每一个三角形$p_k$;
  2. 然后根据每个三角所在的刚性部位(根据骨骼节点划分)得到这个三角形的旋转矩阵 $Rl^i$, 若这里三角形 $p_k$ 属于刚性 $l$ 部分,则这个三角形的旋转矩阵表示为 $R^i{l[k]}$.
  3. 这样经过刚性部分和非刚性部分变化之后, 之前定义的三角形$pk$ 的一条边 $\hat v{k,j}$ 经过这两部分的变化后可以表示成:$v{k,j}^i = R{l[k]}^iQ^ik\hat v{k,j}$

这样的话,如果对所有的三角形的所有边进行优化,那么我们可以得到优化方程:

${\arg\min}{y_1,…y_M}\sum\limits_k\sum\limits{j = 2,3}||R{l[k]}^iQ^i_k\hat v{k,j} - (y{j,k} - y{1,k})||^2$

要优化的是所有点,不然的话找到对应的三角形不是连续的。

Learning the Pose Deformation Model

以上展示了如何将姿态引入的变形建模为针对 $p_k$ 的一系列变化 $Q_k^i$ 的矩阵(非刚性变化部分)。文章希望可以通过骨骼的刚性变化来预测这些非刚性变化的矩阵。

【已知对于每一个mesh $Y_i$ 而言都有一组 ${ R_l^i}$ 来表示该mesh的刚性关节旋转状态。】

假设 $R{l_1}$ 和 $R{l2}$ 是两个相邻刚性部分关于某joint的绝对旋转矩阵,那么两个相邻部分的相对旋转矩阵就是 $R{l1}^TR{l_2}$ (relative joint rotation)

关节旋转(joint rotation)可以用他们的扭转坐标来表示。如果用 $M$ 来表示一个 $3 \times 3$ 的旋转矩阵, 这个么这个关节叫的扭转 $t$ 则是一个3D 向量:

$t = \frac{||\theta||}{2sin||\theta||}\left[\begin{matrix}m{32} - m{23}\m{13} - m{31}\m21 - m{12}\end{matrix}\right]$

Body-Shape deformation