PCL库中Marching Cubes(移动立方体)算法的解析

PCL库中Marching Cubes(移动立方体)算法解析

1. Marching Cubes算法的原理这里不再赘述,不懂的话,提供一下文献资源:

链接:MARCHING CUBES A HIGH RESOLUTION 3D SURFACE CONSTRUCTION ALGORITHM.pdf
提取码:n0wb
或者看这里的讲解:MarchingCubes算法提取等值面的基本原理

2. 提供一下PCL里面的源码,有需要的可以下载:

链接:marchingCubes.zip
提取码:oyw1
打开之后,有四个文件:
在这里插入图片描述
marching_cubes文件中实现了marching_cubes类,实现了大部分的Marching Cubes算法,但它是一个抽象类,不可实例化。
marching_cubes_hoppe文件实现了marching_cubes_hoppe类,继承自marching_cubes,实现了marching_cubes中的纯虚函数vexelizeData(),可以实例化。

3. 此篇博文是参考下面博文得出的,希望能讲的更透彻一些

PCL源码剖析之MarchingCubes算法

—————————————————————————————————————————————————————————————
—————————————————————————————————————————————————————————————

下面我们开始正式分析PCL中Marching Cubes的实现方案。
步骤:点云数据体素化->确定顶点与等值面的关系->确定等值面与voxel各个边的交点->根据交点划分三角面。
4. 打开marching_cubes.h,找到顶点编号图

在这里插入图片描述
这个主要是帮助我们理解算法,8个顶点,12条边,都有各自的编号。更具体的如下图:
在这里插入图片描述

5. 打开marching_cubes.hpp,找到performReconstruction()函数。

这里是主函数体,通过调用具体的实现函数,完成了从点云数据到三角面的转换操作。

// 输入参数:无 
// 输出参数:1. points:重建得到的三角面,以点序列的形式存储,每三个点代表一个三角面
//			 2. polygons:三角面之间的连接关系,对理解算法基本无帮助
template <typename PointNT> void
pcl::MarchingCubes<PointNT>::performReconstruction (pcl::PointCloud<PointNT> &points,
                                                    std::vector<pcl::Vertices> &polygons)
{
	// iso_level_:等值面的数值,用于判定网格点的两种状态(即在等值面的内外)。
	//这里为什么限
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值