曲面重构技术文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由点云重构CAD模型的基本步骤包括:点云分块、点云切片、曲面重构、CAD模型。
1.点云分块
由于工程实际中原型往往不是由一张简单曲面构成,而是由大量初等解析曲面(如平面、圆柱面、圆锥面、球面、圆环面等)及部分自由曲面组成,故三维实体重构的首要任务是将测量数据按实物原型的几何特征进行分割成不同的数据块,使得位于同一数据块内的数据点可以一张特定的曲面来表示,然后针对不同数据块采用不同的曲面建构方案(如初等解析曲面、B-spline 曲面、Bezier曲面、NURBS 曲面等)进行曲面重建,最后将这些曲面块拼接成实体,它包括点集分割与曲面重建两部分。
为了实现点云的分块功能,同时也为了后续曲线拟合中重要点的选取工作,我们建立了图元的拾取模块。它包括多边形拾取、矩形拾取、点选三个小的部分,运用此模块我们可以利用鼠标对空间点云进行任意的分割和提取。
多边形拾取与矩形拾取类似,都是在视图上确定一个选择区域,然后根据视图上的图形是否完全落在这个选择区域中来决定视图上的图形是否被选取。由于我们针对的对象是三维空间中的图元,因此在视图窗口中所确定的区域实际上是一个矩形体或者多面体,所拾取的图元是位于这个体中的对象。问题的关键在于如何确定图元是否位于矩形体或多面体中。
基于OpenGL的拾取机制很好的解决了这个问题。物体的实际坐标经模型视图变换、投影变换、视口变换后显示为屏幕上的一点,OpenGL的gluUnProject()可以做该过程的逆变换,即根据已知屏幕上点的二维坐标以及经过的变换矩阵可求出该点变换前在三维空间的坐标位置,但需要事先给定二维屏幕坐标的深度坐标。考虑OpenGL的投影原理,将0.0和1.0作为前后裁剪面的深度坐标。因此两次调用gluUnProject()可得到视图体前后裁剪面上的两个点,也就是屏幕上点的两个三维坐标。
对于矩形拾取而言,判断点是否位于矩形体中比较简单,可以选取每个空间点,判断点的坐标是否位于矩形盒三个方向的极限范围内,如果满足条件,则可认为该点符合条件,被拾取到了,并高亮显示。对于多边形拾取而言,我们借助面的法矢进行判断,对于任意空间点p,首先计算出各个面的外法矢n,然后在每个面任选一点v与p构成向量pv,如果对于多边形的每个面恒有n*pv >0,则可认为该点位于多边形的内部,当然也可利用射线法进行判断,从该点出发,作任意方向的一根射线,考察此射线与三维物体各面的交点数,如果总数=0或其它偶数,则在三维物体之外,如果总数为奇,则在三维物体之内。点选相对比较简单,对鼠标点击点向各个方向各扩展一定距离,构成一个矩形,然后按照矩形拾取的原理进行判断。需要注意的是上述三种方法不可避免的会出现透视方向的重叠点,必须根据到前裁剪平面的距离进行取舍。下面分别给出一些简单的例子。
多变形拾取
在多边形拾取对话框中我们可以根据操作的类型选择是对网格还是点云进行拾取,同时所保留的区域(多边形内、外、或者同时)也可进行选择。基本操作步骤为:左键点击多边形按钮开始选择,在点云中左键单击作为多边形顶点,同时开始绘制,点击Apply结束多边形绘制,同时高亮显示拾取点云。
1.1矩形拾取
矩形拾取的步骤和多边形类似,效率相对高一些,但每次拾取的区域有限。
1.2点选操作
点选操作的主要目地是选择一些显著的离散点进行曲线的拟合,也可用于删除一些噪点。
2.点云切片
由于通过测量所获取的数据是一种散乱无序的状态,而且数据量很大,直接处理代价很大,因此如何将数据进行重新组合,使其成为一种有序的结构,在曲面重构中有着重要应用。借助医学切片技术在医学图像三维重构方面的突出作用,将它引入到计算机辅助几何设计领域,提出了三维散乱数据点的切片表示技术,这种技术将原始的无序数据点集转化为具有层列结构的有序组织形式,同时减少了点云的数据量,为后续的曲面重构奠定了基础。
2.1 定义截平面
每个截平面包括两个属性,一个截平面的中心点centerPos,另一个为截平面的法矢n,不同拓扑结构的数据点云,截平面的定义方式不同。对于一般结构的数据点云,初始截平面的定义可以按以下过程定义:首先计算点云的最小包围盒,获取包围盒的中心点作为第一个截平面的中心点,初始方向定位x,y,z任一方向,截平面的个数设定为一个,平行平面之间的初始距离d=1;实际应用时,可以根据数据点云的具体情况进行手动调整第一个截平面的中心坐标、截平面的法矢方向、截平面的间距、截平面的个数。同时为了便于观察切片切
割到的点云,建议将切片做成半透明的,切片的大小可以参考点云三个方向的变化范围进行确定。下图为根据点云的实际位置和方向调整后的截平面族,截平面的个数num = 3,间距dis = 5.0;法矢为x轴正向。
有些时候沿坐标轴方向或者反方向很难获得比较满意的切片,我们希望可以根据点云的走向任意确定截面法矢。因此在做切片时需要增加法向的选择功能,由于空间两个不重合点即可确定一向量,因此在实际操作时我们可以任意在空间选择两个点确定切片的法向。离散点的选取可以参照图元拾取中的点选操作。
2.2 定义截平面数据点
用截平面截取点云时,数据点刚好落在截平面上的可能性很小,有时甚至是不可能的,所以仅仅截取落在截平面上的点往往不可能拟合出截面线,即使可以拟合出截面线也往往不能反映实体的实际外形。所以这里采用点云中与平面距离小于一定阈值ε的点作为研究对象。只要与截平面距离小于阈值的点就是截取点。这里阈值的确定十分重要,太大,截取的点太多,计算量大,太小,截取点拟合曲线又不能反映实体的实际外形。因此点云的厚度δ(2ε)很难给出具体的值。一些实例表明,δ与点云的密度ρ存在一定的关系,大部分情况下δ取1~4倍的ρ即可满足条件。
2.3 获取截面数据点
目前有两种计算切片的方法:投影法和求交法。下面分别给出这两种方法的原理和后续点云的处理方法。
2.3.1 投影法
投影法是对每一平面阈值内的点云沿平面的法矢方向进行投影,得到点云束。
选取回转面进行测试,δ取2倍的点云密度,截平面个数为5,间距为6.0,结果如下:
仔细观察上述点云发现投影法获取的切片数据为具有一定宽度的点云带, 存在大量冗余数据, 且切片数据之间没有明显的拓扑邻近关系, 因此在保留截面特征数据点的同时必须对其进行精简与排序, 实现切片数据的优化, 以适用于参数曲线与曲面重构。
为实现切片数据精简, 可将切片数据点转换至极坐标系下并将其划分为多个区域, 对每个较小区域分别进行轮廓分离及特征数据提取, 在保证数据信息完整性的同时实现切片数据的精简, 然后依次连接各区域相同轮廓特征数据, 得到精确有序的切片数据点序列。
该算法的主要步骤为:
1.将每个切片截取的的数据点集T进行旋转平移操作,转移到xy平面上,其中集合T
的中心点O0转移到坐标原点。
2.以O0 为极坐标原点, 以O0 为起点作一条平行于X 轴的射线, 作为极轴, 建立切片
数据极坐标系, 获取切片数据点极径r及极角θ
3.计算极角θ的变化范围[θmin,θmax],按照极角部长ρ将切片数据划分为多个扇形区域,
如下图所示。
4.计算各区域切片数据形心,将其作为切片数据特征点,依次连接特征点,所得序列
即为优化后的切片数据点序列。