如何在网格实验室中加载标记的点云?
How to load labeled point cloud in Meshlab?
我目前正在使用点云库(PCL)来做一些点云的工作。现在我需要为一些点云计算网格,并认为最好的办法是使用Meshlab。到目前为止一切顺利,我的问题是我的点云有标签,即它是以下形式:
pcl::PointCloud<pcl::PointXYZRGBL> cloud;
重要提示:我不能省略标签,我必须在计算网格后知道网格的哪个点具有哪个标签。后来,经过一些操纵等。我通过以下方式保存此云
pcl::io::savePLYFileBinary(writePath, *cloud);
如果云的类型很好
pcl::PointCloud<pcl::PointXYZRGB> cloud;
但不适用于第一种情况。有没有人知道我能做些什么才能仍然获得包含标签并可以加载到 Meshlab 中的 PLY 文件?
谢谢大家!
由于 MeshLab 无法打开您标记的点云,我建议:
-
将您的点云导出为 MeshLab 可读的格式(例如,您提到的
pcl::PointCloud<pcl::PointXYZRGB>
)。 -
使用插值方法(如球旋转)重建三角形网格。插值方法是必要的,以便将原始点保留为网格的顶点。完成后,保存网格。
-
加载与原始点云匹配的网格,以便恢复标签和任何其他关联属性。在快速测试中,我甚至使顶点顺序与点的顺序相匹配。
更新
您在评论中提到您正在使用筛选泊松重建。此方法使用输入点作为位置约束来提高方法的精度,但它仍然是一种近似方法,因此不能保证输出顶点与输入点匹配(并且可能不会这样做)。
您可以切换到插值方法(如果噪声和异常值允许),也可以找到每个顶点的最近点(使用1-NN,就像您现在所做的那样)来标记顶点。
以上对所有离散值都有效。您还应该调整其他值(例如颜色)以更好地匹配重建(折点不匹配点)。为此,您可以从 k-NN 中插值相应的值。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- ASIMP 模型加载不会加载所有网格
- 将 libigl 网格结果加载到 PCL 多边形网格中
- 如何在网格实验室中加载标记的点云?
- DirectX11 网格加载 - 由于纹理而出错(使用 SDKmesh.h)?访问违规读取位置0x00000000
- 将简单网格加载到 OpenGL 中时遇到问题
- 使用 qt3d 渲染已加载的网格
- 不要加载网格和动画的名称