陈新华,戴文伯
(中交疏浚技术装备国家工程研究中心有限公司,上海 201208)
随着测量技术的飞速发展,点云数据获取的方式越来越多,越来越先进[1]。如今在陆地上获取点云数据主要是通过激光扫描仪器[2],而水下航道点云数据主要依靠单波束和多波束声呐设备来获得[3-4]。声呐设备一般安装在船舶或潜艇上,采集点云数据的精度、密度除跟设备的精度有关外还跟设备的采样周期、船舶航行速度有关。随着多波束技术的快速发展,航道点云数据在密度和体量上都有很大提升。声呐扫描获取的点云数据虽数据量大,但冗余和噪声少,且排列规则。根据声呐采集点云数据的特点,本文创新地采用基于Unity3D的地形处理技术,将离散的航道点云数据可视化地构建成逼真的水下航道。并将该技术成功应用于“耙吸挖泥船模拟仿真平台”项目中。
Unity3D是一个全面整合的专业3D引擎,在虚拟现实、仿真计算、3D重现上有着广泛的应用。该3D引擎具有丰富的组件模块,如地形、物理、渲染组件等。Unity3D的可视化编程界面能完成各种复杂的开发工作,高效的脚本编辑、模型的自动瞬时导入、一键发布、多平台开发和部署,开发者不需要了解图形底层细节相关知识就能开发出三维程序。Unity3D地形处理模块底层实现原理主要是基于高度图。高度图是由二维数组组成的一组高度数据[5]。地形的高度就是由一系列高度不同的网格组成,数组中每个元素的索引值用来定位网格,而所存储的值就是网格的高度。Unity3D可手动设置地形的长度和宽度,也可以通过脚本来创建地形,设置长度、宽度和高度。
Unity3D虽然功能强大,但在点云数据处理方面一直是空白,没有组件可方便地构建场景。对航道数据可视化、地质地形建模、仿真模拟系统开发形成了一定的瓶颈。本文将航道点云数据与Unity3D地形处理模块相结合,开发一套可以高效处理航道点云数据的基础组件,可快速实现点云数据的可视化。
采样设备采集物体表面的空间位置坐标信息,得到1个点的集合,称之为“点云”[6]。该集合能离散地表示1个物体的外表面形状。除(x,y,z)代表的几何位置信息外,还可以表示1个点的RGB颜色、灰度值、深度以及分割结果等。点云数据的格式如下:
PointCloud={x,y,z,r,g,b,灰度值,深度,…}
点云数据重建是逆向工程的一个分支,被广泛地应用于计算机辅助设计与制造、可视化仿真系统场景建模、地理信息系统中地形地质建模[7-9]。航道点云数据空间位置坐标信息是基于大地坐标系进行测量得到,可以根据大地坐标系、地图投影、投影坐标系推算出各点处的经纬度信息。
航道点云数据的处理流程分为数据读取、数据预处理、三角网格构建、高度插值、渲染等。本文处理的航道点云数据集合只包含几何位置数据,数据存储于文本文件中,每行3个数据,分别表示1个点的x,y,z的值。以流的方式读取点云数据,将数据放入内存。为了快速构建三角网格,点云数据分别按照X轴、Z轴排序,确定地形在X、Z轴上的最小、最大值,分别为Min X,Max X,Min Z,Max Z从而得到整个地形区域的整体范围。同时,能得到地形的中心坐标为:
为了提升地形加载速度,将整块地形加载分割成Column×Row区域块,程序将根据视野范围变化动态地决定那些区域块进行加载与显示。每个区域块的分辨率为Resolution,各个分辨率对应的实际物理长度值为CeilSize,则可得每一区域块的长度为:
设置该地形块数据初始化为无效数据Valid-DataMask。取一区域包含所有顶点,该区域的大小可以通过现有区域的最小值确定:
最小值减去1个正数,使得其值更小;整个区域块的长宽都进行适当放大,这样使得整个区域面积比实际区域面积稍大,可以包含所有区域范围内的点云数据。
将该区域划分成AreaRow×AreaColumn块。将该区域平分成N块,则对应的AreaRow和
N的取值决定了矩形块的大小,同时也决定了区域块中所要处理的三角形的数量。对XZ平面上排序好的点云数据进行二维Delauney三角网剖分。将剖分好的三角网格数据写入对应的区域块中。对该区域块的三角网格数据进行插值,对需要进行插值的点进行判断,看该点是否在区域的三角网格中,如果在三角网格中,则该点的高度值依据对应三角形的3个高度值插值获得,该值记为Height。其插值依据线性插值,插值公式如下所示:
插值完成,将无效数据设置成对应的高度值,最后将地形的区域Row、Column、CeilSize、resolution、Height、ValidDataMask序列化写入文件。
航道点云数据经算法处理后,数据序列化存入文件中,在Unity3D程序中反序列化读取对应数据,并将数据传递给地形对象对应的地形数据中,同时,对该区域块数据进行纹理贴图,使得构建的地形更真实。将该构建的地形生成预设体,该预设体可放入不同的Unity3D工程中。
在项目中添加预设体文件,并添加环境光,根据地形场景CenterX,CenterZ中心位置,设置虚拟相机位置于中心位置,添加角色组件,就可以在三维航道地形数据上进行漫游操作。操作者可以全景观看整个航道的概况,也可细致地观看每一处细节。点云数据从数据读取到实现三维可视化的主要流程见图1。
图1 航道点云数据可视化处理流程Fig.1 Visual handling flow of waterway point cloud data
航道点云数据可视化处理的过程中主要关心如何设置每个地形块的分辨率、各个分辨率代表的实际物理长度、容纳三角格网区域块大小的划分等。
本文实验的点云数据是长江口航道点云数据,以浮点数存储形式储存,每行3个数据,分别对应顶点的X、Y、Z。实验操作电脑系统为Win7 64位,硬件配置为gtx960显卡、16 G内存、i7-4790CPU处理器。实验分2组进行。第1组为同等划分精度,研究数据量与显示帧率的关系;第2组为同等数据量的情况下,研究不同划分精度与显示帧率的关系。
实验在同等精度、不同数据量的情况下,点云数据从读取到最后显示所花费的时间、显示帧率情况,见表1。
表1 相同划分精度、不同数据量花费时间与帧率情况Table1 The costing time and frame rate of the same division precision and different data
实验在79 224 kb的数据量的基础上,按照不同划分精度,研究程序从加载到显示所花费的时间以及显示帧率的情况,见表2。
表2 相同数据、不同划分精度所花费时间与帧率情况Table1 2 The costing timeand frame rate of the samedata and different division precision
基于Unity3D实现的相同数据、不同划分精度情况下实现效果见图2。从图2可以看出,(c)图航道细节的数据明显多于(a)图和(b)图。
图2 不同插值精度实现效果Fig.2 Different precision and interpolation effect
本文还使用了其他点云三维生成算法进行对比实验,主要用到OpenSceneGraph的基于三维的Delauney网格生成和显示的算法,CGAL库里的Delauney生成三角网格的算法。OpenSceneGraph是跨平台的图形开发包,里面集成了很多图形开发相关的算法。OpenSceneGraph图形库里的OsgUtil链接库下封装好了DelaunayTriangulator,实现了Delaunay三角网格运算,根据一组顶点的集合生成一系列的三角形,同时,还能对生成的三角网格进行约束限制。CGAL是计算几何算法库,被广泛应用于几何算法相关的领域。诸如三角剖分、Voronoi图、多边形和多面体的布尔运算、网格简化等。CGAL中的Delaunay算法采用的是增量型算法。3种算法在同等数据量、相同划分精度的情况下,实验对比结果见表3。
表3 相同数据相同划分精度不同算法所花费时间与帧率情况Table 3 Thecosting time and frame rateof the same data and division precision,and different algorithm
跟其他三维网格剖分算法进行对比,本文基于Unity3D高度图规则格网生成算法在运行时间上明显快于它们,原因在于本文用到的是基于二维三角网格剖分,并对网格做规则格网连接。而其他算法是直接对所有点建立三维网格,运算更为复杂,耗时更长。
由对比实验可得,在gtx960显卡的处理能力下,同等划分网格精度,处理数据量越大花费时间越长,帧率越低,但显示场景越大;同等数据量,划分网格越精细,耗费时间越长,帧率越低,但显示更逼真。仿真程序需要在满足流畅显示的情况下,最大限度地还原实物原貌和显示效果。由于人眼存在视觉残留,1 s内只要有24帧及以上的数据就会感觉是流畅的,本文在对79 224 kb数据做实验的情况下,将其划分精度控制在>0.5 m的情况下能流畅浏览构建好的地形。将精度控制在0.5~1 m的范围内,地形在显示效果上不存在明显的数据丢失、效果失真等情况。
该算法成功应用于发改委资助的创新能力建设项目“耙吸船模拟仿真平台”。根据真实长江口航道点云数据构建航道地形,实现航道三维建模显示,在数据划分精度上采用了0.5 m的系数,帧率显示25帧以上。流畅地在仿真环境中模拟疏浚作业,实时漫游浏览航道地形,5种常见地质纹理数据任意切换,对航道地形进行挖泥模拟操作,挖深挖宽可调节。该算法设计已模块化,可快速地将该算法移植到不同的仿真程序中。
因Unity3D开发速度快,实现效果逼真,基于Unity3D做可视化仿真的企事业单位越来越多,基于Unity3D实现的航道点云数据处理模块将会用于更多的可视化仿真行业,特别是航道、地质地形、岩土可视化等方向。将对这些行业起到巨大的推动作用。
1)本文对点云数据进行排序优化,加快处理速度,创新地采用基于高度图的方法将点云数据处理成Unity3D能识别的数据;
2)实验对比分析找出影响显示质量和帧率的关键因素,合理决定网格划分精度,让程序兼顾显示效果和运行速度;
3)将算法应用于“耙吸船模拟仿真平台”项目,进一步验证算法设计的正确性、参数选择的合理性,为后续其它仿真项目奠定坚实的基础。
[1] 王丽辉.三维点云数据处理的技术研究[D].北京:北京交通大学,2011.WANG Li-hui.Study on data processing technology of 3D cloud points[D].Beijing:Beijing Jiaotong University,2011.
[2]赵煦.基于地面激光扫描点云数据的三维重建方法研究[D].武汉:武汉大学,2010.ZHAO Xu.Reasearch on 3D reconstruction of point cloud from terrestrial laser scanning[D].Wuhan:Wuhan University,2010.
[3]房旭东,钟贵才.多波束声呐和侧扫声呐数据融合方法研究综述[J].海岸工程,2016,35(4):63-68.FANG Xu-dong,ZHONG Gui-cai.Research overview of multibeamsonar and sidescanningsonar data fusion method[J].Coastal Engineering,2016,35(4):63-68.
[4] 李岳明,李晔,盛明伟,等.AUV搭载多波束声纳进行地形测量的现状及展望[J].海洋测绘,2016,36(4):7-11.LI Yue-ming,LI Ye,SHENG Ming-wei,et al.Application and development of topographic survey using multibeam echosounder equipped on AUV[J].Hydrographic Surveying and Charting,2016,36(4):7-11.
[5] 李天培,孙少斌.基于高度图的地形纹理生产方法[J].火力与指挥控制,2012,37(1):172-175.LI Tian-pei,SUN Shao-bin.Research on method of producing terraintexturebased onelevationmap[J].Fire Control and Command Control,2012,37(1):172-175.
[6] 陈金锐.点云数据三维重建研究[D].武汉:武汉理工大学,2011.CHEN Jin-rui.Reasearch on 3-D reconstruction from point colud[D].Wuhan:Wuhan University of Technology,2011.
[7] 赵显富,张育锋,曹爽,等.工业构件密集点云数据与CAD模型的配准[J].测绘科学,2015,40(4):112-114.ZHAOXian-fu,ZHANGYu-feng,CAOShuang,et al.Registration of dense point cloud data of industrial component and CADModel[J].Scienceof Surveying and Mapping,2015,40(4):112-114.
[8] 邓林建,程效军,程小龙,等.一种基于点云数据的建筑物BIM模型重建方法[J].地矿测绘,2016,32(4):14-16.DENG Lin-jian,CHENG Xiao-jun,CHENG Xiao-long,et al.A method of buildinginformation model reconstruction based on point cloud data[J].Surveying and Mapping of Geology and Mineral Resources,2016,32(4):14-16.
[9] 叶珉吕,花向红.面向地形数据的点云简化算法[J].大地测量与地球动力学,2015,35(3):424-427.YEMin-lü,HUAXiang-hong.Point cloud simplification algorithm for terrain data[J].Journal of Geodesy and Geodynamics,2015,35(3):424-427.