我正在尝试根据 2D 图像找到人脸的三个角度 .
我将 OpenCV 与 HaarCascade 结合使用来查找面部、眼睛、 Nose 和嘴巴。 但是我没有找到任何几何方法可以帮助我找到角度 X、Y 和 Z(Roll、Pitch 和 Yaw)。
谁能帮我展示一些可用的 C++ 或 Java 方法?
最佳答案
给定一张图片,没有其他信息,角度没有单一的解决方案。考虑一下 Yaw 的情况。投影到 2d 平面上时,可以看到眼睛之间的投影距离和眼睛相对于 Nose /嘴巴的位置发生了微小变化。然而,这个距离在人与人之间并不是恒定不变的。
解决此问题的一种典型方法是要求用户通过直视相机的标称“0”角度来“校准”他们的脸。此时,您现在有了引用长度,您可以将后续图像与之进行比较。
然而,长度仍然不是足够的信息,因为表观投影距离的变化量取决于光学器件和面部与相机的距离。您通常手动配置的光学器件;您可以通过假设“平均”面部尺寸并假设“标称”图像与这些尺寸完美匹配来估计的距离。如果您发现它高估或低估了特定面孔的旋转,您可以调整它。
一旦您具备所有这些假设,它就是相当简单的几何图形。您可以估计从眼睛通过 Nose 到嘴巴的直线的滚动。您可以测量眼睛之间的间距来估计偏航。最后,您可以使用眼睛/嘴巴或眼睛/ Nose 之间的间距来估计音高。请记住,当面部仍相当接近标称值时,这些假设最有效。
关于c++ - 使用 OpenCV、C++ 和 Image 2D 进行头部姿势估计 - 几何方法 - 滚动、偏航和俯仰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401505/