1.前言

MarchingCube方法重建三维物体表面的过程是依据像素灰度值的比较来确定等值点,从而得到组成等值面的三角片。由于表征器官组织密度的灰度值是一个在空间分布上不连续的数据,所以仅靠一个灰度阈值定义一个器官组织有时候不能保证重建表面的完整,而图像中的噪声也可能导致重建曲面出现多孔性。

此外,当同样的灰度范围内包含两种不同的组织时,临近的两种组织的灰度去直接先也难以被严格定义。而在实际应用中,不少由如CT、MRI等成像设备获取的切片图像质量较好,同时图像本身的信息也不复杂。这是我们首先的应该是采用图像分割算法自动完成目标轮廓的提取,获得描述感兴趣目标的一系列二维轮廓线的集合。幼儿为轮廓线集合重建三维物体的表面形态,这类方法称为基于二维平行轮廓线的三维重建。

2.基本原理

平行轮廓线三维重建的原理很简单,就是将相邻两层切片图像中目标的轮廓线顶点按照某种规则连接起来,构成一组三角形小面片的集合,从而形成重建物体表面的多面体近似,具体如下图所示。

假设上下两层切片图像中的目标轮廓线分别为P和Q的点集,构成上轮廓线P的点集可以写为p0,p1,p2,p3,...,pm-1;构成下轮廓线Q的点集可以写为q0,q1,q2,q3,...,qn-1。轮廓线上的顶点均按逆时针排布(如上图所示)。将一层切片图像中的轮廓线顶点一次用直线连接,就可以得到轮廓线的多边形近似,开始下定义:

  • 线段:每一条直线段pipi+1或qjqj+1称为线段。
  • 跨距:连接上轮廓线顶点与下轮廓线顶点之间的直线称为跨距。
我们要找的三角形面片就是由一条轮廓线线段与两段跨距构成。为了方便论述,我们分别把三角面片的两个跨距称为左跨距和右跨距。

2.1 三角面片满足的条件

连接上下两条轮廓线的三角片应该满足以下三个条件,这样才能连接构成三维表面而且互不相交。

  1. 三角片的3个顶点必须同时具有轮廓线P和Q中的顶点;
  2. 每条轮廓线线段必须是一个而且只能是一个三角片的一条边;
  3. 一条跨距只能属于两个相邻的三角片。
如果上下轮廓线各有m和n条轮廓线线段,而每条轮廓线线段为一个三角片的一条边,则相邻轮廓线围成的三维表面将包含m+n个基本三角片。
这样约束明显非常粗糙,Keppel和Fuchs[1][2]证明,满足这三个条件的连接方式有很多种。为了保证重建表面自然光滑,我们还需要一些优化准则进行优化。

2.2 常用的优化准则

  1. 体积最大准则:选择顶点连接的时候,将选择使得重建表面包围的体积最大的连接;
  2. 表面积最小准则:选择顶点连接的时候,将选择使得重建表面的表面积最小的连接;
  3. 跨距最短连接(最短对角线法):选择顶点连接的时候,将选择使得连接上下轮廓线顶点的跨距总和最小的连接。

3.最短对角线法平行轮廓线重建原理

Ekoule提出的最短对角线法把跨距看成对角线,以最短对角线为目标来决定轮廓顶点的连接,使用这种方法构造的三维物体表面简单、易于实现。

对于下层轮廓Q上的一顶点qj,如果上层轮廓P上距qj最近的点为pi,那么以跨距piqj为基础构造连接两轮廓的三角面片有两种情况。如下图所示:

此时,我们就可以依据最短对角线法确定该三角片的第三个顶点;如果跨距piqj+1长度小于跨距pi+1qj,则该三角片的第3个顶点为qj+1,连接pi和qj+1,形成三角片△qjpiqj+1,正如上图所示。否则该三角片的第3个顶点为pi+1,那么就连接pi+1和qj,形成三角片△piqjpi+1。

3.1 最短对角线法实现步骤

  1. 对轮廓线的顶点排序,通常按逆时针顺序排列。
  2. 在下层轮廓线上选取一点qj作为起点,计算上层轮廓顶点到qj的距离,选择距qj最近的一个点,设为pi,那么,qj和pi作为重建三角片的两个顶点。
  3. 分别计算轮廓顶点qj和pi+1的距离D1,轮廓顶点pi和qj+1的距离D2。
  4. 如果D1<D2,则三角片的第3个顶点为pi+1,形成三角面片△piqjpi+1,更新i=i+1;否则三角片的第3个顶点为qj+1,则三角片为△qjpiqj+1,更新j=j+1。然后,转到步骤(3)。直到绕所有轮廓顶点一周,这样逐层处理轮廓线,确定所有三角片的顶点。
根据上面步骤确定三角片顶点,依次连接各顶点,得到构成重建表面的三角片集合,完成表面重建。

4.参考文献

[1]Keppel E. Approximating complex surfaces by triangulation of contour lines[J]. Ibm Journal of Research & Development, 2010, 19(1):2-11.

[2]Fuchs H, Kedem Z M, Uselton S P. Optimal surface reconstruction from planar contours. Commun ACM[J]. Communications of the Acm, 1977, 20(2):693-702.

[3]Ekoule A B, Peyrin F C, Odet C L. A triangulation algorithm from arbitrary shaped multiple planar contours[J]. Acm Transactions on Graphics, 1991, 10(2):182-199.

轮廓线重建:二维平行轮廓线重建理论和方法相关推荐

  1. MVS学习(二):MVS重建的数据获取方法推荐

    MVS学习(二):MVS重建的数据获取方法推荐 相机模型的精度 图像分辨率 图像重叠度 图像数量 图像质量 MVS学习(一):综述论文Multi-View Stereo: A Tutorial阅读记录 ...

  2. 【飞控理论】【惯性导航基础】二维平面的旋转如何用代数表示?三维平面的旋转如何用代数表示?什么是四元数?四元数、欧拉角、方向余弦之间有什么关系?

    上一篇欧拉角 由于欧拉角在描述三维空间物体旋转问题时存在万向节死锁问题(详情戳这里),所以引入四元数概念. 目录 1.二维平面的旋转 2.三维平面的旋转(什么是四元数) 3.<捷联惯性导航> ...

  3. 二维平面多点电荷电力线与等位面及三维空间多点电荷电力线的计算机仿真

    本文参考了两位学长的csdn博客,经过笔者和笔者的一位同专业室友的共同编辑最终形成.这也是我们组两个人的电磁场理论课程的课程设计,希望能对学弟学妹们有所帮助. 目录 1.方法论述 1.1点电荷 1.2 ...

  4. turtlebot3 在gazebo仿真下 通过 gmapping slam 建立二维平面地图——全过程

    turtlebot3 在gazebo仿真下 通过 gmapping slam 建立二维平面地图--全过程 ROS中的地图 使用rosbag记录数据 rosbag record rosbag play ...

  5. 二维平面最短距离(分治)

    题目描述 有一天,小明得到了二维平面上的若干个点,他现在想知道这些点中距离最近的两个点之间的距离是多少? 输入 第一行输入一个整数T,共有T组测试数据(T<=30). 每组输入数据第一行输入一个 ...

  6. Shortcut(二维平面内点的连续性)

    Shortcut(shortcut.pas/.cpp) Description Mirek有一条每天从他家去大学工作的最喜欢的路.这个路径由若干个部分组成,且每个部分是10米长的直线.每一个部分是直线 ...

  7. 现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格。向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意:

    目录 输入格式: 输出格式: 输入样例: 输出样例: 正确答案: 现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格.向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意: ...

  8. 圆弧中点坐标值求解(二维平面三维空间)(3.1增加三维部分)-①

    圆弧中点坐标值求解 二维平面 如图:假设O点坐标为(X0,Y0),A 点坐标为(X1,Y1),C点坐标为(X,Y),从A到C的旋转角度为θ, 复数域算法 转自知乎:https://www.zhihu. ...

  9. PointNet学习笔记(二)——支撑材料(理论证明)

    PointNet学习笔记(二)--支撑材料(理论证明) 这一部分记录了PointNet中两个定理的证明和博主的学习笔记.具体的定理可以参见论文学习笔记,这里仅给出证明.更新于2018.10.12. 文 ...

最新文章

  1. LiveVideoStackCon深圳 - VR/AR基础技术更成熟
  2. 第六章插图以及代码文件和插图之间的对应关系
  3. Vue如何在data中正确引入图片路径
  4. ssl1692-魔板【HSAH,bfs】
  5. skywalking使用mysql_聊聊skywalking的mysql-plugin
  6. Java 读写json格式的文件方法详解
  7. python小例子之8 -- decorator的使用
  8. c# lu分解的代码_LU分解(1)
  9. Codeforces Round #666 (Div. 2) A. Juggling Letters
  10. Arturia Buchla Easel V for Mac(Buchla音乐画架插件)
  11. android shell检查是否锁屏_有没有办法检查Android设备屏幕是否通过adb锁定?
  12. python atm详解_python基础之ATM-1
  13. 利用虚拟机搭建Linux操作系统实验环境
  14. 三层交换技术与链路聚合
  15. Air202学习(3)AT指令开发示例
  16. 解决Intel Edison 已连接Wifi但无法上网问题
  17. linux sticky,session_sticky命令
  18. spring技巧之bean加载顺序控制
  19. linux绝育玩客云_玩客云绝育,不影响下载功能
  20. C#中转义字符\r, \n, \r\n, \t, \b, @作用

热门文章

  1. KBMMW 4.6 正式版发布
  2. 开始一瓢凉水浇顶,然后慢慢的感觉良好。
  3. NYOJ 541 最强的战斗力
  4. NYOJ 201 作业题
  5. 简单查找,如果找到返回下标,如果找不到返回-1
  6. JavaScript学习笔记:你必须要懂的原生JS(一)
  7. Kafka- Spark消费Kafka
  8. DDoS(Distributed Denial of Service,分布式拒绝服务)
  9. 微信公众号开发之数据库
  10. Android:sqlite问题小结