将面从非正面旋转到正面opencv
Posted
技术标签:
【中文标题】将面从非正面旋转到正面opencv【英文标题】:rotate face from non-front to front opencv 【发布时间】:2016-08-25 07:11:06 【问题描述】:一个星期以来,我一直在努力解决一个问题,即我无法将一张脸从image 中的左脸等非正面旋转到同一张图片中的右脸等正面。
1)。我在learnopencv网站上使用了一个关于delaunay的教程来获取左脸的所有三角形(大约138个三角形),如下所示:
...
triangle num 4: [100, 383] | [120, 374] | [112, 385]
triangle num 5: [120, 374] | [100, 383] | [92, 345]
triangle num 6: [136, 396] | [137, 379] | [151, 394]
triangle num 7: [137, 379] | [136, 396] | [118, 395]
triangle num 8: [92, 345] | [86, 414] | [80, 451]
triangle num 9: [86, 414] | [92, 345] | [100, 383]
triangle num 10: [86, 414] | [100, 383] | [118, 395]
triangle num 11: [116, 336] | [120, 374] | [92, 345]
triangle num 12: [120, 374] | [116, 336] | [133, 344]
...
2)。和这个库:https://github.com/chili-epfl/attention-tracker(可以估计头部姿势)得到左脸头部姿势的4x4矩阵变换,这个矩阵似乎是opencv中Rodrigues
函数的结果。
0.659585 -0.749291 -0.0592507 0.0591621
-0.0327269 -0.107385 0.993679 -0.00523744
-0.750917 -0.653477 -0.0953513 -0.280204
0 0 0 1
所以我不知道下一步如何使用步骤 2 中的 4x4 矩阵旋转步骤 1 中的所有三角形以获得右脸的结果。 请帮忙!
【问题讨论】:
也许一些代码和图像会有助于获得答案...... 代码真的很长,所以我想我的代码的结果会更清楚。更具体地说,我的三角形列表声明如下: cv::vector<:vector> > list_tri_points 所以每个项目都是二维点的列表,如步骤 1 中的结果和步骤 2 中的矩阵 4x4我存储在 cv::Mat 类型的变量中我想要实现的是通过使用矩阵 4x4 以某种方式将 list_tri_points 中的所有三角形转换为新的三角形列表。这个新的三角形列表将呈现在正面 【参考方案1】:如何将人脸从非正面投影到正面是一个复杂的问题,即使您已经投影了人脸的地标位置。 我建议使用我之前使用的两个开源库。
第一个由 MIT 提供。此代码不仅是面部前置器,而且可以用于任何对象。 https://bitbucket.org/gbhuang/congealreal
第二个库链接在下面,仅用于面部投影。
https://github.com/eranid/adience_align
我认为第二个库是最有用的。
【讨论】:
感谢 Zangeneh 回答我的问题。我的目的是通过比较输入图像(非正面图像)的所有可能的标志点对之间的比率与存储图像(正面图像)的比率来进行人脸识别。但是对于非正面,比率不可能正确,所以我必须将其转换为正面,然后计算比率。但是,如果如您所说,这是一个复杂的问题,是否有任何其他解决方案可以正确比较 2 个面的比率,这可以算作姿势差异但没有面部投影? 如果你想实现人脸识别系统,可以识别不同姿势的人脸,你有两种方法。第一种方法是使用正面化模块,第二种方法是使用面部姿势估计来告诉我们面部是否是非正面的,丢弃它 嗨,Zangeneh,您能否更具体地解释一下在人脸识别中使用姿势估计?我还是不明白。谢谢!以上是关于将面从非正面旋转到正面opencv的主要内容,如果未能解决你的问题,请参考以下文章