项目总结——基于WebGL的点云全景可视化

1.项目简介

这个项目是我2016年研一上学期的个人项目,目的是使用webgl在浏览器端渲染点云和全景数据,要求流畅高效,能够实现海量点云和全景数据的可视化,以及基于点云的简单量测功能(使用ThreeJS库,也涉及到简单的前端、数据库知识)。这个项目是在我的本科毕业设计的基础上进行的,本科毕设做的是基于webgl的点云可视化(点云网络可视化示例),研一上做的是用多分辨率八叉树建立点云索引,并增加了全景数据的可视化以及与OSM的联动,但是两者的区别还是非常大的。核心区别在于前者是使用普通的均匀八叉树对点云数据建立索引,无法满足网络可视化要求,而后者使用的是多分辨率八叉树对点云建立索引,效果更好。

2.研究现状

国内外在点云全景可视化方面差距巨大,国内的类似项目产品不是很多,比如wish3D等,国外的开源和商业的比较多,比如potree、navvis、cesium、Pointcloudviz、AHN 3D viewer、Cyark viewer、3DHOP、euclideon、Matterport等,有用于科研,也有商业产品。其实对于一般用户来说,图像更为直观,所以纯点云的可视化很难用于商业用途,通常需要加上影像。为了达到直观的浏览效果和可靠的量测功能,我们有三种选择方式:图像加隐藏的点云、带有深度信息的图像、LOD Mesh,三种方式各有优劣,我所做的属于第一种方式。

项目总结——基于WebGL的点云全景可视化_第1张图片

3.点云索引

点云数据的特点是数据量巨大,分布极不均匀,特别是车载点云数据,不管是为了方便数据处理,还是可视化,我们都需要对其建立索引,常见的点云数据索引有Octree和KD tree;当然对于不同类型的点云数据,建立索引的方法又有所不同,比如,机载激光点云呈面妆分布,适合用四叉树建立索引。下面仅简要介绍规则八叉树、多分辨率八叉树和KD树。

3.1 规则八叉树

规则八叉树是最简单直观的一种八叉树,是四叉树在三维空间上的推广,适用于建立三维空间数据的索引。规则八叉树数据模型在三个相互正交的方向对三维空间的几何实体进行平均剖分,每次剖分都将一个体元等分为八个体元,每个体元具有相同的时间和空间复杂度,通过循环递归的方式,一个体元可以被剖分为2^n×2^n×2^n个体元,最底层的体元为叶结点,其余体元为父结点。剖分的终止条件可以是最大层次,也可以是最小体元的大小或数据的多少。

规则八叉树建立索引后,点云数据只存在于叶结点,无法用于可视化,我们需要将给上层非叶子节点分配适量点云,比较简单的办法是从叶子结点抽取部分点云数据到上层结点(File 0~File 7抽取八分之一到File 64,以此类推),如下图;其缺点是节点数据分布不均,且数据总量变大,只适用于客户端软件的点云可视化,在浏览器端基本无法使用,解决该问题的一个直观方法是,在建立索引之前对点云进行预处理,使数据量减小,分布更加均匀,同时也不影响可视化效果。

项目总结——基于WebGL的点云全景可视化_第2张图片

3.2 多分辨率八叉树

多分辨率八叉树是一种有损的索引方法,它将原始点云数据分布在八叉树的各个节点上,不会是数据总量变大,非常适合点云网络可视化。首先,根据点云数据的boundingbox和数据量确定八叉树层数和根节点点云密度,下层点云密度是上层点云密度的八倍(如下图),然后判断每个点所属的结点和层数;对于根节点,若点与根节点中的其他点的距离都大于阈值,则将其纳入根节点,直至无法加入新点,然后对子节点使用同样的方法,将子节点数据填满,以此类推;对于没有归属的点云数据则直接丢弃,为了尽量减少丢弃数据,需要确定合理的八叉树层数和密度参数。

使用多分辨率八叉树建立的索引直接就构成点云数据的多层次细节模型(LOD),而且每个节点的点云数量相差不大,能够快速加载数据,保证网页浏览的流畅性。

项目总结——基于WebGL的点云全景可视化_第3张图片

3.3 KD树

KD树是一种平衡二叉树,是对数据点在k维空间中划分的一种数据结构,常常用于高维数据的索引。对于三维点云数据,我们可以根据其x,y,z坐标以及其他属性不断进行二分,从而建立索引。KD树非常灵活,不仅适用于点云数据的可视化,也适用于数据查询。

项目总结——基于WebGL的点云全景可视化_第4张图片

3.4 对比

规则八叉树建立索引的特点是节点大小极不均匀,可能存在许多空节点,而且建立LOD模型后索引数据大小比原数据大很多,因此适用于客户端点云数据的可视化,但是不方便进行后续的点云数据处理,不适用于点云的网络可视化;多分辨率八叉树建立索引的特点是节点大小均匀,不会存在空节点,索引数据大小和原数据大小差不多,但是只适合用于可视化,不能用于后续数据处理;KD树的优点是在领域查询上有优势;缺点是当数据量很大时,若划分粒度较小,建树开销会很大;此外,KD树对数据的插入顺序很敏感,因为它对数据没有处理机制,没有像二叉树那样有平衡旋转,使得数据非常依赖于插入顺序。

4.全景可视化

全景可视化比较简单,需要对全景建立索引,划分成小块,并进行下采样,得到分块多分辨率的图像块,加载时优先加载屏幕内图像块和低分辨率图像,尽量减小加载的数据量,保证流畅性。

项目总结——基于WebGL的点云全景可视化_第5张图片

5.点云与全景网络可视化结果

全景影像与点云数据的配准方法详见[1],该文章解决的问题是车载点云与全景影像的自动配准;数据配准之后,网页上的点云和全景影像能够很好地吻合,下图是效果图,可以看到直接把原始点云和全景影像叠加到一起并不是很美观,我们可以对点云数据进行抽稀,只要保留关键点云,减少数据加载量,没有点的地方甚至可以通过内插得到点,美观但不影响测量的准确性。其实我们可以在这上面做很多事,比如加上POI,在POI上面附加很多普通大众产生的信息;我们也可以把三维导航功能放到其中;还可以把室内室外放到一起;也可以把从影像和点云中得到的语义信息放到其中;我们还可以给不同用户提供开发接口,让用户用这些数据满足自己的要求。其实这是一个很好的开发平台,我们可以做的事情只取决于自己的想象(这是我们老板常说的口头禅),当然这只是我个人的遐想,我自己也没时间做。

项目总结——基于WebGL的点云全景可视化_第6张图片

修改中...

引用:

[1] Li J, Yang B, Chen C, et al. Automatic registration of panoramic image sequence and mobile laser scanning data using semantic features[J]. ISPRS Journal of Photogrammetry and Remote Sensing, 2018, 136: 41-57.


你可能感兴趣的:(项目总结)