详解kinectfusion之五marching cubes生成网格

 大家还记得我们上文中讲过的那个由大量体素组成的立方体TSDF场吧。不记得的话,可以翻到上文重写阅读一遍详解kinectfusion之四基于TSDF场的点云融合-CSDN博客

这个TSDF场中每个体素都包含三个属性值,TSDF值,权重和颜色信息。其中,tsdf值代表当前体素离物体真正的表面的距离。

本文的目的就是要找到tsdf值为0的那些点坐标,并且把这些点坐标连起来构成一个网格。备注,这里的网格是每三个点确定的三角形依次相连,最终构成的形状即网格。大致的样子如下图所示。

实现方法最经典的就是marching cubes了。

为了更容易理解marching cubes,我们先从2d处理讲起,也就是 marching squares

现在有一个不规则的片状物体,如下图所示。

Original object

1)为了能数字化表示这个不规则的2d片状物体,我们先用2d方块分割处理一下。

squared object

2)直观上,很容易判断哪些方块的顶点落在了不规则物体的内部,哪些顶点在外部。结果如下

labeled image

3)那么,找出有这样属性的小方块的边哈,就是一端落在物体内部,一端落在物体外部,那么这个边上必有一点是落在物体表面。

Actual Intersections

4)这里有人可能会问,如何确定方块的边上粉色点的坐标呢?这里是由线性插值法来确定的。

已知方块的边上的端点坐标为点p_{1}和点p_{2}v_{1}v_{2}分为p_{1}p_{2}的tsdf值,还已知粉色点p的tsdf值为0,求粉色点坐标为p=p_{1}+\frac{(0-v_{1})*(p_{2}-p_{1})}{v_{2}-v_{1}}

5)当确定了方块与物体交点坐标后,用直线连接起交点即可。如下图所示。依次处理完所有的方块,就生成了数字化,可近似表示片状物体轮廓的表示。

下面我们根据2d的处理过程,依次讲解在3d场景下,如果找到可近似表示三维物体表面的方法。

1)我们在上一篇中已经介绍了TSDF场,就是大量带有tsdf值的体素(立方体)来虚拟地分割处理一下。

2)3d场景中也要找到横跨三维物体内部和外部的特殊体素。确定的结果就像下图中红色和蓝色顶点。确定的方法也很简单,就是检查体素8个顶点位置的tsdf值是不是符号相异,也就是有正有负,如果是,就说明这个体素是横跨三维物体内部和外部的。

                                      

3)找到上述这种特殊体素后,体素的12条边上肯定有若干条边是穿过了三维物体表面。那么,横跨物体内部与外部的边上,必有一点是落在了物体表面。

4)怎么求解呢?道理与2d场景类似的。

5)在2d中直接交点相连就构成了物体与方块相交的线段;在3d中物体与体素相交的是面片。如下图所示。

依次处理完所有的特殊体素,得到每个体素与物体表面相交的面片,连接起来,就构成了数字化表达物体表面的网格。如下图所示。

Computed Intersections

上述主要通过图文的方式,用简单的语言,讲述了marching cubes要完成的内容。为了方便大家理解开源代码中看到的marching cubes相关代码,再多讲述一点。

首先,每个体素有8个顶点和12条边,依次对体素的顶点和边编号。

其次,8个顶点根据是否处于物体内部,可组合出2^8=256种情况。举例说明如下

再次,根据顶点是否位于物体内部的状态,可以构建一个0-255的索引。索引由八位二进制构成,每一位是一个顶点的状态,如下图所示。这也是开源代码里常用数组名edgeTable来表示的内容。

还有,每个索引对应的网格表示方法,写在了triTable里。

triTable[3] = {1,8,3,9,8,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} 

这个数组表示,边的编号为1、8、3构成一个三角面片,边的编号为9、8、1构成一个三角面片,也就是说,这个体素里有两个三角面片。

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Marching Cubes算法是一种常用的三维体数据表面重建算法。它可以将一个体数据集转化为连续的多边形网格模型。 在三维体数据中,每个体素的值表示其在某一属性上的特征,如密度、压力等。Marching Cubes算法首先将整个体数据集划分为无数个小立方体,每个小立方体包含8个顶点。然后根据每个小立方体顶点所代表的属性值与事先设定的阈值进行比较,确定该顶点是否在表面上。若在表面上,就将相应顶点连接起来组成一个面,并将该面连接到整个网格模型上。 得到的多边形网格模型可以用于可视化、仿真和分析等应用。Marching Cubes算法具有简单、高效的特点,适用于各种不规则的三维体数据集。它广泛应用于医学图像处理、地质勘探、计算机动画等领域。 然而,Marching Cubes算法也存在一些限制。首先,它在重建过程中产生的多边形可能存在不连续性和拓扑错误。为了解决这个问题,后续研究提出了一些改进算法,如Dual Marching Cubes和Extended Marching Cubes。其次,Marching Cubes算法对数据集的分辨率要求较高,对于过于细致的结构可能无法很好地重建。 总的来说,Marching Cubes算法在三维体数据表面重建领域具有重要的应用价值,其简单、高效的特点使其成为一种常用的算法。随着相关技术的不断发展,对Marching Cubes算法的改进和优化将进一步推动其在各个领域的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芹菜_cherie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值