当前位置:   article > 正文

人脸对齐中的尺寸拉伸程度求解_编程 人脸lab色彩空间来拉伸

编程 人脸lab色彩空间来拉伸

前言

人脸对齐是人脸相关应用中非常重要的技术,通常采用人脸关键点来进行对齐。而在关键点对齐中最常用的便是相似变换(SimilarityTransform)。

在这里插入图片描述

相似变换可以看成是仿射变换中的简单的一种,不存在倾斜变化和翻转变化。关于仿射变换的介绍可以查阅参考资料[4]。相似变换相当于等距变换和均匀缩放的一个复合,而等距变换是平移变换和旋转变换的复合。所以相似变换包含了平移变换、旋转变换和均匀缩放三类变化。

尺寸拉伸程度求解

常用的求解相似变换的变换矩阵的函数有
scikit-image (skimage) 的transform.SimilarityTransform.estimate()方法。
在这里插入图片描述
其中transform.SimilarityTransform.estimate()方法采用基于最小均方估计的umeyama算法实现。

在这里插入图片描述
对于2D的相似变换:
在这里插入图片描述
意思就是在变换前的坐标(x, y)与变换后的坐标(X, Y)之间建立变换关系,通过多组坐标对建立方程组,使用最小均方估计求解出未知数,主要是三个未知数:旋转角,平移量,缩放系数。

常用的人脸对齐模板如下所示,使用trans.SimilarityTransform().estimate(landmark5, tem[i])估算,可以得到最匹配的状态(均方误差最小),进而得到变换矩阵M。
在这里插入图片描述
而此时的M的形式如下:

[[a0  b0  a1]
 [b0  a0  b1]
 [0   0    1]]
  • 1
  • 2
  • 3

在调用.estimate方法时,默认传入了estimate_scale=True参数,得到的变换矩阵已经隐含scale信息。如果需要得到缩放系数,可以通过调用.scale属性获得。

注:scale方法被@property 装饰器变成属性以供调用。

在这里插入图片描述
如果在应用时拿到的变换矩阵只有M的前两行:

mat = 
[[a0  b0  a1]
 [b0  a0  b1]]
  • 1
  • 2
  • 3

那么可以通过进行一定转换后求解得到scale:

params = np.concatenate([mat , np.array([[0.,0.,1.]])], axis=0)
scale = np.sqrt(np.linalg.det(params))
  • 1
  • 2

版权说明

本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。如需帮助请email至tracelessle@163.com
在这里插入图片描述

参考资料

[1] Module: transform - skimage.transform.SimilarityTransform — skimage v0.20.0.dev0 docs
[2] scikit-image/_geometric.py at main · scikit-image/scikit-image
[3] face_alignment库获取人脸图片landmark示例_TracelessLe的专栏-CSDN博客
[4] 仿射变换(AffineTransform)与仿射矩阵_TracelessLe的专栏-CSDN博客
[5] SKimage-transform.SimilarityTransform 相似变换 及其 人脸对齐的应用 - 努力的孔子 - 博客园
[6] skimage库的transform.SimilarityTransform()用法_小C的博客-CSDN博客
[7] python - Difference between SimilarityTransform (scikit-image) and warpAffine (openCV)? - Stack Overflow
[8] Similarity Transformation – from Wolfram MathWorld
[9] Similarity (geometry) - Wikipedia
[10] 基础知识:仿射变换、相似变换、等距变换等常见变换 - Lilu1223 - 博客园

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/701616
推荐阅读
相关标签
  

闽ICP备14008679号