赞
踩
姿态通常是物体自身坐标系相对某个约定的参考坐标系的一个状态,日常生活中描述姿态一般都是相对地面坐标系而言的,因为这更符合人的直观感受。在生活中较为常见的是飞机在空中时的姿态描述,这能辅助描述飞机的状态定位和状态调整。
姿态简单来说就是物体坐标系到大地坐标系之间的状态。而姿态估计则是采用某种方法估计出某一三维目标物体的方位指向问题。姿态估计在机器人视觉、动作跟踪和单照相机定标等很多领域都有应用。常见的姿态估计问题有人体姿态估计、人脸姿态估计等。
欧拉角是一种最直观的姿态描述方式,它的核心思想是一个坐标系到另一个坐标系的变换可以通过绕不同坐标轴的三次连续转动来实现。这三次的转动角度统一称为欧拉角。
而欧拉角只是说明了两种坐标系之间的变换关系,实际上我们在姿态估计中使用的姿态角是欧拉角中的一种,是人为约定的一种。通常被用在航空领域,被称为航空次序欧拉角,也叫卡尔丹角。其定义欧拉角的特定转动顺序为Z-Y-X。其中绕Z轴转动的角度为偏航角(Yaw),绕Y轴转动的角度为俯仰角(Pitch),绕X轴转动的角度为横滚角(Roll)。
偏航角(Yaw),调整飞机头部左右朝向。机体坐标系X轴(Roll轴)投影到水平面与地面参考系X轴的夹角,顺时针旋转为正。
俯仰角(Pitch),调整飞机头部上下朝向。机体坐标系Z轴(Yaw轴)与水平面的夹角,抬头为正。
另外,Pitch有颠簸的意思,也能反映出飞机在气流作用下上下颠簸的状态。
横滚角(Roll),机体坐标系Z轴(Yaw轴)与通过机体坐标系X轴(Roll轴)的铅垂面间的夹角,机体右旋为正。
deep-head-pose: Deep Learning Head Pose Estimation using PyTorch
(注:图片来源https://github.com/natanielruiz/deep-head-pose)
FacePoseNet: Making a Case for Landmark-Free Face Alignment
(注:图片来源https://github.com/fengju514/Face-Pose-Net)
The pytorch implement of the head pose estimation(yaw,roll,pitch) and emotion detection in real time.
(注:图片来源https://github.com/WIKI2020/FacePose_pytorch)
import numpy as np
import math
import cv2
def rotationMatrixToEulerAngles(R) :
sy = math.sqrt(R[0,0] * R[0,0] + R[1,0] * R[1,0])
singular = sy < 1e-6
if not singular :
x = math.atan2(R[2,1] , R[2,2])
y = math.atan2(-R[2,0], sy)
z = math.atan2(R[1,0], R[0,0])
else :
x = math.atan2(-R[1,2], R[1,1])
y = math.atan2(-R[2,0], sy)
z = 0
return np.array([x, y, z])
def estimate_pitch_yaw_roll(aligned_landmarks, size):
"""
aligned_landmarks: landmark3D 68
size: image size
returns pitch,yaw,roll [-pi/2...+pi/2]
"""
shape = (size,size)
focal_length = shape[1]
camera_center = (shape[1] / 2, shape[0] / 2)
camera_matrix = np.array(
[[focal_length, 0, camera_center[0]],
[0, focal_length, camera_center[1]],
[0, 0, 1]], dtype=np.float32)
(_, rotation_vector, _) = cv2.solvePnP(
np.concatenate( (landmarks_68_3D[:27], landmarks_68_3D[30:36]) , axis=0) ,
np.concatenate( (aligned_landmarks[:27], aligned_landmarks[30:36]) , axis=0).astype(np.float32),
camera_matrix,
np.zeros((4, 1)) )
pitch, yaw, roll = rotationMatrixToEulerAngles( cv2.Rodrigues(rotation_vector)[0] )
half_pi = math.pi / 2.0
pitch = np.clip ( pitch, -half_pi, half_pi )
yaw = np.clip ( yaw , -half_pi, half_pi )
roll = np.clip ( roll, -half_pi, half_pi )
return -pitch, yaw, roll
本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。如需帮助请email至tracelessle@163.com。
[1] Pitch, yaw, and roll - Simple English Wikipedia, the free encyclopedia
[2] Aircraft principal axes - Wikipedia
[3] Yaw (rotation) - Wikipedia
[4] pitch yaw roll是什么 - 简书
[5] 航空次序欧拉角_百度百科
[6] GitHub - natanielruiz/deep-head-pose: Deep Learning Head Pose Estimation using PyTorch.
[7] fengju514/Face-Pose-Net: Estimate 3D face pose (6DoF) or 11 parameters of 3x4 projection matrix by a Convolutional Neural Network
[8] WIKI2020/FacePose_pytorch: This is a pure python project predict head pose (yaw,roll,pitch).Easy to deploy, easy to use, and high accuracy
[9] ostadabbas/3d-facial-landmark-detection-and-tracking: Human 3D Facial Pose Estimation and Tracking (AffCom IJCAI2018)
[10] 人体姿态估计的过去,现在,未来 - 知乎
[11] 姿态篇:一.初识姿态估计 - 简书
[12] 估计姿态_hk121的博客-CSDN博客_姿态估计
[13] 学习《姿态引导的真实人脸旋转》论文 - 知乎
[14] dlib人脸姿态欧拉角_Cody的博客-CSDN博客_人脸欧拉角
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。