使用带有iPhone传感器的TrueDepth相机,我能够在我的面部图像中获取精确的深度数据。我是从前面,左和右(大约30度旋转)的深度和头部倾斜一点,以捕捉下下巴(总共4深度图像)。我们只是在这里捕捉深度,所以没有颜色信息。我们使用椭圆框来裁剪不重要的数据。
我们还使用ARKit给出了脸锚的变换,这与脸的转换相同,即ref:https://developer.apple.com/documentation/arkit/arfaceanchor。不可能同时捕获深度图像和面部变换,因为它们来自不同的捕获会话。因此,我们必须采取深度图像,然后迅速切换会话,而用户保持他们的脸保持不变,以获得脸锚转换。世界对齐设置为.camera,因此脸部锚变换应该相对于摄像机,而不是世界起源。
最后出现了四点云,如下所示:左-右:下巴向上,左30,前30,右30。

我们还得到了4个转换。我们正试图用open3d在python中将它们点回云层,使脸部光滑的网格化。
迄今的进程如下:
我原以为这些点云大致处于相同的位置,但现在却发生了这样的情况:


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

我是不是用错了转换?
python代码和示例点云和转换在这里:https://github.com/JoshPJackson/FaceMesh,但重要的部分如下:
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))我期望将所有的点云合并在一起,这样我就可以删除重复的顶点,然后做一个网格。
发布于 2021-03-30 12:54:25
一种很好的方法是找到你脸上的数学参考。(仅与表面一起工作)
为此采取了许多步骤:
https://stackoverflow.com/questions/66871109
复制相似问题