MC算法 && DC算法 (三维重建算法)学习及其基础知识 (学习总结)(未完待续)

1、MC算法(Marching Cube)

1.1 概念

1.1.1基本思想

  • 如何确定等值面?
    逐个遍历数据场的各个体素,确定该体素是否与等值面相交,如果有相交,计算等值面与立方体的棱边的交点,用这些交点连接成三角面片以逼近表示该体素内的等值面,所有的体素被遍历完后,最终得到整个数据场的等值面。
  • 确定等值面六面体单元的位置关系

1.1.2 预备知识

  • 空间场值:

  • 体素
    在医学影像的三维空间的像素点的某个区域内进行采样,若采样点在x,y,z三个方向上的分布是均匀的,采样间距分别为△x,△y,△z,则体数据可以用三维矩阵来表示,即f(i,j,k)。
    每八个相邻的采样点所构成的一个立方体成为一个体素,这八个采样点成为该体素的角点,如图所示。由于采样点是离散的,对于体素内的任意一点的值,只能通过该体素的八个角点的值通过三线性插值进行计算。
    体素

  • 等值面:
    首先等值面是空间中的一个曲面,我们规定空间中每一个点都有一个属性值,属性值相等连续空间组成的曲面,我们称之为等值面。
    等值面是空间中的一张曲面,在该曲面上函数F(x,y,z)的值等于某一给定值。准确地讲,是指在某一网格空间中,假若每一结点保存着三变量函数F(x,y,z),而且网格单元在x,y,z方向上的连续采样值为F(x,y,z),则对于某一给定值Fi,等值面是由所有满足:S={(x,y,z) | F(x,y,z)=Fi}的点组成的一张曲面。

    按照此严格定义下得到的等值面表达式如下:

    F(x,y,z)=a0+a1x+a2y+a3Z+a4xy+a5yz+a6xz+a7xyz

    可以看出等值面是三次代数曲面,提取过程复杂而且不利于显示。为了简化等值面的提取,W.ELorenson和H.E.CIine在1987年提取了一种等值面的简化提取方法,该方法首先找到等值面经过的六面体网格,求出该六面体与等值面的交点,将这些交点按照一定的拓扑连接关系连接起来,作为等值面在该六面体网格中的近似表示。如图所示,为了叙述的方便以及程序的编写,对所有六面体的顶点采用如下的编码规定:
    等值面规范

  • 线性插值:
    根据几个点的值确定出中间点的值的方法(有多种插值方法)

  • 等值面的角点
    角点就是极值点,即在某方面属性特别突出的点(“角点”、“兴趣点”、“特征”在文献中的使用是相互间可替换的)。

  • 中心差分方法
    用于求出该数据点处的梯度值
    百度百科介绍

1.2 基本步骤

  • 1.将原始数据经过预处理之后,读入特定的数组中或者八叉树。
  • 2.从网格数据体中提取一个六面体,成为当前六面体"同时获取该六面体的所有信息,例如8个顶点的值,坐标位置等。
  • 3.将当前六面体8个顶点的函数值与给定等值面值C进行比较,得到该六面体的状态表。
  • 4.根据当前六面体的状态表索引,找出与等值面相交的六面体棱边,并采用线性插值的方法,计算出各个交点的位置坐标。
  • 5.利用中心差分法,求出当前六面体8个顶点的法向量,在采用线性插值的方法,得到三角面片各个顶点的法向。
  • 6.根据各个三角面片顶点的坐标,顶点法向量进行三角面的连接。

1.3 算法优缺点

1.3.1 优点

  • I、算法逻辑简单 计算量较小 速度快

1.3.2 缺点

  • I、存在二义性
    二义性的后果/影响:
    ①以2D情形为例,二义性将导致在同一个单元中:相同状态却得到不同的连接方式(如下图所示):
    单元内2D情况
    那么对于上图中两种连接方式的不同选择,可能会导致在同一张图像上完全不同的结果(如下图所示),二义性在3D中的直接后果是产生 “孔洞” 。如果在一个单元中,一条对角线的两端点值大于等值面阈值,另一条对角线的两端点值小于等值面阈值,那么通常会发生这种二义性问题。
    整体
    在具体的模型中“空洞”表现为下图:
    在这里插入图片描述
    ②等值面与“边界立方体”交点的选取的只是在“边界立方体”的棱边上的点,这就会导致对边界几何特征的易丢失性。
  • II、模型特征问题
    ①Marching Cube生成面片的大小与六面体的大小相关,过大则会导致模型模糊,细节消失,过小会导致面片的数目过多。
    ②效率不是特别高,需要借助分层结构和并行计算。

2、DC算法(Dual Contouring)

2.1基本概念

  • 和MC算法中直接使用等值面与体素立方体的棱边交点来绘制等值三角面片的方式不同,DC算法通过利用体素的Hermite数据(即交点的空间坐标和法向量)计算一个最小二次误差函数QEF来在每个体素的内部生成一个位于等值面上的顶点,计算出所有体素内的唯一顶点后,由于每一条与等值面相交的边由4个体素所共享,这4个体素必然相邻且与等值面相交,也就是内部存在位于等值面上的唯一点,通过这相邻4个体素的内部顶点互相连接等值三角面片来逼近等值面。
  • 最小二次误差函数如下:
    Q E F ( x ) = ∑ [ n i ∙ ( x − p i ) ] 2 QEF(x)=∑[n_i∙(x-p_i )]^2 QEF(x)=[ni(xpi)]2
    x表示该体素内部位于等值面上的顶点,p_i,n_i分别表示交点的位置和单位法向量。

2.2 预备知识

  • QR矩阵分解 :最小二次误差QEF可以化为矩阵形式,从而利用QR分解降低计算复杂度:
    Q E F ( X ) = ( A x − b ) T ⋅ ( A x − b ) = x T ⋅ A T ⋅ A ⋅ x − 2 ⋅ x T ⋅ A T ⋅ b + b T ⋅ b QEF(X)=(Ax - b)^T ·(Ax - b)=x^T·A^ T·A·x - 2·x^T·A^T·b + b^T·b QEF(X)=(Axb)T(Axb)=xTATAx2xTATb+bTb
  • 正则方程:
  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值