首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将面部姿势的点云组合成三维网格

将面部姿势的点云组合成三维网格
EN

Stack Overflow用户
提问于 2021-03-30 12:37:25
回答 1查看 460关注 0票数 1

使用带有iPhone传感器的TrueDepth相机,我能够在我的面部图像中获取精确的深度数据。我是从前面,左和右(大约30度旋转)的深度和头部倾斜一点,以捕捉下下巴(总共4深度图像)。我们只是在这里捕捉深度,所以没有颜色信息。我们使用椭圆框来裁剪不重要的数据。

我们还使用ARKit给出了脸锚的变换,这与脸的转换相同,即ref:https://developer.apple.com/documentation/arkit/arfaceanchor。不可能同时捕获深度图像和面部变换,因为它们来自不同的捕获会话。因此,我们必须采取深度图像,然后迅速切换会话,而用户保持他们的脸保持不变,以获得脸锚转换。世界对齐设置为.camera,因此脸部锚变换应该相对于摄像机,而不是世界起源。

最后出现了四点云,如下所示:左-右:下巴向上,左30,前30,右30。

我们还得到了4个转换。我们正试图用open3d在python中将它们点回云层,使脸部光滑的网格化。

迄今的进程如下:

  1. 读取点云和变换
  2. 将逆变换应用于点云以返回到原始位置w.r.t照相机

我原以为这些点云大致处于相同的位置,但现在却发生了这样的情况:

如您所见,这些面孔仍然相互抵消:

我是不是用错了转换?

python代码和示例点云和转换在这里:https://github.com/JoshPJackson/FaceMesh,但重要的部分如下:

代码语言:javascript
复制
dir = './temp4/'

frontPcd = readPointCloud('Front.csv', dir)
leftPcd = readPointCloud('Left.csv', dir)
rightPcd = readPointCloud('Right.csv', dir)
chinPcd = readPointCloud('Chin.csv', dir)

frontTransform = readTransform('front_transform.csv', dir)
leftTransform = readTransform('left_transform.csv', dir)
rightTransform = readTransform('right_transform.csv', dir)
chinTransform = readTransform('chin_transform.csv', dir)

rightPcd.transform(np.linalg.inv(rightTransform))
leftPcd.transform(np.linalg.inv(leftTransform))
frontPcd.transform(np.linalg.inv(frontTransform))
chinPcd.transform(np.linalg.inv(chinTransform))

我期望将所有的点云合并在一起,这样我就可以删除重复的顶点,然后做一个网格。

EN

回答 1

Stack Overflow用户

发布于 2021-03-30 12:54:25

一种很好的方法是找到你脸上的数学参考。(仅与表面一起工作)

为此采取了许多步骤:

  • 取一张脸,创建一个二维函数,用函数f(x,y)映射脸。噪音必须指向z方向。
  • 使用lmfit.minimize适合将您的新函数与其他faces相匹配
  • 使用来自fit的返回参数知道偏移量!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66871109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档