基于三维骨骼的动作识别
基于三维骨骼的动作识别
1. 简介
2. 识别步骤
2.1 建立人体空间坐标系(归一化)
-
由于人体正方向不一定与深度摄像头(如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- P h P_h Ph:为深度摄像头坐标系下的臀部中心坐标
-
因为人体个体的大小身高比例各不相同,所以需要用统一的方法进行度量,则使用立方体网格作为单位度
量来描述- 上图为11×11×11 的三维空间模型示意图,以臀部中心为原点,x 轴正负方向比例为5.5∶5.5(即1∶1),y 轴正负方向比例为5∶6,z 轴正负方向为5.5∶5.5(即1∶1)
- 二维平面示意图如下图所示。根据个体相对身高比例定义网格边长d = h/10 。其中,h 为个体在坐
标系中的相对高度
2.2 关节坐标滤波
- 采用加权递推平均滤波算法对人体关节点的坐标进行滤波,去除坐标的抖动
2.2 特征提取
- 对关节点进行特征提取
- 生成空域:关节点的坐标向量所形成的角度特征
- 生成时域:每个关节的运动轨迹