使用OpenCV,C++和图像2D进行头部姿态估计 - 几何方法 - 滚动,偏航和俯仰

Joh*_*ith 8 c++ opencv euler-angles geometric-arc

我试图根据2D图像找到人脸的三个角度 2D图像.

我正在使用OpenCV和HaarCascade来寻找面部,眼睛,鼻子和嘴巴.但我没有找到任何几何方法可以帮助我找到角度X,Y和Z(滚动,俯仰和偏航).

有人可以帮助我在c ++或java中显示一些有效的方法吗?

Dan*_*ant 5

给定单个图像而没有其他信息,角度没有单一的解决方案.考虑一下Yaw的情况.投射到2d平面上,这可以看作是眼睛之间的投射距离和眼睛相对于鼻子/嘴巴的位置的微小变化.然而,这个距离在人与人之间不是一个常数.

一种典型的方法是要求用户通过直接观察相机的标称"0"角度来"校准"他们的脸部.此时,您现在可以使用参考长度来比较后续图像.

然而,长度仍然不是足够的信息,因为表观投影距离的变化量取决于光学器件和面部与相机的距离.您通常手动配置的光学器件; 您可以通过假设"平均"面部尺寸并假设"标称"图像与这些尺寸完美匹配来估计距离.如果您发现特定面的旋转估计过高或过低,则可以对此进行调整.

一旦你有了所有这些假设,它就是相当简单的几何.您可以估算从眼睛到鼻子到嘴巴的线条.您可以测量眼睛之间的间距来估计偏航.最后,您可以使用眼睛/嘴巴或眼睛/鼻子之间的间距来估计音高.请记住,当面部仍然非常接近名义时,这些假设最有效.