Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

点云转表面网格 #4

Closed
Alexbeast-CN opened this issue Feb 27, 2024 · 9 comments
Closed

点云转表面网格 #4

Alexbeast-CN opened this issue Feb 27, 2024 · 9 comments
Assignees
Labels
plan Features that planned to be developed

Comments

@Alexbeast-CN
Copy link
Owner

实现从PCL 点云数据结构转换为三维表面网格

@Alexbeast-CN Alexbeast-CN self-assigned this Mar 1, 2024
@Alexbeast-CN Alexbeast-CN added the plan Features that planned to be developed label Mar 1, 2024
@Alexbeast-CN
Copy link
Owner Author

[测试]

尝试了使用 open3d 中的 PoissonRecon 算法将点云转为 .obj 格式的网格,代码如下

import open3d as o3d

# Load the .pcd file
pcd = o3d.io.read_point_cloud("chuancang_model.pcd")

# Create a mesh from the point cloud
mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=9)

# Save the mesh as a .obj file
o3d.io.write_triangle_mesh("chuancang_model.obj", mesh)

点云可视化如下:

image

导出的 .obj 文件可视化如下:

image

[分析]

由于建图时扫描出来的点云是非常稀疏的,所以很多地方会把误认为是洞。

@Alexbeast-CN
Copy link
Owner Author

[Research]

点云转网格是一个比较热门的研究,随便搜了一下,就找到了 Point2Mesh: A Self-Prior for Deformable Meshes

lizard2

然后通过 Connected Paper 找到了该领域的论文 关系图

image

@Alexbeast-CN
Copy link
Owner Author

[测试]

Point2Mesh: A Self-Prior for Deformable Meshes 将点云转网格。

  • 坑1:环境问题

Point2Mesh 有些年头了,所以之前作者给出的环境现在不能用了。以下是我配置环境的过程,我的 GPU 是 RTX 3070 Ti Laptop, cuda 是 12.3

  1. 创建一个 python 3.9 的环境
conda create -n pytorch3d python=3.9
  1. 安装最新的 pytorch
pip3 install torch torchvision torchaudio
  1. 编译 pytorch3d
git clone https://github.com/facebookresearch/pytorch3d.git
cd pytorch3d && pip install -e .
  • 坑2: 版本的适配性

需要修改代码以适应最新版的 pytorch 以及 pytorch3d。

这里我是参考了这个 github issue

  • 坑3: Out of Memory

我的 GPU 只有 8g 显存,跑了作者给的例子 bash ./scripts/examples/giraffe.sh,大概在第 1000 次迭代的时候,我显存就满了。

@Alexbeast-CN
Copy link
Owner Author

Alexbeast-CN commented Mar 5, 2024

上面的方法从原理上就不适合我们的场景,因为它默认了物体是从外表面扫描的,但我们的场景是扫描的内部表面。

@Alexbeast-CN
Copy link
Owner Author

Alexbeast-CN commented Mar 5, 2024

经过一段时间的论文阅读以及代码测试后发现,点云转网格是一件非常困难的事情,现有的方法对于我们的场景式点云不合适。且从 2020 年之后,大多数研究员选择使用深度学习来实现点云到三角网格的转换。这对于目前我们的计算资源来说并不友好。

但,其实有很多研究直接在 SLAM 阶段就可以构建三角网格,且效果比建完点云地图后再转格式要好,比如:Voxblox, ImMesh

与 SLAM 组沟通后,决定将这一步骤交给 SLAM 来做。规划则默认可以直接得到三角网格。

@Alexbeast-CN
Copy link
Owner Author

Alexbeast-CN commented Mar 7, 2024

[测试]

使用 ImMesh 导出的张家港船舱点云转网格效果。

image

image

[分析]

总体看起来看还不错,但丢失了一些细节,比如吊耳。也有一些噪音。边不是非常明显。

@Alexbeast-CN
Copy link
Owner Author

尝试了使用 quadwild 将上面的三角网格转四边形网格,非常的慢,目前来说 3 个小时还没转完。

主要原因是 quadwild 只用了一个线程,所以以后如果真的要使用,最好还是把它换成多线程的。

image

@Alexbeast-CN
Copy link
Owner Author

image

直出的效果不佳,最好还是对模型进行预处理。

@Alexbeast-CN
Copy link
Owner Author

Screenshot from 2024-04-01 10-29-24

生成出的三角网格与四边形网格的对比。四边形网格要更加均匀。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
plan Features that planned to be developed
Projects
None yet
Development

No branches or pull requests

1 participant