代码
extract_image_chip(img, dlib::get_face_chip_details(shape, 150, 0.25),
face_chip);
dlib::get_face_chip_details(shape, 150, 0.25)
输入参数:shape为提取的人脸关键点,68个点
160为希望获取的对齐后的人脸大小
0.1 是希望对人脸关键点区域进行padding的比例

1.padding的含义
dlib内部使用了51个人脸关键点进行对齐,如下图所示:


假设padding大小为0.25,padding之后的人脸关键点如下图所示:


上述两幅图像为同样大小,均为150*150,可以看到使用0.25为系数进行padding之后得到的人脸区域明显内收,得到了包含更大面部区域的对齐图像。

2.get_face_chip_details(shape, 150, 0.25)
函数的计算过程分为两部分:

*
首先对上述第二幅图所示的关键点中选取编号为10-37,43-47的关键点,也就是鼻子、左眼、右眼及上嘴唇部分的基准关键点,同时获取当前图像检测出的对应位置的关键点;
* 计算上述两个点集之间的相似变换矩阵,获取当前人脸图像相对于基准人脸间的旋转角度、缩放系数及应该获取的人脸区域的rect坐标。

注:相似变换及进行二维图像间的旋转、平移及缩放,在改变的过程中保持形状不变(大小方向和位置可变)的图形,也就是正方形变换完还是正方形,不会像仿射变换一样还可以变换为平行四边形。
下图参考自: https://blog.csdn.net/u014096352/article/details/53526747
<https://blog.csdn.net/u014096352/article/details/53526747>

3.void extract_image_chip (const image_type1& img,const chip_details&
location,image_type2& chip,const interpolation_type& interp)
函数的作用是根据计算出的相似变换的矩阵location,从原始图像img中得到变换后的图像块chip,使用interp插值方法。

总结

dlib的人脸对齐是基于鼻子、双眼和上嘴唇的相似变换,在不改变面部重点五官形状的基础上将人脸对齐到基准人脸。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信