由于人体正方向不一定与深度摄像头(如Kinect)平面垂直,则需要对人体进行方向归一化操作
使人体“头部”、“左肩”、“右肩”、“颈部”和“臀部中心”五个关节所在平面 p p p 与 x − y x - y x−y 平面平行, z z z 轴正方向为面向深度摄像头正前方,如下图 所示
然后,再以“臀部中心”为原点,以 p p p 平面为 x − y x - y x−y 平面, z z z 轴方向不变建立人体空间坐标系
下图中的旋转矩阵 R R R 使五关节所在平面以 π π π 为法向量旋转成以 e z e_z ez 为法向量,设旋转轴为 A = ( a x , a y , a z ) A = (a_x,a_y, a_z) A=(ax,ay,az),旋转角度为 θ θ θ 。用 p 1 , p 2 , p 3 , p 4 , p 5 p_1,p_2,p_3,p_4,p_5 p1,p2,p3,p4,p5 分别代表以上 5 5 5个关节点的三维坐标,由于法向量 π π π 与五个关节点所在平面垂直,则运用法向量与平面中任意两点组成的向量乘积为0 的原理得到向量 π = ( π x , π y , π z ) π = (π_x,π_y,π_z) π=(πx,πy,πz)
令 π ′ , e z ′ \pi ', e_z' π′,ez′为单位法向量,则:
π ′ = ( π x , π y , π z ) ∣ ∣ ( π x , π y , π z ) ∣ ∣ \pi' = \frac{(\pi_x, \pi_y, \pi_z)}{||(\pi_x, \pi_y, \pi_z) ||} π′=∣∣(πx,πy,πz)∣∣(πx,πy,πz)
e z ′ = ( 0 , 0 , 1 ) e_z'=(0, 0, 1) ez′=(0,0,1)
计算旋转矩阵 R R R的旋转轴(垂直于两个法向量)和旋转角度(两个法向量的夹角) θ \theta θ
A = ( a x , a y , a z ) = π ′ × e z ∣ ∣ π ′ × e z ∣ ∣ A = (a_x, a_y, a_z) = \frac{\pi' \times e_z}{|| \pi' \times e_z ||} A=(ax,ay,az)=∣∣π′×ez∣∣π′×ez
θ = a r c c o s ( π ⋅ e z ∣ ∣ π ∣ ∣ ⋅ ∣ ∣ e z ∣ ∣ ) \theta = arccos(\frac{\pi \cdot e_z}{||\pi|| \cdot ||e_z||}) θ=arccos(∣∣π∣∣⋅∣∣ez∣∣π⋅ez)
旋转矩阵
R = A ^ + c o s θ ⋅ ( I − A ^ ) + s i n θ ⋅ A ∗ R = \hat A + cos\theta \cdot (I- \hat A) + sin \theta \cdot A^* R=A^+cosθ⋅(I−A^)+sinθ⋅A∗
A ^ = [ a x a x a x a y a x a z a y a x a y a y a y a z a z a x a z a y a z a z ] A ∗ = [ 0 − a z a y a z 0 − a x − a y a x 0 ] \hat A= \begin{bmatrix} a_xa_x & a_xa_y & a_xa_z \\ a_ya_x & a_ya_y & a_ya_z \\ a_za_x & a_za_y & a_za_z \\ \end{bmatrix} \quad A^* = \begin{bmatrix} 0 & -a_z & a_y \\ a_z & 0 & -a_x \\ -a_y & a_x & 0 \\ \end{bmatrix} A^=⎣⎡axaxayaxazaxaxayayayazayaxazayazazaz⎦⎤A∗=⎣⎡0az−ay−az0axay−ax0⎦⎤
P为深度摄像头坐标系下的坐标,P’为人体空间坐标系下的坐标(以臀部中心为原点)
P ′ = P ⋅ R T − P h P' = P \cdot R^T - P_h P′=P⋅RT−Ph
因为人体个体的大小身高比例各不相同,所以需要用统一的方法进行度量,则使用立方体网格作为单位度
量来描述