图像上的人脸对齐算法

Ror*_*ter 6 opencv objective-c biometrics computer-vision face-detection

如何在假设我有嘴和眼睛的位置/坐标的情况下,如何在二维图像上进行基本面部对齐.

有没有我可以实现的算法来纠正图像上的面部对齐?

gev*_*ang 6

面部(或图像)对齐是指将一个图像(或您的情况下的面部)与另一个图像(或参考图像/面部)对齐.它也被称为图像配准.您可以使用外观(基于强度的注册)或关键点位置(基于特征的注册)来实现.第二类源于图像运动模型,其中一个图像被认为是另一个图像的移位版本.

在您的情况下,地标位置(眼睛和鼻子的3个点?)为简单的基于特征的注册提供了良好的参考集.假设您在两个2D图像中都有一组点的位置,x_1并且x_2您可以估计相似变换(旋转,平移,缩放),即S映射x_1到的平面2D变换x_2.你可以另外添加反射,但对于面孔,这很可能是不必要的.

可以通过形成正规方程并x_1 = Sx_2使用线性回归求解系统的线性最小二乘(LS)问题来进行估计.对于5个未知参数(2个旋转,2个平移,1个缩放),您将需要3个点(精确到2.5)来求解5个方程.可以通过直接线性变换(例如,通过应用SVD或矩阵伪逆)来获得对上述LS的解.对于足够大量的参考点(即自动检测)的情况,使用RANSAC类型的点过滤和不确定性去除方法(尽管这不是你的情况).

在估计之后S,在第二图像上应用图像变形以获得整个变换后的网格(像素)坐标image 2.变换将改变像素位置,但不会改变它们的外观.不可避免地,一些变换后的区域image 2将位于网格之外image 1,您可以决定那些空位置的值(例如0,NaN等).

有关详细信息:R.Szeliski," 图像对齐和拼接:教程 "(第4.3节"几何注册")

在OpenCV中,请参阅:几何图像变换,例如cv::getRotationMatrix2D cv::getAffineTransformcv::warpAffine.注意,尽管您应该估计并应用相似变换(仿射的特殊情况)以保留角度和形状.