赞
踩
人脸姿态估计(一)之欧拉角理解
目录
pitch(俯仰角-围绕X轴旋转),yaw(偏航角-围绕Y轴旋转) 和 roll(滚转角-围绕Z轴旋转);对应人脸分别为抬头、摇头和转头。
欧拉角、旋转矩阵都是基于空间坐标系,默认3D坐标系
一般默认为右手准则;且默认矩阵右乘规则;
红色代表X轴-脸侧方向,绿色代表Y轴-脸下方向,蓝色代表Z轴-脸正前方向(以论文说明为主);
省略,网上一堆教程;
hopenet可直接预测人脸的欧拉角,不需要根绝关键点进行欧拉角的复杂计算,那么根据关键点计算欧拉角,就不过多涉及了。但请记住核心:根据欧拉角->旋转矩阵->XY平面投影【本质是 对3个方向点进行旋转,再投影,可以不用投影,那么姿态方向是3维的,但是3维在图像上可视化不出,所以才投影2D】
https://en.wikipedia.org/wiki/Euler_angles
https://en.wikipedia.org/wiki/Rotation_matrix#Ambiguities
基础旋转矩阵:
组合旋转矩阵:
不同顺序的组合旋转矩阵:
注意:
(1)按照轴旋转角度的先后顺序,进行R的相乘,得到组合旋转矩阵;eg:先ZXY,那么R=RzRxRy
(2)欧拉角转旋转矩阵,X轴单位向量是x=[1,0,0] (也是坐标点) 旋转后的x'=[x1,y1,z1],其依旧在原始3D坐标系下,同理:Y轴单位向量是y=[0,1,0] 旋转后y'=[x2,y2,z2],Z轴单位向量是[0,0,1] 旋转后z'=[x3,y3,z3];
则:Rx = x' ; Ry = y' ;Rz = z' ;
核心理解:人脸姿态估计可视化是3个箭头,也就是3个坐标点,每个坐标点都是在各自轴上(其它轴为0),需要计算的是这3个点旋转后的坐标点,所以需要计算3次。R*[x,0,0] R*[0,y,0] R*[0,0,z] xyz可以视为1!
[x,y,z]=x*[1,0,0] + y*[0,1,0] + z*[0,0,1];旋转前3D坐标为[x,y,z],旋转后3D坐标是R*[x,0,0]+R*[0,y,0]+R*[0,0,z]
(3)无论轴旋转顺序如何变化ZXY先后,旋转矩阵对应顺序依旧是[X,Y,Z];
,, 等价于:,即:
投影本质,[x',y',z']投影到x’y‘平面上,那么投影点坐标是:[x',y']。直接去掉取消的轴即可!
至此,hopenet人脸姿态估计根据欧拉角在2D图像上可视化代码:也就好理解了
将hopenet欧拉角可视化代码中的旋转矩阵提取出来,按照右乘进行提取[x1,y1,z1]对应[1,0,0]即X轴;以此类推。
那么R是按照XYZ轴顺序旋转的,根据对比得到1=pitch,2=yaw,3=roll,则与文章首呼应:
pitch(俯仰角-围绕X轴旋转),yaw(偏航角-围绕Y轴旋转) 和 roll(滚转角-围绕Z轴旋转);实际应用yaw朝下,因此取负,并投影到XY轴上。
可视化的本质是:五角星 = 3个圆圈的坐标,那么对五角星的旋转,可等价于对圆圈的旋转,根据旋转矩阵得到3个圆圈旋转后的坐标,再投影到XY平面上。由于人脸姿态是3个方向,对于原始的3D坐标系是如图3个箭头方向,那么经过旋转后的3个方向点是Rx Ry Rz ,再投影到XY平面,这样就得到了图像上的人脸姿态了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。