【问题标题】:aligning 2 face images based on their marker points根据标记点对齐 2 张人脸图像
【发布时间】:2014-02-18 00:23:48
【问题描述】:

我正在使用 open cv 和 C++。我有 2 张面部图像,其中包含标记点。我已经找到了标记点的坐标。现在我需要根据这些坐标对齐这两张人脸图像。这两个图像可能不一定具有相同的高度,这就是为什么我不知道如何开始对齐它们,应该做什么等等。

【问题讨论】:

  • 你看过极线几何的文献吗?
  • 如果您有 3 个相应的标记,请查看:cv::getAffineTransform docs.opencv.org/modules/imgproc/doc/… 并使用 warpAffine aferwards。有 4 个对应的标记,您可以使用 getPerspectiveTransform
  • 对极几何似乎很有趣..我现在正在研究它!@Micka 不是只有一张图像的 getAffineTransform?我如何使用它来参考另一张图像转换一张图像?
  • 您必须将面分割成对应的三点三角形,然后使用透视变换将它们扭曲到另一个面。
  • @Steph getPerspectiveTransform 计算将图像平面从一个相机位置映射到另一个相机位置的图像平面的单应性。物体平面可以完美地映射,其他几何体只能近似。对于您的图像,我猜标记之间的区域将被很好地映射(不完美,因为面部不是平面),但该区域之外的东西会被扭曲。

标签: c++ opencv alignment computer-vision


【解决方案1】:

在您的情况下,您不能应用基于单应性的对齐过程。为什么不?因为它不适合这个用例。它旨在对齐平面。在不同位置和深度带有标记的面(3D 对象)显然不是平面。

相反,您可以:

  1. 尝试匹配图像之间的标记,然后插入其他像素的位移场。经典的做法包括moving least squares 插值或RBF's;
  2. 否则,更“人脸处理”的做法是使用纹理和人脸模型之间的人脸图像分解(如AAM 所做的那样),并在此设置中使用人脸分解。

【讨论】:

  • 我已经能够匹配左前脸图像之间的标记点并获得一个变换矩阵。然后我使用 warpAffine 用该变换矩阵变换了左图像。现在我必须将左变换的面部图像叠加在正面图像上,使其看起来像这样。(左变换图像:i.imgur.com/1k2yZTI.jpg,前图像:i.imgur.com/xkUD6WC.jpg,需要的结果:i.imgur.com/PSY0zh8.jpg)你能建议一些方法吗请问一下?
  • 鉴于图像中的失真量,您别无选择,只能选择 2:将人脸图像重新映射为 3D 人脸模型上的纹理,旋转该 3D 模型并生成您想要的纹理图像需要。
【解决方案2】:

定义“对齐”。

或者更确切地说,请注意不存在与正面图像的重叠部分相匹配的面部图像的唯一扭曲 - 这意味着存在无限这样的扭曲。

因此,除了图像和图像上的一些匹配点之外,您需要更好地指定您的目标是什么,以及您拥有哪些额外信息。例如,您的相机设置是否经过校准?即你知道相机的焦距和它们的相对位置和姿势吗?

您是否正在尝试构建纹理贴图(例如投影贴图),以便在已有的 3D 模型上粘贴“合并”的面部图像?然后,您可能需要查看圆柱或球面贴图,并根据校准后的姿势构建图像的圆柱或球面投影。

或者您是否尝试根据这 2 个视图重建头部的整个 3D 形状?显然,您只能在两个图像重叠的小条上执行此操作,而且您发布的图像的质量似乎有点太差了。

还是……?

【讨论】:

  • 你好!我想用这 2 个图像进行图像配准。实际上还有第三幅图像,即右侧轮廓图像,其标记点与左侧轮廓图像相同。我的最终目标是用这 3 张图像构建一张全景脸。在找到面部图像上所有标记点的坐标后,我需要对齐面部。最后将它们混合在一起。但我不知道哪种图像对齐技术最适合我的图像,因为它们有标记点。希望我足够清楚,但如果您需要更多信息,请告知
  • “全景”没有多大意义——有很多不同种类的全景 :-) 我建议你用谷歌搜索“面部纹理圆柱映射”或类似的东西。以下是您可能想要的结果示例:joreg.ath.cx/imago/makingof_texturing.html
  • 这里是我要实现的全景脸imgur.com/1UFWlyW 可以在人脸的标记点上使用“人脸纹理圆柱映射”来实现刚刚发布的图片吗?
  • 我试了一下,但不幸的是它不能正常工作。我在docs.opencv.org/doc/tutorials/features2d/feature_homography/… 中使用了标准的findHomography,然后使用了warpperspective。这是代码pastebin.com/dHjD4zzT。有人可以帮忙吗?
  • 您发布的示例(“我想要实现的全景脸”)看起来确实像圆柱投影。您无法使用线性(单应性)扭曲来获得它。
猜你喜欢
  • 2012-08-16
  • 2016-10-27
  • 2019-06-11
  • 2019-02-10
  • 2019-10-13
  • 2017-10-12
  • 2022-07-02
  • 2015-10-13
  • 2020-03-06
相关资源
最近更新 更多