DynamicFusion 解析之双四元混合(Dual Quaternion Blending)
链接:*Skinning with Dual Quaternions,
DynamicFusion Paper
第一篇csdn的文章,主要是看网上讲DQB的少,所以打算写一个比较全的,希望得到大佬们的指点。
DynamicFusion运用DQB的动机 (Motivation)
如果仔细去看DynamicFusion这篇非刚性3D重构 (no-rigid 3D reconstruction) 的朋友会发现,与刚性变化 (rigid transformation) 不同,非刚性重构要求算式对每帧计算一个扭曲场( Warp Field )。这个扭曲场会作为介质将非刚性变换的点转换成刚性变换的点从而进行进一步传统的刚性变化分析 ( W : S ( x ) → S E 3 ( x ) W: S(x)\rightarrow SE_3(x) W:S(x)→SE3(x))。然而,如果用传统的稠密法 (Truncated Signed Distance)去建立这个三维的扭曲场,由于要对每个 3维晶柱点 (voxel) 去做 6DoF 变换的估计,这个过程计算要求是非常大的。
(假如有一张 25 6 2 256^2 2562的图,那么算法则需要生成 25 6 3 256^3 2563的晶柱体 (voxels),每个晶柱体有6个变量 (rotation + translation),则这个算法要生成 6 ∗ 25 6 3 6 * 256^3 6∗2563个变量)
为了缩短计算时间,作者在文章中表示,由于在现实生活中非刚性运动相对平滑,所以我们可以建立一个稀疏的扭曲场,然后用这些稀疏的变量 (6DoF transformation) 去做插值 (interpolation) 从而得到一个稠密的扭曲场。为了保持在做插值中的几何结构,作者在此用到了一个叫dual-quaternion blending (DQB)的算法。
那么下面我们就一起来欣赏一下作者说的这个DQB
双四元混合(Dual-Quaternion Blending)
什么是四元 (What is Quaternion?)
四元是传统意义上的欧拉角旋转矩阵的延伸,其重要性是保持旋转矩阵不进入万向死节所(gimbal lock)。如果一个旋转矩阵进入了gimbal lock中,那么这个矩阵就失去了原有的3DoF,从而不能自由的表示物体接下来的旋转状态。如果我们加入一个维度的话,我们就可以避免gimbal锁的发生。这就是为什么Quarternion是做Graphic大佬们的最爱谈论的东西。
将一个欧拉角转动矩阵转化为四元的方式很简单,提示:用 R = e x p ( [ w ] × ) R = exp([w]_\times) R=exp([w]×) (skew symmetric的特征)去想此变换式
R S E 3 = [ r 00 r 01 r 02 r 10 r 11 r 12 r 20 r 21 r 22 ] R_{SE_3} = \begin{bmatrix} r_{00} & r_{01} & r_{02} \\ r_{10} & r_{11} & r_{12} \\ r_{20} & r_{21} & r_{22} \end{bmatrix} RSE3=⎣⎡r00r10r20r01r11r21r02r12r22⎦⎤
q ( R S E 3 ) = [ q w = 1 + r 00 + r 11 + r 22 / 2 q x = ( r 21 − r 12 ) / ( 4 q w ) q y = ( r 02 − r 20 ) / ( 4 q w ) q z = ( r 10 − r 01 ) / ( 4 q w ) ] q(R_{SE_3}) = \begin{bmatrix} q_w = \sqrt{1 + r_{00} + r_{11} + r_{22}} / 2 \\ q_x = (r_{21} - r_{12})/(4q_w) \\ q_y = (r_{02} - r_{20})/(4q_w) \\ q_z = (r_{10} - r_{01})/(4q_w) \\ \end{bmatrix} q(RSE3)=⎣⎢⎢⎡qw=1+r00+r11+r22/2qx=(r21−r12)/(4qw)qy=(r02−r20)/(4qw)qz=(r10−r01