本发明涉及逆向工程技术领域,更具体地说,涉及一种三角网格的生成方法和系统。
背景技术:
长久以来,对真实物体几何尺寸的精确测量主要依赖于游标卡尺、千分尺、角度尺等测量工具的接触式测量,但是,这种测量方式无法测量形状不规则的物体的尺寸,并且,对于文物古迹等要求非接触测量的对象也存在技术瓶颈。而随着相关学科的发展以及新技术新需求的推动,三维扫描技术应运而生,该技术能够在不接触被测物体的情况下,使用三维扫描系统扫描被测物体并生成三角网格模型,该三角网格模型可以用来描述被测物体的表面特征。目前,该技术已经被广泛应用于工业设计领域的辅助制造与检验、医疗领域的手术定位与康复、游戏娱乐领域的实景建模与仿真以及考古领域的遗址保护与复原等。
其中,三角网格模型的构建过程主要包括数据采集与模型重构两部分。在数据采集过程中,需要使用三维扫描仪。如图1所示,三维扫描仪3由照射光源2和双目相机4组成,当被测物体1将照射光线反射进互成一定夹角的双目相机4时,便得到被测物体1的一组立体图像5。随着三维扫描仪3位置的不断变化,立体图像的数量不断增多,这些立体图像分别记录了被测物体1不同位置、不同角度的图像信息。在模型重构过程中,如图2所示,首先,根据三角测量原理,按照获取立体图像5的时间先后顺序,计算出每组立体图像中记录的被测物体1表面的空间曲线数据6,并将所有空间曲线数据统一到相同的坐标系中,然后,根据获取的空间曲线数据6生成三角网格模型7,并根据三角网格模型7生成三维曲面模型8,其中,三角网格模型也称为三角网格。
三角网格是描述被测物体表面特征的唯一数据,并且,贯穿于模型的整个生命周期,对三角网格的分析与认知程度以及对数据结构的处理与建模能力直接决定了三维扫描技术能否真实还原被测物体的外形结构和尺寸特征。但是,现有的三角网格的生成方法计算复杂度较大。鉴于此,我们需要寻求一种三维扫描系统中三角网格的生成方法,以最低的计算量还原被测物体的外形尺寸。
技术实现要素:
有鉴于此,本发明提供了一种三角网格的生成方法和系统,以提供一种计算量较小的三角网格生成方法。
为实现上述目的,本发明提供如下技术方案:
一种三角网格的生成方法,包括:
获取被测物体的空间曲线数据列表,所述空间曲线数据列表包含若干个空间点的三维坐标值;
将相关空间点的编号设定为编号初始值,将当前空间点的三维坐标值依次设定为所述若干个空间点的三维坐标值;
获取所述当前空间点的临近点,并将所述当前空间点到所述临近点的距离与预设的最小距离阈值和最大距离阈值进行比较,以判定所述当前空间点的类型,所述当前空间点的类型包括过疏点、过密点、增长点和回扫点;
根据所述当前空间点的类型以及相应的三角网格生成算法对所述当前空间点进行处理,以生成三角网格数据;
其中,所述三角网格数据包括三角网格的空间点数据列表、边数据列表和三角形数据列表,所述空间点数据列表用于保存构成三角网格的所有空间点的三维坐标值,所述边数据列表用于保存构成三角网格的每条线段的起始空间点在所述空间点数据列表中的编号,所述三角形数据列表用于保存构成三角网格的每个三角形的线段在所述边数据列表中的编号,所述临近点为所述空间点数据列表中到所述当前空间点的距离最小的非相关空间点。
优选的,判定所述当前空间点的类型,包括:
若所述当前空间点到所述临近点的距离小于所述最小距离阈值,则所述当前空间点的类型为过密点;
若所述当前空间点到所述临近点的距离大于所述最大距离阈值,则所述当前空间点的类型为过疏点;
若所述当前空间点到所述临近点的距离介于所述最小距离阈值和所述最大距离阈值之间,且所述当前空间点投影在所述临近点构成的所有三角形之外,则所述当前空间点的类型为增长点;
若所述当前空间点到所述临近点的距离介于所述最小距离阈值和所述最大距离阈值之间,且所述当前空间点投影在所述临近点构成的三角形之内,则所述当前空间点的类型为回扫点。
优选的,根据所述当前空间点的类型以及相应的三角网格生成算法对所述当前空间点进行处理,包括:
若所述当前空间点的类型为过密点,则将所述相关空间点的编号设置为所述编号初始值,将所述相关空间点的类型设置为类型初始值。
优选的,根据所述当前空间点的类型以及相应的三角网格生成算法对所述当前空间点进行处理,包括:
若所述当前空间点的类型为过疏点,则将所述当前空间点的三维坐标值保存到所述空间点数据列表中,将所述当前空间点的编号设置为所述当前空间点的三维坐标值在所述空间点数据列表中的编号;
判断所述相关空间点的编号是否为所述编号初始值;
若是,则将所述相关空间点的编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为过疏点;
若否,则连接所述当前空间点与所述相关空间点,并将所述相关空间点的编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为过疏点;
其中,连接所述当前空间点与所述相关空间点的具体操作为将所述当前空间点的编号和所述相关空间点的编号保存到所述边数据列表中。
优选的,根据所述当前空间点的类型以及相应的三角网格生成算法对所述当前空间点进行处理,包括:
若所述当前空间点的类型为增长点,则将所述当前空间点的三维坐标值保存到所述空间点数据列表中,将所述当前空间点的编号设置为所述当前空间点的三维坐标值在所述空间点数据列表中的编号;
判断所述相关空间点的编号是否为所述编号初始值;
若所述相关空间点的编号为所述编号初始值,则连接所述当前空间点和所述空间点数据列表中到所述当前空间点距离最近的边界点;
若所述相关空间点的编号不为所述编号初始值且所述相关空间点的类型为过疏点,则连接所述当前空间点和所述相关空间点,连接所述当前空间点和所述空间点数据列表中到所述当前空间点距离最近的边界点;
若所述相关空间点的编号不为所述编号初始值且所述相关空间点类型不为过疏点,则连接所述当前空间点和所述相关空间点,连接所述当前空间点和与所述相关空间点通过边界边相连的边界点,并生成三角形;
将所述相关空间点的编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为增长点;
其中,所述边界点为所述当前空间点的非相关空间点,且所述边界点为三角网格中至少连接有一条边界边的空间点,所述边界边为三角网格中只参与构成一个三角形或者未参与构成三角形的线段;所述生成三角形的具体操作为将连接所述当前空间点和所述相关空间点的线段在所述边数据列表中的编号、连接所述当前空间点和与所述相关空间点通过边界边相连的所述边界点的线段在所述边数据列表中的编号、连接所述相关空间点和所述边界点的所述边界边在所述边数据列表中的编号保存到所述三角形数据列表中。
优选的,根据所述当前空间点的类型以及相应的三角网格生成算法对所述当前空间点进行处理,包括:
若所述当前空间点的类型为回扫点,则将所述当前空间点的三维坐标值保存到所述空间点数据列表中,将所述当前空间点的编号设置为所述当前空间点的三维坐标值在所述空间点数据列表中的编号;
删除所述三角形数据列表中的回扫三角形,所述回扫三角形为所述当前空间点投影到的所述临近点构成的三角形,分别连接所述当前空间点和参与构成所述回扫三角形的三个空间点,并生成三个三角形;
将所述相关空间点的编号设置为所述编号初始值,将所述相关空间点的类型设置为所述类型初始值。
优选的,将相关空间点的编号设置为编号初始值时,还包括:
将所述当前空间点的编号设置为所述编号初始值,将所述当前空间点的三维坐标值设置为坐标初始值,将所述相关空间点的类型设置为所述类型初始值;
将当前空间点的三维坐标值设定为任一所述空间点的三维坐标值,并对所述当前空间点进行处理之后,还包括:
将所述当前空间点的编号设置为所述编号初始值,将所述当前空间点的三维坐标值设置为所述坐标初始值。
一种三角网格的生成系统,包括:
获取模块,用于获取被测物体的空间曲线数据列表,所述空间曲线数据列表包含若干个空间点的三维坐标值;
设定模块,用于将相关空间点的编号设定为编号初始值,将当前空间点的三维坐标值依次设定为所述若干个空间点的三维坐标值;
类型判定模块,用于获取所述当前空间点的临近点,并将所述当前空间点到所述临近点的距离与预设的最小距离阈值和最大距离阈值进行比较,以判定所述当前空间点的类型,所述当前空间点的类型包括过疏点、过密点、增长点和回扫点;
处理模块,用于根据所述当前空间点的类型以及相应的三角网格生成算法对所述当前空间点进行处理,以生成三角网格数据;
其中,所述三角网格数据包括三角网格的空间点数据列表、边数据列表和三角形数据列表,所述空间点数据列表用于保存构成三角网格的所有空间点的三维坐标值,所述边数据列表用于保存构成三角网格的每条线段的起始空间点在所述空间点数据列表中的编号,所述三角形数据列表用于保存构成三角网格的每个三角形的线段在所述边数据列表中的编号,所述临近点为所述空间点数据列表中到所述当前空间点的距离最小的非相关空间点。
优选的,当所述当前空间点到所述临近点的距离小于所述最小距离阈值时,所述类型判定模块判定所述当前空间点的类型为过密点;
当所述当前空间点到所述临近点的距离大于所述最大距离阈值时,所述类型判定模块判定所述当前空间点的类型为过疏点;
当所述当前空间点到所述临近点的距离介于所述最小距离阈值和所述最大距离阈值之间,且所述当前空间点投影在所述临近点构成的所有三角形外时,所述类型判定模块判定所述当前空间点的类型为增长点;
当所述当前空间点到所述临近点的距离介于所述最小距离阈值和所述最大距离阈值之间,且所述当前空间点投影在所述临近点构成的三角形内时,所述类型判定模块判定所述当前空间点的类型为回扫点。
优选的,所述处理模块包括:
第一处理单元,用于在所述当前空间点的类型为过密点时,将所述相关空间点的编号设置为所述编号初始值,将所述相关空间点的类型设置为类型初始值;
第二处理单元,用于在所述当前空间点的类型为过疏点时,将所述当前空间点的三维坐标值保存到所述空间点数据列表中,将所述当前空间点的编号设置为所述当前空间点的三维坐标值在所述空间点数据列表中的编号,并判断所述相关空间点的编号是否为所述编号初始值,若所述相关空间点的编号为所述编号初始值,则将所述相关空间点的编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为过疏点;若所述相关空间点的编号不为所述编号初始值,则连接所述当前空间点与所述相关空间点,将所述相关空间点的编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为过疏点;其中,连接所述当前空间点与所述相关空间点的具体操作为将所述当前空间点的编号和所述相关空间点的编号保存到所述边数据列表中;
第三处理单元,用于在所述当前空间点的类型为增长点时,将所述当前空间点的三维坐标值保存到所述空间点数据列表中,将所述当前空间点的编号设置为所述当前空间点的三维坐标值在所述空间点数据列表中的编号,并判断所述相关空间点的编号是否为所述编号初始值,若所述相关空间点的编号为所述编号初始值,则连接所述当前空间点和所述空间点数据列表中到所述当前空间点距离最近的边界点,将所述相关空间点编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为增长点,其中,所述边界点为所述当前空间点的非相关空间点,且所述边界点为三角网格中至少连接有一条边界边的空间点,所述边界边为三角网格中只参与构成一个三角形或者未参与构成三角形的线段;
若所述相关空间点编号不为所述编号初始值且所述相关空间点的类型为过疏点,则连接所述当前空间点和所述相关空间点,连接所述当前空间点和所述空间点数据列表中到所述当前空间点距离最近的边界点,将所述相关空间点的编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为增长点;
若所述相关空间点的编号不为所述编号初始值且所述相关空间点类型不为过疏点,则连接所述当前空间点和所述相关空间点,连接所述当前空间点和与所述相关空间点通过边界边相连的边界点,并生成三角形,将所述相关空间点的编号设置为所述当前空间点的编号,将所述相关空间点的类型设置为增长点;其中,所述生成三角形的具体操作为将连接所述当前空间点和所述相关空间点的线段在所述边数据列表中的编号、连接所述当前空间点和与所述相关空间点通过边界边相连的所述边界点的线段在所述边数据列表中的编号、连接所述相关空间点和所述边界点的所述边界边在所述边数据列表中的编号保存到所述三角形数据列表中;
第四处理单元,用于在所述当前空间点的类型为回扫点时,将所述当前空间点的三维坐标值保存到所述空间点数据列表中,将所述当前空间点的编号设置为所述当前空间点的三维坐标值在所述空间点数据列表中的编号,删除所述三角形数据列表中的回扫三角形,所述回扫三角形为所述当前空间点投影到的所述临近点构成的三角形,分别连接所述当前空间点和参与构成所述回扫三角形的三个空间点,并生成三个三角形,将所述相关空间点的编号设置为所述编号初始值,将所述相关空间点的类型设置为所述类型初始值。
优选的,当所述设定模块将所述相关空间点的编号设置为所述编号初始值时,所述设定模块还用于将所述当前空间点的编号设置为所述编号初始值,将所述当前空间点的三维坐标值设置为坐标初始值,将所述相关空间点的类型设置为所述类型初始值;
将当前空间点的三维坐标值设定为任一所述空间点的三维坐标值,并对所述当前空间点进行处理之后,所述设定模块还用于将所述当前空间点的编号设置为所述编号初始值,将所述当前空间点的三维坐标值设置为所述坐标初始值。
与现有技术相比,本发明所提供的技术方案具有以下优点:
本发明所提供的三角网格的生成方法和系统,不是在获得构成三角网格的所有空间曲线数据列表并统一到相同的坐标系之后,再生成三角网格数据,而是按照空间曲线数据列表的获取顺序对空间曲线数据列表逐个进行处理来实时生成三角网格数据,其中,在对任一空间曲线数据列表进行处理的过程中,根据当前空间点与临近点的相对位置关系将当前空间点分为过疏点、过密点、增长点以及回扫点,根据当前空间点的类型以及相应的三角网格生成算法对当前空间点进行处理。与传统的三角网格生成方法相比,本发明提供的三角网格生成方法计算复杂性小、计算效率高、可修复性好。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为现有的三维扫描系统的数据采集系统的结构示意图;
图2为现有的三维扫描系统的模型重构系统的结构示意图;
图3为本发明实施例提供的三角网格生成方法的流程图;
图4为本发明实施例提供的过密点的结构示意图;
图5为本发明实施例提供的过疏点的结构示意图;
图6为本发明实施例提供的增长点的结构示意图;
图7为本发明实施例提供的回扫点的结构示意图;
图8为本发明实施例提供的过密点的处理结果示意图;
图9为本发明实施例提供的相关空间点编号不为0的过疏点的处理结果示意图;
图10为本发明实施例提供的相关空间点编号为0的增长点的处理结果示意图;
图11为本发明实施例提供的相关空间点编号不为0且相关空间点类型为过疏点的增长点的处理结果示意图;
图12为本发明实施例提供的相关空间点编号不为0且相关空间点类型不为过疏点的增长点处理结果示意图;
图13为本发明实施例提供的回扫点的处理结果示意图;
图14为本发明实施例提供的三角网格生成系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种三角网格的生成方法,如图3所示,该方法包括:
S101:获取被测物体的空间曲线数据列表,所述空间曲线数据列表包含若干个空间点的三维坐标值;
本发明中通过三维扫描系统获取被测物体的多个空间曲线数据列表,其中,空间曲线数据列表中包含若干空间点的三维坐标值,所述若干空间点的三维坐标值在空间曲线数据列表中的存储顺序按照空间曲线的连接顺序依次保存。本实施例中,按照三维扫描系统获取空间曲线数据列表的时间先后顺序,依次获取并处理每个空间曲线数据列表。在处理任意一个空间曲线数据列表的过程中,按照空间曲线数据列表中若干个空间点的存储顺序依次处理空间点。
S102:将相关空间点的编号设定为编号初始值,将当前空间点的三维坐标值依次设定为所述若干个空间点的三维坐标值;
在处理任一空间曲线数据列表之前,都需要进行数据的初始化,即将相关空间点的编号设置为编号初始值,当然,在一个具体实施例中,在进行数据的初始化时,还需将当前空间点的编号设置为编号初始值,将当前空间点的三维坐标值设置为坐标初始值,将相关空间点的类型设置为类型初始值。
本实施例中,以编号初始值为0,坐标初始值为(0,0,0),类型初始值为“无”为例进行说明,即在处理任一空间曲线数据列表之前,需要将当前空间点的编号设置为0,将当前空间点的三维坐标值设置为(0,0,0),将相关空间点的编号设置为0,将相关空间点的类型设置为无。
其中,在处理任一空间曲线数据列表的过程中,先按照存储顺序提取第一个空间点,将当前空间点的三维坐标值设定为第一个空间点的三维坐标值,然后对当前空间点进行类型判定等处理,处理完成后,再提取第二个空间点,将当前空间点的三维坐标值设定为第二个空间点的三维坐标值,然后对当前空间点进行类型判定等处理,处理完成后,再提取第三个空间点,以此类推。
S103:获取当前空间点的临近点,并将当前空间点到临近点的距离与预设的最小距离阈值和最大距离阈值进行比较,以判定当前空间点的类型,当前空间点的类型包括过疏点、过密点、增长点和回扫点;
在处理任一空间点的过程中,先将当前空间点的三维坐标值设定为该空间点的三维坐标值,假设该空间点的三维坐标值为(X1,Y1,Z1),则当前空间点的三维坐标值即为(X1,Y1,Z1),之后获取当前空间点的临近点,该临近点为三角网格的空间点数据列表中到当前空间点的距离最小的非相关空间点,并将当前空间点到临近点的距离与预设的最小距离阈值和最大距离阈值进行比较,以判定当前空间点的类型,所述当前空间点的类型包括过疏点、过密点、增长点和回扫点。
其中,在获取临近点后,可根据临近点的三维坐标值以及当前空间点的三维坐标值(X1,Y1,Z1)计算出当前空间点到临近点的距离。最小距离阈值和最大距离阈值是根据建模精度需求预先设定的,其中,最大距离阈值大于最小距离阈值。基于此,可根据当前空间点到临近点的距离与最大距离阈值和最小距离阈值的比较结果对当前空间点的类型进行判定。
将当前空间点到临近点的距离与预设的最小距离阈值和最大距离阈值进行比较后,若当前空间点到临近点的距离小于最小距离阈值,则当前空间点的类型为过密点;若当前空间点到临近点的距离大于最大距离阈值,则当前空间点的类型为过疏点;若当前空间点到临近点的距离介于最小距离阈值和最大距离阈值之间,且当前空间点投影在临近点构成的所有三角形之外,则当前空间点的类型为增长点;若当前空间点到临近点的距离介于最小距离阈值和最大距离阈值之间,且当前空间点投影在临近点构成的三角形之内,则当前空间点的类型为回扫点。
如图4所示,点A1为当前空间点,点B1为整个三角网格中或三角网格的空间点数据列表中距离当前空间点A1最近的非相关空间点,即点B1为当前空间点A1的临近点。由于当前空间点A1到临近点B1的距离小于最小距离阈值,因此,将当前空间点A1判定为过密点。
如图5所示,点A2为当前空间点,点B2为整个三角网格或三角网格的空间点数据列表中距离当前空间点A2最近的非相关空间点,即点B2为当前空间点A2的临近点。由于当前空间点A2到临近点B2的距离大于最大距离阈值,因此,将当前空间点A2判定为过疏点。
如图6所示,点A3为当前空间点,点B3为整个三角网格中或三角网格的空间点数据列表中距离当前空间点A3最近的非相关空间点,即点B3为当前空间点A3的临近点。由于当前空间点A3到临近点B3的距离介于最小距离阈值和最大距离阈值之间,且,当前空间点A3投影在临近点B3已参与构成的所有三角形的外边,因此,将当前空间点A3判定为增长点。
如图7所示,点A4为当前空间点,点B4为整个三角网格中或三角网格的空间点数据列表中距离当前空间点A4最近的非相关空间点,即点B4为当前空间点A4的临近点。由于当前空间点A4到临近点B4的距离介于最小距离阈值和最大距离阈值之间,且,当前空间点A4投影在临近点B4已参与构成的任一三角形内,因此,将当前空间点A4判定为回扫点。
需要说明的是,将当前空间点的三维坐标值设定为第一个空间曲线数据列表中的第一个空间点的三维坐标值时,由于三角网格的空间点数据列表中还未保存数据,无法获取当前空间点的临近点,因此,直接将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为该三维坐标值在空间点数据列表中的编号。之后,在将当前空间点的三维坐标值设定为第一个空间曲线数据列表中的其他空间点的三维坐标值时,再从三角网格的空间点数据列表中查找当前空间点的临近点。
此外,还需要说明的是,本实施例中的当前空间点和相关空间点为动态变量,当对某一空间点处理完成后,会将该空间点的编号和类型等信息设置为相关空间点的信息,之后再将当前空间点的三维坐标值设定为下一空间点的三维坐标值。而非相关空间点是指三角网格的空间点数据列表中,除相关空间点之外的空间点。
S104:根据当前空间点的类型以及相应的三角网格生成算法对当前空间点进行处理,以生成三角网格数据;
其中,三角网格数据包括三角网格的空间点数据列表、边数据列表和三角形数据列表,空间点数据列表用于保存构成三角网格的所有空间点的三维坐标值,边数据列表用于保存构成三角网格的每条线段的起始空间点在空间点数据列表中的编号,即边数据列表用于保存构成三角网格的所有线段中任一线段的起始空间点在空间点数据列表中的编号,三角形数据列表用于保存构成三角网格的每个三角形的线段在边数据列表中的编号,即三角形数据列表用于保存构成三角网格的所有三角形中任一三角形的线段在边数据列表中的编号。
具体地,根据当前空间点的类型以及相应的三角网格生成算法对当前空间点进行处理,包括:
若当前空间点的类型为过密点,则将相关空间点的编号设置为编号初始值,如设置为0,将相关空间点的类型设置为类型初始值,如设置为无。
若当前空间点的类型为过密点,则说明当前空间点的临近点构建的三角网格已满足精度需求,此时,不需将当前空间点与临近点构建新的三角形,从而可以放弃当前空间点的三维坐标值,即放弃空间曲线数据列表中与当前空间点对应的空间点。其中,将相关空间点的编号设置为编号初始值,如设置为0,将相关空间点的类型设置为类型初始值,如设置为无,就相当于放弃了该空间点。如图4和图8所示,对图4中过密点A1进行处理的结果实质为放弃处理该空间点。
若当前空间点的类型为过疏点,则将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号;
判断相关空间点的编号是否为编号初始值即是否为0;
若相关空间点的编号为编号初始值即为0,则将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为过疏点;
若相关空间点的编号不为编号初始值即不为0,则连接当前空间点与相关空间点,将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为过疏点;其中,连接当前空间点与相关空间点的具体操作为将当前空间点的编号和相关空间点的编号保存到边数据列表中,即将当前空间点的三维坐标值对应的空间点与相关空间点的三维坐标值对应的空间点的连接关系保存在边数据列表中,之后在生成三角网格模型时,这两个空间点之间会通过线段连接。
图5为相关空间点编号为编号初始值即为0的过疏点的处理结果示意图,由于相关空间点的编号为0即相关空间点不存在,因此,不需要连接当前空间点和相关空间点,只将当前空间点保存到三角网格数据中即可,即将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号。之后,将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为过疏点,以便将当前空间点的三维坐标值设定为下一空间点的三维坐标值时,建立当前空间点与相关空间点的连接关系。
图9为相关空间点编号不为编号初始值即不为0的过疏点的处理结果示意图,图9中点A5为被判定为过疏点的当前空间点,点B5为整个三角网格中距离点A5最近的非相关空间点,即点B5为点A5的临近点,点C5为相关空间点,在该情况下,不仅要将当前空间点A5保存到三角网格数据中,即将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号,而且,要连接当前空间点A5和相关空间点C5,即将当前空间点A5和相关空间点C5的编号保存到边数据列表中,图9中虚线表示点A5和点C5的连接关系。
若当前空间点的类型为增长点,则将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号;
判断当前空间点的相关空间点的编号是否为编号初始值即是否为0;
若相关空间点的编号为编号初始值即为0,则连接当前空间点和空间点数据列表中到当前空间点距离最近的边界点,之后将相关空间点编号设置为当前空间点的编号,将相关空间点的类型设置为增长点;
若相关空间点编号不为编号初始值即不为0且相关空间点的类型为过疏点,则连接当前空间点和相关空间点,连接当前空间点和空间点数据列表中到当前空间点距离最近的边界点,之后将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为增长点;
若相关空间点的编号不为编号初始值即不为0且相关空间点的类型不为过疏点,则连接当前空间点和相关空间点,连接当前空间点和与相关空间点通过边界边相连的边界点,并生成三角形,之后将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为增长点;
其中,边界点为当前空间点的非相关空间点,且边界点为三角网格中至少连接有一条边界边的空间点,边界边为三角网格中只参与构成一个三角形或者未参与构成三角形的线段;生成三角形的具体操作为将连接当前空间点和相关空间点的线段在边数据列表中的编号、连接当前空间点和与相关空间点通过边界边相连的边界点的线段在边数据列表中的编号、连接相关空间点和边界点的边界边在边数据列表中的编号保存到三角形数据列表中。
图10为相关空间点编号为编号初始值即为0的增长点的处理结果示意图,图10中点A6为被判定为增长点的当前空间点,点D6为三角网格的空间点数据列表中到点A6距离最近的边界点,在该情况下,保存当前空间点A6,即将当前空间点A6的三维坐标值保存到空间点数据列表中,并连接当前空间点A6和边界点D6,即将当前空间点A6和边界点D6的编号保存到边数据列表中,图10中虚线表示点A6和点D6的连接关系。
图11为相关空间点编号不为编号初始值即不为0且相关空间点类型为过疏点的增长点处理结果示意图,图11中点A7为被判定为增长点的当前空间点,点C7为相关空间点,点D7为三角网格的空间点数据列表中到当前空间点A7距离最近的边界点,在该情况下,保存当前空间点A7,即将当前空间点A7的三维坐标值保存到空间点数据列表中,并同时连接当前空间点A7和相关空间点C7以及当前空间点A7和边界点D7,即将当前空间点A7和相关空间点C7的编号保存到边数据列表中,将当前空间点A7和边界点D7的编号保存到边数据列表中,图11中虚线表示当前空间点A7和相关空间点C7以及当前空间点A7和边界点D7的连接关系。
图12为相关空间点编号不为编号初始值即不为0且相关空间点类型不为过疏点的增长点处理结果示意图,图12中点A8为被判定为增长点的当前空间点,点C8为相关空间点,点E8为与相关空间点C8通过边界边相连的边界点,在该情况下,保存当前空间点A8,即将当前空间点A8的三维坐标值保存到空间点数据列表中,并同时连接当前空间点A8和相关空间点C8以及当前空间点A8和边界点E8,即将当前空间点A8和相关空间点C8的编号保存到边数据列表中,将当前空间点A8和边界点E8的编号保存到边数据列表中,然后将连接当前空间点A8和相关空间点C8的线段在边数据列表中的编号、连接当前空间点A8和边界点E8的线段在边数据列表中的编号、连接相关空间点C8和边界点E8的边界边在边数据列表中的编号保存到三角形数据列表中,生成△A8C8E8。图12中虚线表示当前空间点A8和相关空间点C8以及当前空间点A8和边界点E8的连接关系,点A8、点C8和点E8构成一个空间三角形。
若当前空间点的类型为回扫点,此时,三角形数据列表中的回扫三角形即为当前空间点投影到的临近点构成的三角形,将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号,删除三角形数据列表中的回扫三角形,分别连接当前空间点和参与构成回扫三角形的三个空间点,并生成三个三角形,将相关空间点的编号设置为编号初始值即为0,将相关空间点的类型设置为类型初始值即设置为无。
图13为回扫点的处理结果示意图,图13中点A9为被判定为回扫点的当前空间点,回扫三角形为△F9G9H9,在该情况下,删除三角网格的三角形数据列表中保存的△F9G9H9的信息即连接关系,保存当前空间点A9,即将当前空间点A9的三维坐标值保存到空间点数据列表中,连接当前空间点A9和构成回扫三角形的第一个空间点F9,连接当前空间点A9和构成回扫三角形的第二个空间点G9,连接当前空间点A9和构成回扫三角形的第三个空间点H9,即将当前空间点A9和第一个空间点F9的编号保存到边数据列表中,将当前空间点A9和第二个空间点G9的编号保存到边数据列表中,将当前空间点A9和第三个空间点H9的编号保存到边数据列表中,生成△A9F9G9、△A9F9H9和△A9G9H9这三个空间三角形,并保存到三角网格的三角形数据列表中,即将连接当前空间点A9和第一个空间点F9的线段在边数据列表中的编号、连接当前空间点A9和第二个空间点G9的线段在边数据列表中的编号、连接第一个空间点F9和第二个空间点G9的线段在边数据列表中的编号保存到三角形数据列表中,将连接当前空间点A9和第一个空间点F9的线段在边数据列表中的编号、连接当前空间点A9和第三个空间点H9的线段在边数据列表中的编号、连接第一个空间点F9和第三个空间点H9的线段在边数据列表中的编号保存到三角形数据列表中,将连接当前空间点A9和第二个空间点G9的线段在边数据列表中的编号、连接当前空间点A9和第三个空间点H9的线段在边数据列表中的编号、连接第二个空间点G9和第三个空间点H9的线段在边数据列表中的编号保存到三角形数据列表中。
对该空间点处理完成后,将当前空间点编号设置为编号初始值即设置为0,将当前空间点坐标值设置为坐标初始值即设置为(0,0,0),按照存储顺序提取下一个空间点,并重复S103至S104的步骤,直到该空间曲线数据列表中没有空间点为止。
之后,按照三维扫描系统获取空间曲线数据列表的时间先后顺序,提取下一个空间曲线数据列表,并重复步骤S102至S104。直到所有的空间曲线数据列表都处理完成后,三角网格数据也就生成完成,即可根据三角网格数据生成三角网格,之后根据三角网格模型生成三维曲面模型即可获得被测物体的几何尺寸等表面特征。
下面以空间曲线数据列表中的若干个空间点的三维坐标值为(X1,Y1,Z1)、(X2,Y2,Z2)…..(Xn,Yn,Zn)为例,对三角网格的生成方法进行说明,其中,n为大于2的整数。
先进行数据初始化,即将当前空间点的编号设置为0,当前空间点坐标值设置为(0,0,0),将相关空间点的编号设置为0,相关空间点的类型设置为无。然后将当前空间点的三维坐标值设定为空间点(X1,Y1,Z1)的三维坐标值,此时,当前空间点的三维坐标值为(X1,Y1,Z1)。
从三角网格的空间点数据列表中获取当前空间点的临近点,假设临近点的三维坐标为(x1,y1,z1),根据坐标值(X1,Y1,Z1)和(x1,y1,z1)计算出当前空间点到临近点的距离为S,并将计算出的距离S与预设的最小距离阈值D1和最大距离阈值D2进行比较,若S<D1,则当前空间点的类型为过密点;若S>D2,则当前空间点的类型为过疏点;若D1<S<D2,则根据已生成的三角网格判断当前空间点在三角网格中的投影即当前空间点在三角网格中的位置是否在临近点构成的所有三角形之外,如果是,则当前空间点的类型为增长点,如果否,则当前空间点的类型为回扫点。
若当前空间点的类型为过密点,则将相关空间点的编号设置为0,将相关空间点的类型设置为无。
若当前空间点的类型为过疏点,则将当前空间点的三维坐标值(X1,Y1,Z1)保存到空间点数据列表中,假设该三维坐标值(X1,Y1,Z1)保存到空间点数据列表中的编号为10,则将当前空间点的编号设置为10,之后判断相关空间点的编号是否为0,若为0,则将相关空间点的编号设置为10,将相关空间点的类型设置为过疏点,若不为0,假设相关空间点的编号为9,则连接当前空间点与相关空间点,即将当前空间点的编号10和相关空间点的编号9保存到边数据列表中,之后将相关空间点的编号设置为10,将相关空间点的类型设置为过疏点。基于此,在将当前空间点的三维坐标值设定为下一空间点的三维坐标值时,相关空间点的编号为10,而不为0。
若当前空间点的类型为增长点,则将当前空间点的三维坐标值(X1,Y1,Z1)保存到空间点数据列表中,假设该三维坐标值(X1,Y1,Z1)保存到空间点数据列表中的编号为10,则将当前空间点的编号设置为10,之后判断相关空间点的编号是否为0。
若为0,则从三角网格的空间点数据列表中获取到当前空间点距离最近的边界点,其中,边界点为三角网格中至少连接有一条边界边的空间点,边界边为三角网格中只参与构成一个三角形或者未参与构成三角形的线段,然后连接当前空间点和边界点,即将当前空间点的编号10和边界点在空间点数据列表中的编号保存到边数据列表中,之后将相关空间点的编号设置为10,将相关空间点的类型设置为增长点;
若不为0,且相关空间点的类型为过疏点,例如,在上一空间点的处理过程中,将相关空间点的编号设定为了9,类型设定为了过疏点,则从三角网格的空间点数据列表中获取到当前空间点距离最近的边界点,连接当前空间点和相关空间点,连接当前空间点和边界点,即将当前空间点的编号10和相关空间点的编号9保存到边数据列表中,将当前空间点的编号10和边界点在空间点数据列表中的编号保存到边数据列表中,之后将相关空间点的编号设置为10,将相关空间点的类型设置为增长点;
若不为0,且相关空间点的类型不为过疏点,例如,相关空间点的编号为9,类型为增长点,则从三角网格的空间点数据列表中获取与相关空间点通过边界边相连的边界点,连接当前空间点和相关空间点,连接当前空间点和与相关空间点通过边界边相连的边界点,即将当前空间点的编号10和相关空间点的编号9保存到边数据列表中,将当前空间点的编号10和与相关空间点通过边界边相连的边界点在空间点数据列表中的编号保存到边数据列表中,并将连接当前空间点和相关空间点的线段在边数据列表中的编号、连接当前空间点和与相关空间点通过边界边相连的边界点的线段在边数据列表中的编号、连接相关空间点和边界点的边界边在边数据列表中的编号保存到三角形数据列表中,以生成三角形,之后将相关空间点的编号设置为10,将相关空间点的类型设置为增长点。
若当前空间点的类型为回扫点,将当前空间点的三维坐标值(X1,Y1,Z1)保存到空间点数据列表中,假设该三维坐标值(X1,Y1,Z1)保存到空间点数据列表中的编号为10,则将当前空间点的编号设置为10,之后删除三角形数据列表中的回扫三角形的信息,分别连接当前空间点和参与构成回扫三角形的三个空间点并生成三个三角形,之后将相关空间点的编号设置为0,将相关空间点的类型设置为无。
将当前空间点编号设置为0,将当前空间点坐标值设置为(0,0,0)。
之后,按照存储顺序提取下一个空间点(X2,Y2,Z2),将当前空间点的三维坐标值设定为该空间点的三维坐标值,此时,当前空间点坐标值设置为(X2,Y2,Z2),进行后续步骤,直到该空间曲线数据列表中的没有空间点为止。然后获取下一个空间曲线数据列表,重复上述步骤。
本发明实施例提供的三维网格生成方法,不是在获得构成三角网格的所有空间曲线数据列表并统一到相同的坐标系之后,再生成三角网格数据,而是按照空间曲线数据列表的获取顺序对空间曲线数据列表逐个进行处理来实时生成三角网格数据,其中,在对任一空间曲线数据列表进行处理的过程中,根据当前空间点与临近点的相对位置关系将当前空间点分为过疏点、过密点、增长点以及回扫点,根据当前空间点的类型以及相应的三角网格生成算法对当前空间点进行处理。与传统的三角网格生成方法相比,本发明提供的三角网格生成方法计算复杂性小、计算效率高、可修复性好。
本发明实施例还提供了一种三角网格的生成系统,如图14所示,包括获取模块1、设定模块2、类型判定模块2和处理模块3。
其中,获取模块1,用于获取被测物体的空间曲线数据列表,该空间曲线数据列表包含若干个空间点的三维坐标值;
设定模块2,用于将相关空间点的编号设定为编号初始值,将当前空间点的三维坐标值依次设定为所述若干个空间点的三维坐标值;
类型判定模块3,用于获取当前空间点的临近点,并将当前空间点到临近点的距离与预设的最小距离阈值和最大距离阈值进行比较,以判定当前空间点的类型,当前空间点的类型包括过疏点、过密点、增长点和回扫点;
处理模块4,用于根据当前空间点的类型以及相应的三角网格生成算法对当前空间点进行处理,以生成三角网格数据;
其中,三角网格数据包括三角网格的空间点数据列表、边数据列表和三角形数据列表,空间点数据列表用于保存构成三角网格的所有空间点的三维坐标值,边数据列表用于保存构成三角网格的每条线段的起始空间点在空间点数据列表中的编号,三角形数据列表用于保存构成三角网格的每个三角形的线段在边数据列表中的编号,临近点为空间点数据列表中到当前空间点的距离最小的非相关空间点。
本发明中通过三维扫描系统获取被测物体的多个空间曲线数据列表,多个空间曲线数据列表按照三维扫描系统获取的时间先后顺序存储,获取模块1也按照时间先后顺序依次获取空间曲线数据列表。其中,空间曲线数据列表中包含若干空间点的三维坐标值,若干空间点的三维坐标值在空间曲线数据列表中的存储顺序按照空间曲线的连接顺序依次保存。之后,设定模块2也按照存储顺序从空间曲线数据列表中依次提取空间点,并对空间点的类型进行判定。
具体地,在当前空间点到临近点的距离小于最小距离阈值时,类型判定模块3判定当前空间点的类型为过密点;
在当前空间点到临近点的距离大于最大距离阈值时,类型判定模块3判定当前空间点的类型为过疏点;
在当前空间点到临近点的距离介于最小距离阈值和最大距离阈值之间,且当前空间点投影在临近点构成的所有三角形外时,类型判定模块3判定当前空间点的类型为增长点;
在当前空间点到临近点的距离介于最小距离阈值和最大距离阈值之间,且当前空间点投影在临近点构成的三角形内时,类型判定模块3判定当前空间点的类型为回扫点。
并且,处理模块4包括第一处理单元、第二处理单元、第三处理单元和第四处理单元。
其中,第一处理单元,用于在当前空间点的类型为过密点时,将相关空间点的编号设置为编号初始值,将相关空间点的类型设置为类型初始值;
第二处理单元,用于在当前空间点的类型为过疏点时,将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号,并判断相关空间点的编号是否为编号初始值,若相关空间点的编号为编号初始值,则将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为过疏点;若相关空间点的编号不为编号初始值,则连接当前空间点与相关空间点,将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为过疏点;其中,连接当前空间点与相关空间点的具体操作为将当前空间点的编号和相关空间点的编号保存到边数据列表中;
第三处理单元,用于在当前空间点的类型为增长点时,将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号,并判断相关空间点的编号是否为编号初始值,若相关空间点的编号为编号初始值,则连接当前空间点和空间点数据列表中到当前空间点距离最近的边界点,将相关空间点编号设置为当前空间点的编号,将相关空间点的类型设置为增长点,其中,边界点为当前空间点的非相关空间点,且边界点为三角网格中至少连接有一条边界边的空间点,边界边为三角网格中只参与构成一个三角形或者未参与构成三角形的线段;若相关空间点编号不为编号初始值且相关空间点的类型为过疏点,则连接当前空间点和相关空间点,连接当前空间点和空间点数据列表中到当前空间点距离最近的边界点,将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为增长点;若相关空间点的编号不为编号初始值且相关空间点类型不为过疏点,则连接当前空间点和相关空间点,连接当前空间点和与相关空间点通过边界边相连的边界点,并生成三角形,将相关空间点的编号设置为当前空间点的编号,将相关空间点的类型设置为增长点;其中,生成三角形的具体操作为将连接当前空间点和相关空间点的线段在边数据列表中的编号、连接当前空间点和与相关空间点通过边界边相连的边界点的线段在边数据列表中的编号、连接相关空间点和边界点的边界边在边数据列表中的编号保存到三角形数据列表中;
第四处理单元,用于在当前空间点的类型为回扫点时,将当前空间点的三维坐标值保存到空间点数据列表中,将当前空间点的编号设置为当前空间点的三维坐标值在空间点数据列表中的编号,删除三角形数据列表中的回扫三角形,回扫三角形为当前空间点投影到的临近点构成的三角形,分别连接当前空间点和参与构成回扫三角形的三个空间点,并生成三个三角形,将相关空间点的编号设置为编号初始值,将相关空间点的类型设置为类型初始值。
除此之外,当设定模块将相关空间点的编号设置为编号初始值时,设定模块还用于将当前空间点的编号设置为编号初始值,将当前空间点的三维坐标值设置为坐标初始值,将相关空间点的类型设置为类型初始值;
将当前空间点的三维坐标值设定为任一所述空间点的三维坐标值,并对当前空间点进行处理之后,设定模块还用于将当前空间点的编号设置为编号初始值,将当前空间点的三维坐标值设置为坐标初始值。
本发明实施例提供的三维网格生成系统,不是在获得构成三角网格的所有空间曲线数据列表并统一到相同的坐标系之后,再生成三角网格数据,而是按照空间曲线数据列表的获取顺序对空间曲线数据列表逐个进行处理来实时生成三角网格数据,其中,在对任一空间曲线数据列表进行处理的过程中,根据当前空间点与临近点的相对位置关系将当前空间点分为过疏点、过密点、增长点以及回扫点,根据当前空间点的类型以及相应的三角网格生成算法对当前空间点进行处理。与传统的三角网格生成方法相比,本发明提供的三角网格生成方法计算复杂性小、计算效率高、可修复性好。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。