点云构建三角网格模型X - GOOGLE CODE.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
点云构建三角网格模型X - GOOGLE CODE

点云构建三角网格模型——计算几何课程设计林添 任博 杨光 一、项目背景由点云构建三角网格模型最初的动机来源于医学方面。在对脏器,骨骼等的3维图像开始得到广泛应用之时,如何从扫描得到的点云数据生成可供进一步渲染使用的三维三角网格模型成为了人们关心的问题。表面模型的恢复,由于对细节有着一定的精度要求,生成三角网格的算法既要保证效率,又要产生能够精细反映点云结构的模型。随着激光扫描技术的进一步成熟,这一问题的应用开始向更广的领域拓展。如扫描并制作文物古迹的三维数字模型,或是自动化模型设计等方面。另外,由于计算机视觉的出现,诸如人脸识别,建筑物识别等研究课题的开始深入地研究。随着基于大量图片或视频的数据捕获的技术发展,通常需要在计算机视觉作为前端输入的,通过海量数据驱动地方式自动地从2维图像重构出3维模型。这些自动化的场景恢复,往往利用不同帧之间的匹配点来进行重构,所以由点云构建三角网格模型在实际研究和应用当中具有广泛的价值。二、文献综述在今天,有一些较为经典的由点云生成三角网格模型的算法,如William的Marching Cubes算法,之后A.Hilton的Marching Triangles算法,这两篇论文最早研究基于点云构造表面模型,它们利用了点集的空间划分,分别构造出立方体模型和三角形网格;而Fausto的Ball-Pivoting算法等,在研究了以上算法之后,提出了从局部出发,迭代构造的思想。在构造表面网格的过程当中,法向量的计算尤为关键,常常会影响到后面构造的精度乃至准确性,也一些研究也特别关心如何获得表面法向等数据。三、算法原理在本次实验设计当中,我们主要采用了Ball-Pivoting算法(滚球算法)。选择该算法的主要原因是:1) 算法较为稳定,速度较快O(|E|)(|E|为最终的边数),效果较好;2) 论文依赖的技术较为独立,具有一定的新颖性和创造性;3) 构造较为直观,便于演示。算法概述:滚球算法的核心概念比较直观的。设M为某待求的三维物体的表面,S是对M的一个扫描获得的点集。对一般的实际点集S,通常由三维扫描得到,其实际物体的表面可以视为一封闭的集合,那么则可以合理的认为存在一个合适的半径为r0的球,使得其不可能不接触任何点地穿过S。滚球算法,则是让该球在其表面滚动,一旦球的表面触及到三个点则产生一个三角形网格,直到结束。在一开始,我们找到一个这样的球刚好与S上的三个点接触的位置。之后,保持求与两个点相接触,而将球“绕两点组成的轴线滚动”,直到它接触到新的点。对所有在当前三角网格边缘的边持续这一过程,则三角形可以在此间不断地生成。显然,对于足够大的球半径,生成的三角网格将是点集S的一个凸包。当球半径逐渐减小时,生成的三角网格不再是凸的,需要引入概念。设点集S维度为d,则取其大小为k+1的子集T,其中k=conv(T)是T的凸包的维度,一个半径为的d维球b,若有T=,则所有这样的conv(T)的集合即构成了S的边界。其中大小为k+1的子集T构成的边界称为k-face。滚球算法与间有着紧密联系。根据该论文,采用滚球算法生成的表面三角网格正是S的的2-face的一个子集。同时,它也是点集的三维Delaunay三角剖分的一个2-skeleton的子集。在满足以下条件时,所获得的三角网格将与原模型拓扑同构:任何半径为r的球与模型表面的交面与圆拓扑同构。球心在模型表面上的半径为r的球至少容纳一个点。算法伪代码:算法数据结构:在程序中,使用渐进的方法逐个构造三角网格。构造并维护三个列表,即当前的边界环表,当前的活跃边界列表,以及已生成的三角形列表。活跃边界列表由一系列相互连接的边结构构成,每个边结构存储两断点A,B以及已生成的作为其边界的三角形的对顶点O,半径为r的球的球心坐标C等信息,并与边界上前后相连的两条边结构以指针相连。每一条边可以有状态ACTIVE,BOUNDARY,DELETED。ACTIVE表示这是一条可被用作滚动轴的边,BOUNDARY则是对应不可能被使用为滚动轴生成新三角形的边。DELETED是为维护而使用的状态,表示边结构已不需要再被考虑,可以删除。由于在滚球算法中,三角网格的拓扑性质可能发生变化,导致边界可能存在多条,因此用边界环表来维护这样的环存在的个数。算法流程:下面顺序介绍算法的流程:空间搜索由于对于一般实际模型而言,S的获得受扫描精度的影响,使S的点的空间密度有(模型无关的)固定上界,且多数为空间均匀分布,因此,本算法采用空间网格化的方法进行对点的空间搜索。网格半径采用略大于2r,由于球半径为r,则任何一次在网格V附近的搜索只涉及V临近的最多共27个网格。这样在点空间密度有固定上界的情形下,任何一次搜索的时间是O(1)的。种子三角形选取算法需要先选取一个种子三角形,从这一种子三角形出发不停地循

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档