三维扫描系统中的图形重构方法

文档序号:6112854阅读:208来源:国知局
专利名称:三维扫描系统中的图形重构方法
技术领域
本发明涉及一种三维扫描系统中的图形重构方法。
本发明主要是涉及到逆向工程(图1)中,用三维扫描系统(图2)获取产品海量数据点(点云),经过对这些点云数据的过滤处理和无缝拼接,然后对拼接后的点云块进行切割处理得到线,再在点或线的基础上构造面,进而构造出产品几何模型。利用本发明,可以作为三维扫描仪器和三维CAD软件的接口模块,搭起二者之间的桥梁,并在此基础上研究直接由点云数据做面的处理方法。
背景技术
逆向工程在实践中有着广泛的应用前景。主要是由于不少产品外形复杂,如汽车和飞机的覆盖件、人造假肢、陶瓷产品、艺术雕塑品及各种复杂零部件等,其自由曲面的设计表达或数学模型的建立都十分困难,现有的CAD系统尚难以进行严格的几何描述。
在逆向工程中,如何将实物零件经过三维测量和处理,实现三维模型重构和交互设计、修改,以便于通过快速成型或数控加工快速制作产品投放市场,是逆向工程研究的关键。
在逆向工程中,我们一般是通过三坐标测量机(CMM)、激光测量机、光栅扫描仪或工业CT等先进的快速测量系统获取海量数据点(点云),对这些点云数据进行过滤处理和无缝拼接后,对拼接后的点云块进行切割得到线,再在点或线的基础上构造面。一般情况下,由测量得到的点云由于产品尺寸、拓扑等各种原因都是经过多次测量拼接后得到的,因此点云数据具有数据量大(海量)、数据杂乱无序等特点,一般情形下这些点云数据无法被现在广泛使用的商业CAD软件如CATIA、Pro/ENGINEER、UG等直接进行处理,因此需要有能对杂乱海量数据点云的进行预处理有序的点并实现取线等基本功能的中间模块,这也是逆向工程中的一个瓶颈问题,对于逆向工程的应用和推广都有十分重要的意义。

发明内容
本发明提供一种能够提高图形重构速度的三维扫描系统中图形重构方法。
本发明采用如下技术方案一种三维扫描系统中的图形重构方法第一步对预处理后的点云进行平行切割,得到N个平行截面,再在每个平行截面的上方和下方分别对点云实施平行切割,得到N个含有平行截面的截体,将各个截体内的点云上的点向该截体内的平行截面进行垂直投影,并将该截体内平行截面点的垂直投影视为截体内平行截面与点云的截点,由各个截体内平行截面与点云的截点分别构成N条链表Li(i=1,2,...,N),在各个截体内的截点中分别选出一组处理点,该处理点是满足以下条件的截点,该条件为两处理点间的距离为点云内相邻两点之间的间距或其整数倍。
第二步分别对每条链表中的处理点进行排序,该排序方法为在每条链表中找出X坐标最小的点A(xa,ya,za)和最大的点B(xb,yb,zb),采用经过直线AB垂直平行截面的所在面的平面把每条链表中的处理点剖开成两部分,并分别将该两部分处理点的X坐标值按照由小到大顺序,分别置于列表list1及列表1ist2中,再将列表list2中的处理点排在列表list1中的处理点之后,置于刚处理的原链表中。
第三步取相邻的两条链表Li和Li+1,分别取出Li和Li+1中的第一个点和第二个点,将取出的4个点连接成一个四边形;然后再分别取出Li和Li+1两条链表中第二个点和第三个点,将取出的4各点连接成一个四边形,以此类推,直至两条链表Li和Li+1中的所有处理点都处理完毕;最后将两条链表Li和Li+1中的处理点形成的四边形沿任意一条对角线进行三角剖分。
按以上操作对剩余的相邻链表所形成的截体表面进行三角剖分,形成由三角形构成的三角网格,第四步将由上述三角剖分所得到的各个三角形的三个顶点的参数值带入OpenGL中提供的API函数,就可在显示器上再现真实的原始物体。
与现有技术相比,本发明具有如下优点本发明主要用于三维扫描系统中的海量无序数据点(点云)的处理,经过对这些点云数据的过滤处理和无缝拼接,由拼接后的点云块进行切割得到线,再在点或线的基础上构造面。该方法主要有以下优点(1)处理数据量极大,可达几百万乃至上千万个点,而对硬件无太高要求,最低配置内存仅为64M,任何一台能运行三维设计软件的机器上都能运行本软件。
(2)建面算法对点云不要求任何附加几何和拓扑信息(包括测点法矢,曲面边界信息),可以散乱点集为处理对象,在点处理的适应性上比一般的三维设计软件强得多。
(3)建面时通过优化算法先对海量数据进行划分,然后排序,最后由相邻点列构造三角形,极大的加快了点云的三角化的速度。简单、实效,较其它的CAD软件构造面的速度更快。
(4)操作简单易行,不需一般的三维CAD软件那样需要使用者有较深的专业设计背景知识。
(5)本算法充分利用VC++6.0这种开发工具中MFC的丰富资源,能够方便地实现数据的连接。充分利用了MFC中CObList类和CObArray类,可以直接调用其成员函数来管理和处理数据,简化了程序的复杂性,加快了计算速度,实现了数据管理的高效性,可以极大的缩短编程时间,减少错误,提高网格生成效率。
(6)本发明充分利用了OpenGL中提供的API函数显示三角形,再赋予材质属性并打上光照渲染,则就可在显示器上再现真实的原始物体。
(7)仿真结果表明本发明提供的构建曲面的思路是可行的,其三角网格化的速度很快并且质量很好,曲面重建的效果良好。


图1是逆向工程流程图。
图2光栅式三维扫描系统组成图。
图3图形重构方法算法整体流程图。
图4获取截线云算法的流程图。
图5是经过预处理的小熊模型点云数据图形。
图6是给定平行面间距d=4.0情况下求得的截线云数据图形。
图7是从图6中的截线云数据抽取出的一段数据链条图形。
图8封闭环式的截线云示意图。
图9跨距。
图10对应于曲面重构问题的有向图搜索问题。
图11启发式搜索方法。
图12原始点云。
图13三角化点云。
图14三角化曲面。
图15曲率均值化后三角化曲面。
具体实施例方式
一种三维扫描系统中的图形重构方法第一步对预处理后的点云进行平行切割,得到N个平行截面,再在每个平行截面的上方和下方分别对点云实施平行切割,得到N个含有平行截面的截体,将各个截体内的点云上的点向该截体内的平行截面进行垂直投影,并将该截体内平行截面点的垂直投影视为截体内平行截面与点云的截点,由各个截体内平行截面与点云的截点分别构成N条链表Li(i=1,2,...,N),在各个截体内的截点中分别选出一组处理点,该处理点是满足以下条件的截点,该条件为两处理点间的距离为点云内相邻两点之间的间距或其整数倍。
第二步分别对每条链表中的处理点进行排序,该排序方法为在每条链表中找出X坐标最小的点A(xa,ya,za)和最大的点B(xb,yb,zb),采用经过直线AB垂直平行截面的所在面的平面把每条链表中的处理点剖开成两部分,并分别将该两部分处理点的X坐标值按照由小到大顺序,分别置于列表list1及列表list2中,再将列表list2中的处理点排在列表list1中的处理点之后,置于刚处理的原链表中。
第三步取相邻的两条链表Li和Li+1,分别取出Li和Li+1中的第一个点和第二个点,将取出的4个点连接成一个四边形;然后再分别取出Li和Li+1两条链表中第二个点和第三个点,将取出的4各点连接成一个四边形,以此类推,直至两条链表Li和Li+1中的所有处理点都处理完毕;最后将两条链表Li和Li+1中的处理点形成的四边形沿任意一条对角线进行三角剖分。
按以上操作对剩余的相邻链表所形成的截体表面进行三角剖分,形成由三角形构成的三角网格,第四步将由上述三角剖分所得到的各个三角形的三个顶点的参数值带入OpenGL中提供的API函数,就可在显示器上再现真实的原始物体。
本发明提供对杂乱海量数据进行点的先期处理、得到有序的点、实现取线功能、直至构造曲面的功能,其中具体需要的对点云操作的主要功能如下2.1读数据显示点云由于逆向工程中由扫描系统得到的数据量极大,经常达到上百万个点,这样海量数据的读取与显示极其费时,为了把数据图形快速显示,对程序的算法执行效率要求极高。本程序算法运用VC和OpenGL中的一些函数功能进行优化组合,使数据的读取与显示速度比常规情况下有了极大的提高。
2.2平移、旋转、放缩点云三维图形比之二维图形的优势之一在于,我们能够从不同的角度对之进行观察和研究,然而计算机的显示屏幕却只是二维的,我们可以通过设置景深的灰度来来展现整个画面的纵深感,但要想观测到三维对象的不同侧面,这还是不够的。既然观察者的位置是固定的,我们就想办法让图形对象动起来。所以在这个软件中,我们设置了平移、旋转操作,而很多时候,要想知道画面细节,需要对画面的局部地方进行很清楚的观察、操作。故而在这个软件中我们也加入了相应放缩功能。
平移、旋转、放缩由于都是对整个对象的海量数据操作,计算量十分巨大,对时间的要求很高。
2.3稀释点云输入数据的数据量如果太大,会使平移、旋转、放缩的运算量太大,从而反应时间也会相应的增加。因此,本软件提供稀释功能,这样平移、旋转、放缩的运算量可以仅为原先的几十分之一。用户可以先对图形进行稀释,当把图形转换到想要观察的部分,再对它进行复原操作。有时候,用户不需要太高的精度,数据量太大,给出很多用户觉得是冗余的信息,也可对点云块进行稀释,再以稀释后的点云为基础进行操作。从而大大减少运算量。
2.4删除点云虽然现在的测量系统的研究已经取得了长足进步,测量得到的数据也已基本满足要求,特别是精度可达0.1mm,然而其还未能达到智能化的水平,因此无法自行分辨出测量物体与背景物。虽然背景可以用反射性能很差的黑色,但大多数情况还是不可避免地带入很多无用的杂点,如果不把这些杂点去掉,将会影响后期取线和做面的效果,使其无法精确的复现测量物的原貌。而有些时候,我们虽然测量到整个物体的点云数据,但我们只对其中的一部分感兴趣,这时,也需要删去其它我们不需要的部分以减少点云处理的工作量,从而大大加快处理时间。
2.5点云拼接在产品外形的测量过程中,通常不能在同一坐标系下将产品的几何数据一次测出,其原因之一是产品的尺寸超出了测量的行程,二是在部分区域测量探头受被测实物的几何形状的干涉阻碍,不能触及产品的反面,而应将这些不同坐标系下的重定位数据变换到同一坐标系中,这个过程称之为测量数据(多视角数据)的重定位,也即拼接。本发明的特征是针对经过过滤处理和无缝拼接的点云数据,进行切割处理得到线,再在点或线的基础上构造面,进而构造出产品几何模型。
下面结合附图示例对本发明的具体实施方式
作进一步描述。根据上述方法,对测量得到的海量点云数据进行曲面重构。本软件以PC上的Windows NT为开发平台,以Visual C++6.0为开发环境,利用集成在Visual C++中的三维图形软件接口的新一代标准OpenGL进行编程。图形重构方法算法整体流程图如图3所示。对经过过滤处理和无缝拼接的点云数据进行曲面重构,主要包括以下步骤(一)切割点云线在点云预处理之后,通过旋转平移选好角度后,给定一系列平行面,求得物体(实际上是物体表面上的海量点)在这一截面上的数据点。但海量数据是离散的,给定某一任意平面,可能没有(或者只有极个别点)在截面上,为此,我们只能在精度许可范围内,尽可能地去接近真实世界,这样也就产生了如下的算法(算法流程图如图4所示)首先由海量数据中任意相邻的一对点得到一个距离,而由这样的M(M>100)个距离得到的平均值为d。
(1)对点云进行预处理,去除杂点之后,通过旋转平移选好切割角度后,给定一系列垂直于特征线的等间距的平行面(间距默认为d的三倍)。
(2)在给定平行面上下各作一个平行于给定平行面的平行面(其间距均为d),这样就由派生出来的两个平行面构成一个截体,而我们则把落入这个截体内的点在给定平行面上的垂直投影近似作为真实物体上的点落在给定平行面上的点,这样就得到给定平面与真实物体的交点(截点)。同理,我们也就得到物体在一组平行面上的截点。
(3)对这一组平面中的每一个平行面,其上的截点构成一条链条。设这组平行面共有N个,则得到N个链条。
(4)对每一个链条进行处理由这些截点得到一组处理点,这些处理点满足条件A)两点间的距离为d或者d的整数倍。
B)该点在给定截面(给定截体范围内)上下都有临近的离散点。
(5)对这N个链条处理就可以得到N个链条的处理点。即得到截线云。
根据上述方法,通过VC++6.0平台用C++编程实现了对点云平行切割获取截线云。图5是经过预处理的小熊模型点云数据。图6是默认给定平行面间距为相邻点间距的三倍情况下求得的截线云数据。图7是从图6中的截线云数据抽取出的一段数据链条。
(二)截线云排序切割得到的截线云是无序的,即无法根据它们的存储顺序来推测拓扑顺序,为了使两条截线云之间的三角网格化简单、直观,需要对点云线进行排序,以有序的两条截线云构造三角网格将大大降低复杂性,减少计算量。
排序就是将一组杂乱无章的数据按一定的规律顺次排列起来。一般而言,排序首先要具有数据表,即通常指的排序对象,排序对象有多个属性域,也就是多个数据成员组成,其中有一个属性域可用来区分对象,作为排序的依据,该域叫做关键码。如果在数据表中各个对象的关键码互不相同,这种关键码称为主关键码。利用某一种排序方法按照主关键码进行排序,排序的结果是唯一的。但是数据表中有些对象的关键码相同,这种情况下,可虑用某种方法进行转换限制,转化为限制条件下的主关键码进行排序。
如图8所示,截线云环是一个和Z轴垂直的平面(截线云存储在链表ListM中),横轴为X方向,竖轴为Y方向。如果截线云环是封闭环,采用关键码为点X轴方向坐标值排序,除端点外,一个X值对应两个点,即其关键码不是单值性质的。我们先找到截线云的X坐标最小和最大的点A(xa,ya,za),B(xb,yb,zb)。采用经过直线AB垂直截线云所在面的平面把截线云剖开成两部分,判断截线云上的每一个点在这个平面的哪个方向从而把这些点分成两组,则每一组中关键码是唯一的(在此例中关键码是x)。两组点分别排序,排好之后合并起来就能得到有序的截线云。由于图8中截线云所在的面与Z轴垂直,因此可利用坐标值y作为判断标准对点分组。具体算法如下(1)得到直线AB的方程y=yb-yaxb-xa(x-xa)+ya.]]>(2)从截线云链表ListM中得到一点P(xi,yi,zi),把x=xi代入上面的方程得到y=yk。
(3)比较yk和yi,如果yk>=yi,点P归入第一组点集list1,反之归入第二组点集list2。
(4)LIstM中如果没有点了,则分组结束;否则,返回到(2)。
list1从小到大排序,list2从大到小插入,各自插入完成之后,把链表list2的表第一个元素的指针插在链表list1的末尾。
排序的方法有插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序等,由于点云得到的点经过拼合和后续的一些处理已变得毫无规律可循,成为杂乱点,且用链表结构存储,因此这里适合采用链表直接插入排序。
(三)截线云三角化经过以上切割和排序处理的截线云可称为轮廓线,现在从轮廓线就可以开始三维重建的工作了。本发明采用基于相邻点列构造三角形的重构曲面算法。
(1)基本准则假设两相邻平行平面上各有一轮廓线,如图9示。上轮廓线的采样点列为Q={Q0,Q1...,Qn-1},下轮廓线上的采样点列为P={P0,P1...,Pm-1}。各轮廓线上采样点列均按逆时针方向排列。如果用直线把上下轮廓线上的采样点依次连接起来形成一个封闭的三角形带,我们就得到一个过轮廓线的曲面的近似多边形表示。
连接上轮廓线上的一点与下轮廓线上的一采样点的线段称为跨距。相邻的两跨距(共享一个采样点)构成一个三角面片,称为为基本三角面片。这两个跨距称为左跨距和右跨距。
采用三角片在P和Q之间构造一个圆柱表面,三角片的顶点均来自P和Q。但是并非所有的组合方式都是可接受的,只有满足以下条件的三角片集合才是可接受的1)每一个轮廓线段必须在而且只能在一个基本三角面片中出现。如果上下轮廓线各有m和n个轮廓线段,则合理的三角面模型含有m+n个基本三角面片。
2)如果一个跨距在某一基本三角面中为左跨距,则该跨距是且仅是另一个三角面片的右跨距。
将该问题归结为对有向图的搜索。如图10所示,可以用一个有m行,n列的有向图G(V,A)来表示点列及其连接关系。图中每一个结点表示上轮廓线和下轮廓线的之间的一个跨距,Vij表示点Pi到Qj之间的跨距,有向弧[Vij,Vi,j+1]称为水平弧,对应了一个基本三角面片,其左跨距为Vij,右跨距为Vi,j+1。称[Vij,Vi+1,j]为垂直弧,它同样对应了一个基本三角面片。G(V,A)由跨距节点和水平弧和垂直弧构成。
因此,一个可接受的三角面模型对应从V00到Vm-1,n-1的路径。
(2)启发式优化逼近方法三角曲面重构可以归结为一个搜索问题。在图10中,水平弧和垂直弧可以赋以不同的值,于是,基于轮廓线的三角曲面重构问题归结为以某个目标函数极小或极大为目标,搜索一条从V00到Vm-1,n-1的路径。本发明采用启发式优化逼近方法,用有向图的启发式搜索模型和相关性模型方法,其结果是在有向图中寻找一条可接受的路径而非最优解,本算法是基于轮廓线相关性的一种启发式算法,如图11。
首先将上下轮廓线段的长度正规化,使每条轮廓线的总长度都为1。记w(Pi,Pi+k)为Pi到Pi+k之间的规范化距离,可以采用以下启发式规则之一1)如果|w(P0,Pi)+w(Pi,Pi+1)-w(Q0,Qj)|<|w(Q0,Qj)+w(Qj,Qj+1)-w(P0,Pj)|,则选择三角片PiPi+1Qj,否则选择三角片PiQjQj+1。
2)如果w(P0,Pi)+w(Pi,Pi+1)<w(Q0,Qj)+w(Qj,Qj+1),则选择三角片PiPi+1Qj,否则选择三角片PiQjQj+1。
规则1)要求加入的三角片应满足上下边之差保持最小,强调了上下层轮廓线之间的平衡。规则2)则要求加入的三角片是基于访问过的累加周长。
值得注意的事,启发式搜索方法需要一对起始的匹配点对。
按照前面(1)、(2)所述方法即可完成排序截线云的三角网格化,形成点云的三角网格。其结果如图13所示。由于在点云三角化之前已经对点云进行有效的优化和排序处理,所以其三角网化的速度很快,且由实例可知其三角网格质量也很高。
(四)图形曲面显示三角网格化后,为了更直观的观察曲面的光滑情况,本发明充分利用了OpenGL中提供的API函数显示三角形,再赋予材质属性并打上光照渲染,则就可在显示器上再现真实的原始物体。由于在构面之前已先对线进行有效的优化和排序,因此,构面的算法就不再繁冗复杂,而是简单高效,生成面的速度大大提高。这是本软件的极大优势。
图形曲面实例如图14,15所示。由仿真例子可知,本发明提供的构建曲面的思路是可行的,曲面重建的效果良好。
权利要求
1.一种三维扫描系统中的图形重构方法,其特征在于第一步对预处理后的点云进行平行切割,得到N个平行截面,再在每个平行截面的上方和下方分别对点云实施平行切割,得到N个含有平行截面的截体,将各个截体内的点云上的点向该截体内的平行截面进行垂直投影,并将该截体内平行截面点的垂直投影视为截体内平行截面与点云的截点,由各个截体内平行截面与点云的截点分别构成N条链表Li(i=1,2,...,N),在各个截体内的截点中分别选出一组处理点,该处理点是满足以下条件的截点,该条件为两处理点间的距离为点云内相邻两点之间的间距或其整数倍。第二步分别对每条链表中的处理点进行排序,该排序方法为在每条链表中找出X坐标最小的点A(xa,ya,za)和最大的点B(xb,yb,zb),采用经过直线AB垂直平行截面的所在面的平面把每条链表中的处理点剖开成两部分,并分别将该两部分处理点的X坐标值按照由小到大顺序,分别置于列表list1及列表list2中,再将列表list2中的处理点排在列表list1中的处理点之后,置于刚处理的原链表中。第三步取相邻的两条链表Li和Li+1,分别取出Li和Li+1中的第一个点和第二个点,将取出的4个点连接成一个四边形;然后再分别取出Li和Li+1两条链表中第二个点和第三个点,将取出的4各点连接成一个四边形,以此类推,直至两条链表Li和Li+1中的所有处理点都处理完毕;最后将两条链表Li和Li+1中的处理点形成的四边形沿任意一条对角线进行三角剖分。按以上操作对剩余的相邻链表所形成的截体表面进行三角剖分,形成由三角形构成的三角网格,第四步将由上述三角剖分所得到的各个三角形的三个顶点的参数值带入OpenGL中提供的API函数,就可在显示器上再现真实的原始物体。
全文摘要
本发明提出了一种三维扫描系统中的图形重构方法,针对快速测量系统获取海量数据点云,对经过过虑处理和拼接后的点云进行三角剖分,在此基础上构面,步骤如下对预处理后的点云进行平行切割,由各个平面所得的截点分别构成N条链表L
文档编号G01B11/00GK1996392SQ200610041320
公开日2007年7月11日 申请日期2006年8月14日 优先权日2006年8月14日
发明者达飞鹏, 唐琦 申请人:东南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1