本发明涉及计算机图形领域,特别涉及一种动态传输3d模型的方法。
背景技术:
计算机图形技术在现实生活中广泛应用,3d模型可以极大地帮助用户了解相关的物体,此外3d模型是一种图形文件,具有伸缩的特点,放大后模型不会变模糊,用户可以从多个角度观察模型,获取不同的信息。
3d模型的一个重要来源是图像的三维重建,医学设备的扫描,如ct扫描,会获取大量的图像数据,结合图像分割技术和三维重建技术后会获得大量的3d模型。这些模型往往很大,顶点数和面片数都比较多。扫描设备所在的科室和各科门诊医生所在的科室往往不同,模型就需要使用到网络传输。传统的3d模型的传输往往都是存储为ply等格式的文件,压缩之后再利用网络进行传输,另一端的设备需要完整获取文件之后才能解压并使用相应的软件进行渲染显示,如果模型较大,不但需要消耗大量的带宽而且不利于医生等客户实时获取模型的信息。
技术实现要素:
本发明的目的在于克服现有技术的缺点与不足,提供一种动态传输3d模型的方法,该方法解决了用户需要等待模型传输完成才能显示的问题并且减少了模型传输的数据量;该方法使用特征点提取和表面重建技术,用户可以提前获取模型的整体信息,随着顶点数据的不断获取,模型的细节信息可以使用顶点组成的点云表示,用户得到一个由整体到细节不断完善的模型。
本发明的目的通过以下的技术方案实现:
一种动态传输3d模型的方法,包括以下步骤:
1)服务端加载3d模型;
2)服务端检测3d模型的特征点并向客户端传送特征点;
3)客户端接收特征点,接收完后进行表面重建;
4)服务端对3d模型进行网格分割并按模块传送顶点数据;
5)客户端接收模块的顶点并进行局部区域重建;
6)所有模块传输并重建完成后,用qslim算法进行网格简化。
步骤1)中,所述3d模型为三角形网格,所述三角形网格的顶点是由(x,y,z)坐标的数值表示,三角形面片是由三个顶点的id(v1,v2,v3)表示。
所述三角形网格的格式包括ply、stl。
步骤2)中,所述服务端检测3d模型的特征点,是使用dog算子计算局部特征点,包括如下步骤:
2.1)计算网格的尺度
网格的尺度是应用具有均匀权重的局部过滤器计算的;对于具有尺度s的顶点
其中
2.2)计算局部密度
顶点
2.3)计算dog算子
给定网格模型的两个连续尺度,在尺度s上的dog函数
其中σ0=di,在密度不变的dog公式中有
2.4)计算网格的局部尺度和特征点
网格的局部尺度由如下公式定义:
其中,si是过滤器,c是提前定义的应用于所有特征描述符的参数,一般取3;顶点
所述步骤3),在接收到特征点之后,客户端就对其进行渲染显示,接收完所有特征点后,客户端对特征点进行表面重建,重建的算法使用screenpoisson表面重建,算法的步骤如下:
3.1)计算无向点的法线;
3.2)构建尺度函数拟合点云数据,并加入顶点的位置和梯度约束;
3.3)使用线性基函数簇对尺度函数进行离散化;
3.4)进行尺度的独立性帅选和顶点边界的计算;
3.5)构造八叉树网格和使用移动立方体算法进行表面重建;
所述步骤4),使用一种面向突出的3d网格分割算法来分割3d模型,该算法的步骤如下:
4.1)显著性顶点的提取;
4.2)显著性顶点的分组;
4.3)使用核心近似算法获取除突出部分以外的所有顶点;
4.4)对每个显著性点计算分区边界;
4.5)依据分区边界分割网格模型
模型分割后会有多个模块,可以随机逐个传输模块的顶点,也可以根据客户端的需求,按特定循序传输模块的顶点信息。
步骤5)中,所述局部区域重建的特征如下:
5.1)接收完每一个模块的顶点才进行重建;
5.2)重建的区域限制在传送来的模块的区域;
5.3)使用局部区域重建后的区域替换使用特征点重建的相应区域。
所述步骤6),具体为:服务端传送原始模型的顶点数量和面片信息给客户端,客户端根据这些信息使用qslim算法进行简化,简化到原始模型的精度,减少重建表面的顶点数和面片数。使用screenpoisson算法重建的表面,顶点数和面片数会比原始的模型多,通常多1-1.5倍的数量,所以可以使用qslim算法进行简化,还原到原始的顶点和面片数。
本发明与现有技术相比,具有如下优点和有益效果:
1、本发明只传输模型的顶点信息,大大减少了传输的数据量。
2、本发明的用户可以实时地获取相应模型的信息,包括点云和网格面。
3、本发明使用特征点提取、表面重建和网格分割等技术,让用户可以快速获取模型的整体信息,模型的细节信息可以先由点云表示,后期依据完整的顶点信息可以很快地重建原始模型的网格信息。
4、本发明提供一种动态传输3d模型的方法,将点云技术和表面重建技术结合起来。本方法只需传输模型的顶点,这大大地减少传输的数据量。结合特征点提取、表面重建和网格分割等技术,用户可以很快地获取模型的整体拓扑信息,并且随着接收的顶点数量的增多,模型的准确度和详细度都不断提高。
附图说明
图1为本发明所述一种动态传输3d模型的方法的流程图。
图2为图1所述方法的一个应用场景示意图。
图3为原始模型和分割后的各个模块的示意图。
图4为根据特征点重建的模型和加上身体主干模块的顶点后组成的模型图。
图5为特征点构成的点云和逐个加上每个分割模块顶点的变化图。
图6为特征点重建的模型和逐个加上每个分割模块顶点后重建的模型图。
图7为原始模型和简化模型的对比图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
如图1、2,本实施例所述的动态传输3d模型的方法,其包括以下步骤:
1)服务端加载一个三角网格模型,如图3左侧所示为犰狳模型,该模型包含69191个顶点和138378个三角形面片;
2)服务端检测特征点并传送,包括以下步骤:
2.1)计算网格的尺度
网格的尺度是应用具有均匀权重的局部过滤器计算的。对于具有尺度s的顶点
其中
2.2)计算局部密度
顶点
2.3)计算dog算子
给定网格模型的两个连续尺度,在尺度s上的dog函数
其中σ0=di,在密度不变的dog公式中有
2.4)计算网格的局部尺度和特征点
网格的局部尺度由如下公式定义:
其中si是过滤器,c是提前定义的应用于所有特征描述符的参数,一般取3。顶点
2.5)服务端向客户端传送特征点;
3)客户端接收特征点并重建,包括以下步骤:
接收到特征点之后,客户端就对其进行显示,接收完所有特征点后,客户端对特征点进行表面重建,重建的算法使用screenpoisson表面重建,算法的步骤如下:
3.1)计算无向点的法线;
3.2)构建尺度函数拟合点云数据,并加入顶点的位置和梯度约束;
3.3)使用线性基函数簇对尺度函数进行离散化;
3.4)进行尺度的独立性帅选和顶点边界的计算;
3.5)构造八叉树网格和使用移动立方体算法进行表面重建;
接收完所有特征点后的点云如图5左上角的图所示,点云已经可以总体显示3d模型的拓扑形状,使用screenpoisson表面重建算法重建后的模型如图4左侧所示,模型整体的拓扑形状可以很好显示出来。
4)服务端分割模型,并传送每个模块的顶点;
使用一种面向突出的3d网格分割算法来分割3d模型,该算法的步骤如下:
4.1)显著性顶点的提取;
4.2)显著性顶点的分组;
4.3)使用核心近似算法获取除突出部分意外的所有顶点;
4.4)对每个显著性点计算分区边界;
4.5)依据分区边界分割网格模型。
犰狳模型分割后一共有7个模块:左右手、左右脚、头部、身体主干以及头部,如图3右侧所示。分割完成后逐个传输每个模块的顶点,也可以先将每个模块的边界先传送给用户,用户根据喜好可以向服务端发送信息,安排每个模块的传送循序。
5)客户端接收模块顶点并进行局部重建;
局部区域重建的特征如下:
5.1)接收完每一个模块的顶点才进行重建;
5.2)重建的区域限制在传送来的模块的区域;
5.3)使用局部区域重建后的区域替换使用特征点重建的相应区域;
客户端接收到模块的顶点之后会先以点云的形式显示,接收完之后才进行局部重建,图4右侧为利用特征点进行表重建后的犰狳模型接收完身体主干模块顶点后的图。根据分割算法的边界信息取顶局部重建的区域,只重建当前接收到的模块的区域,图6下标为2的子图显示的是犰狳模型接收身体主干模块顶点后进行局部重建后的图。图6整个图演示了接收每个模块顶点后进行局部表面重建的过程,模型的每个部位逐步准确和精细。
6)模型的简化
当所有模块的顶点传送完成后,使用screenpoisson重建的顶点数和面片数都比原始模型多,根据原始模型的数据,使用qslim算法将顶点数和面片数减少到原始模型的数量。本例中犰狳模型重建的顶点数为146089,为原始模型的2.11倍;面片数为292174,为原始模型的2.11倍。使用qslim算法将模型简化的顶点数73045,面片数为146086,和原始模型十分接近。简化后的模型和原始模型的对比图7所示,左侧为原始模型,右侧为重建后的模型。简化后的模型会损失一定的精度,根据需求可以自行决定是否简化。
综上所述,在采用以上方案后,本发明为传输3d模型提供了新的方法,使用特征点检测、网格分割和重建算法的组合,为实时传输和渲染3d模型提供一种有效的手段,不但减少了传输的数据量而且提供实时渲染显示的有效方式,具有实际推广应用价值。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。