基于浏览器的海量三维点云数据的发布方法与流程

文档序号:13180641阅读:620来源:国知局
技术领域本发明涉及三维点云数据网络发布领域,具体涉及一种基于浏览器的海量三维点云数据的发布方法。

背景技术:
随着数字城市的建设,大规模三维数据采集技术的不断发展,三维激光扫描技术得到了广泛的应用。它能够对目标场景进行完整的三维坐标采集,在三维空间进行自动的高精度扫描,真实的描述目标场景的整体结构和形态特征,快速获取目标场景点云数据。然而,由于扫描设备的多视整合,目标场景的复杂性,以及所需绘制场景精细程度的不断增加,点云数据的规模日益扩大。面对海量的城市级三维点云数据,如何对其在网络浏览器环境中进行有效发布,成为了目前研究的热点。随着WebGL技术的出现,为互联网浏览器带来无插件3D硬件图形加速,该技术的出现使得三维点云数据无需插件直接在网络浏览器中的可视化成为了可能。开放点云处理库PointCloudLibrary,加拿大Arius3D公司的Pointstream,OpenWebGlobe项目以及德国海德堡大学地理学院的GIScienceGroup研究组都提出了基于WebGL的数据浏览窗口研究方案。在点云数据量比较小的情况下,一般的方法是将点云数据加载进内存直接可视化;但当点云数据量比较大时,由于计算机内存的限制,将所有点云数据加载进内存的方法很难实现对点云的可视化,通常的做法是使用LOD技术和内外存调度技术实现点云数据的绘制,但是在点云数据的动态加载和调度上有待进一步的提高,而且对海量三维点云数据的支持较差。目前,对基于网络浏览器如何有效进行海量城市级的点云数据的发布还没有得到很好的解决。现有三维点云数据的处理存在以下问题:①在对三维点云的数据组织和空间索引方面基本以单一的索引方式为主,缺乏对混合索引的研究,同时,缺乏对海量三维点云数据组织方案上的研究;②对海量三维点云数据的动态加载和调度上的研究有待进一步的提高;③针对海量三维点云数据进行网络发布的研究较少,对如何在浏览器端实现海量三维点云数据的可视化,实现与用户的实时交互等问题,没有有效的解决方案。为了满足基于网络浏览器的海量城市级三维点云数据发布的需求,提出一种基于浏览器的海量三维点云数据的发布方法迫在眉睫。

技术实现要素:
为了克服上述现有技术中存在的缺陷,本发明的目的是提供一种交互效率高的海量三维点云数据的发布方法。为了实现本发明的上述目的,本发明提供了一种基于浏览器的海量三维点云数据的发布方法,包括以下步骤:S1,计算原始三维点云数据的包围盒,根据该包围盒和规则格网划分理论对原始三维点云数据进行分块,划分出多个分块点云包围盒;S2,对每一个分块点云包围盒构建八叉树,并为每一个八叉树配置其描述文件;S3,将八叉树按照其坐标投影到二维平面,在该平面上对八叉树做规则格网划分,并对每个规则格网包含的八叉树构建四叉树结构,为八叉树建立空间索引;S4,浏览器实时向服务器发送查询请求,服务器将八叉树查询结果实时返回浏览器,浏览器对八叉树查询结果进行可见性判断,卸载不可见的八叉树,加载可见八叉树,完成海量三维点云数据动态加载与调度,实现在浏览器端对三维点云数据的发布本发明中,首先对原始点云数据分块,为每个分块点云构建八叉树,并将八叉树每个节点包含的点云数据作为单独的文件进行存储,在服务器端基于规则格网和四叉树结构为八叉树构建空间索引。本发明提高了浏览器端向服务器端进行数据请求和空间查询的效率,实现了海量点云数据的动态加载与调度,提高了交互效率。进一步的,所述步骤1包括以下几个步骤:S1-1,计算三维点云数据的最大值(xMax,yMax,zMax)和最小值(xMin,yMin,zMin),其中,xMax和xMin的计算方法为:S1-2,采用与步骤S1-1中计算最大值和最小值时相同的方法计算yMax、zMax、yMin和zMin;将原始三维点云数据的包围盒表示为:box(xMin,yMin,zMin,xMax,yMax,zMax);S1-3,以边长为N的立方体为标准,结合原始点云数据包围盒,将原始点云数据划分为多个具有相同包围盒大小的数据块,其中,N=2q,其中q为正整数;S1-4,设定一固定偏移原点p0(x0,y0,z0),计算任意点云pi(xi,yi,zi)对应立方体最小角点坐标pci(xci,yci,zci),计算公式为:xci=floor((xi-x0)/N)*N+x0yci=floor((yi-y0)/N)*N+y0zci=floor((zi-z0)/N)*N+z0,]]>其中floor(x)含义是向下取整,若无特别说明,下文也作此解释。S1-5,将具有相同最小角点坐标的点云划分入同一分块点云包围盒中,完成分块点云包围盒的划分,从而完成海量点云数据的分块处理。这能快速的对原始三维点云数据进行分块处理,使得该海量三维点云数据的发布方法更加准确快捷,且有利于海量三维点云数据的管理与查询,为海量三维点云数据的发布奠定基础。优选的,步骤S1-4中的固定偏移原点p0(x0,y0,z0)的x坐标,y坐标和z坐标分别为:x0=xMin,y0=yMin,z0=zMin,选取这样的点为最小角点坐标的计算提供了方便。进一步的,所述步骤2包括以下几个步骤:S2-1,将分块点云包围盒内的点云对应的立方体最小角点坐标作为八叉树的坐标,将分块点云包围盒作为八叉树的根节点,并按照Spacing*2Level-1点云间距对分块点云包围盒内的点云数据进行采样生成根节点点云文件,其中,Spacing表示八叉树节点内点间最小间距,Level控制八叉树的子节点层数;S2-2,然后沿着X、Y、Z三个方向将该分块点云包围盒剖分为8个立方体形的子包围盒,将这8个子包围盒作为根节点的8个子节点;S2-3,按照Spacing*2Level-2的点云间距对子包围盒内的点云数据进行采样,生成这8个子节点对应的点云文件;S2-4,按S2-1至S2-3的方法对分块点云的子节点逐级剖分,并根据点云间距生成相应的点云文件,直至八叉树的层级达到Level时则停止剖分,且此时的点间距为Spacing,至此,当前分块点云包围盒的八叉树构建完毕;S2-5,设任一八叉树坐标为octree(x,y,z),则按照“根目录/x坐标/y坐标/z坐标”的层级来组织目录结构,并在八叉树下设置对该八叉树进行描述的配置文件,记录该八叉树的坐标以及其包围盒大小信息;S2-6,按步骤S2-1至S2-5对所有分块点云包围盒构建八叉树,并配置其描述文件。该方法可快速完成对八叉树的构建,并且能为八叉树建立与其对应的配置文件,详细记录了八叉树的坐标,包围盒大小等信息,其中Spacing和Level可以根据需要设置不同的值。进一步的,所述步骤3包括以下几个步骤:S3-1,将八叉树按其坐标分别投影到xoy平面上,在该平面上以长度M为标准将八叉树按其坐标进行格网划分,其中M=2p,p为正整数,设八叉树坐标为octree(x,y,z),计算其对应的格网位置(xgrid,ygrid),计算公式为:xgrid=floor(x/M)*Mygrid=floor(y/M)*M;]]>S3-2,根据xgrid与ygrid对该规则格网进行编码,编码生成方式为:规则格网的编码keygrid=(xgrid<<32)|ygrid,具有相同规则格网编码相同的八叉树属于同一个规则格网;S3-3,计算所有八叉树所对应的规则格网编码值,完成八叉树的规则格网划分;S3-4,对每一个规则格网包含的八叉树构建四叉树结构,并通过参数Level'和MinCount对四叉树的构建过程进行控制,其中Level'表示构建四叉树的最大层级,MinCount表示四叉树叶子节点中包含的八叉树的最小数目,具体构建方法为:将当前格网作为四叉树的根节点,然后沿着X和Y方向将该格网剖分为4个子格网,将这4个子格网作为根节点的子节点,然后将每个子节点包含的八叉树数量与MinCount作比较,若该子节点包含的八叉树个数小于MinCount值,则停止对该节点的剖分,反之,继续对该节点进行剖分,直到四叉树层级达到Level',完成对当前格网四叉树的建立;对所有规则格网包含的八叉树构建四叉树结构,完成空间索引的构建。这提高了浏览器端向服务器端进行数据请求和空间查询的效率。进一步的,所述步骤4包括以下几个步骤:S4-1,通过服务器端对八叉树进行查询:设查询中心点坐标为pquery(xquery,yquery,zquery),查询范围半径为buffer,则向服务器端发送数据查询请求,服务器端在收到数据查询请求后开始进行八叉树查询,并向浏览器端返回查询结果,浏览器端接收到服务器端返回的查询结果后,对查询结果进行解析,根据八叉树坐标octree(x,y,z)信息,确定该八叉树的配置文件及八叉树节点文件所在位置,并将查询到的八叉树信息加载进内存,但不对八叉树节点文件进行加载;S4-2,判断八叉树可见性:查询到的八叉树范围较大时,通过WebGL相机与八叉树包围盒的相交检测,判断八叉树是否在三维场景外,即相机视野外,将在相机视野外的八叉树从查询结果中删除,对在相机视野内的八叉树进行筛选并加载;S4-3,构建八叉树LOD模型:即对八叉树进行加载时,依据不同的视点,当相机位置距离八叉树较远时,则只需加载八叉树根节点点云,当视点较近时,则加载相应层次的八叉树节点点云。S4-4,动态加载与调度海量三维点云数据:加载相机视野内的不同细节层次的八叉树节点文件,实现海量三维点云数据的动态加载与调度。在服务器端为八叉树构建空间索引后,当浏览器端向服务器端进行数据请求和空间查询时,根据浏览器端查询参数的设置,如查询点坐标pquery(xquery,yquery,zquery)及查询范围半径buffer,首先结合查询点的坐标计算该查询点所在的规则格网位置及编号,并计算其它格网到该查询点的距离,将距离小于查询范围半径的规则格网列为查询的候选格网。然后分别对每个格网进行四叉树查询,查找满足要求即与查询点距离值小于查询范围半径buffer的所有八叉树,并将查询结果返回浏览器端。在浏览器端采WebGL技术,实现点云数据的三维可视化,对点云八叉树进行可见性判断,将需要显示的点云八叉树加载进内存,不需要显示的点云八叉树从内存中卸载,减少了计算机内存的消耗;并为点云数据构建LOD模型,满足了三维点云数据不同细节层次显示的要求,实现海量点云数据的动态加载与调度,提高交互效率。本发明的有益效果是:通过分块与建立八叉树索引,把多个点云大文件分解为很多小文件,便于网络传输;利用浏览器的本地缓存机制,避免同一客户端多次下载同一个小文件,减少了网络流量;使用WebGL硬件加速技术,在浏览器中动态加载大量点云,达到基于浏览器的点云可视化。通过以上三个方面的工作,实现了海量点云大文件的基于网络的发布与可视化,解决了点云数据难于发布的难题。本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:图1是本发明的流程图;图2海量三维点云数据组织与发布流程图;图3是八叉树数据目录组织结构示例图;图4是八叉树节点文件组织格式示例图;图5是本发明的效果图。具体实施方式下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。在本发明的描述中,除非另有规定和限定,需要说明的是,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是机械连接或电连接,也可以是两个元件内部的连通,可以是直接相连,也可以通过中间媒介间接相连,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。如图1-2所示,本发明提供了一种基于浏览器的海量三维点云数据的发布方法,包括以下步骤:第一步,计算原始三维点云数据的包围盒,根据该包围盒和规则格网划分理论对原始三维点云数据进行分块,划分出多个分块点云包围盒。具体分为以下几个步骤:S1-1,计算三维点云数据的最大值(xMax,yMax,zMax)和最小值(xMin,yMin,zMin),其中,xMax和xMin的计算方法为:S1-2,采用与第一步中计算最大值和最小值时相同的方法计算yMax、zMax、yMin和zMin;将原始三维点云数据的包围盒表示为:box(xMin,yMin,zMin,xMax,yMax,zMax)。S1-3,以边长为N的立方体为标准,结合原始点云数据包围盒,将原始点云数据划分为多个具有相同包围盒大小的数据块,其中,N=2q,其中q为正整数。S1-4,设定一固定偏移原点p0(x0,y0,z0),计算任意点云pi(xi,yi,zi)对应立方体最小角点坐标pci(xci,yci,zci),计算公式为:xci=floor((xi-x0)/N)*N+x0yci=floor((yi-y0)/N)*N+y0zci=floor((zi-z0)/N)*N+z0,]]>其中floor(x)含义是向下取整。为了便于计算最小角点坐标,这里的固定偏移原点p0(x0,y0,z0)的x坐标,y坐标和z坐标通常选为:x0=xMin,y0=yMin,z0=zMin。S1-5,将具有相同最小角点坐标的点云划分入同一点云包围盒中,完成分块点云包围盒的划分,从而完成海量点云数据的分块处理。第二步,对每一个分块点云包围盒构建八叉树,并为每一个八叉树配置其描述文件。具体包括以下几个步骤:S2-1,将分块点云包围盒内的点云对应的立方体最小角点坐标作为八叉树的坐标,将分块点云包围盒作为八叉树的根节点,并按照Spacing*2Level-1点云间距对分块点云包围盒内的点云数据进行采样生成根节点点云文件,其中,Spacing表示八叉树节点内点间最小间距,该节点内所有点之间的距离不小于此值,当新添加到此节点的点与其中所有点的距离不小于此值时则添加至此节点,否则加入到其下一级子节点。若所有层级节点均不能加入,则该点云被丢弃。Spacing由最底层节点点间距决定,每层Spacing为其父节点Spacing的一半,层级越小,Spacing值越小,表现的点云细节效果也就越好。Level控制八叉树的子节点层数,层数越多,达到的效果越好。Level一般取值4或5,八叉树根节点的点间距值为Spacing*2Level-1,根据点云采集设备的不同,取值有所不同,一般取值为0.05。S2-2,然后沿着X、Y、Z三个方向将该分块点云包围盒剖分为8个立方体形的子包围盒,将这8个子包围盒作为根节点的8个子节点。S2-3,按照Spacing*2Level-2的点云间距对子包围盒内的点云数据进行采样,生成这8个子节点对应的点云文件。S2-4,按S2-1至S2-3的方法对分块点云的子节点逐级剖分,并根据点云间距生成相应的点云文件,直至八叉树的层级达到Level时则停止剖分,且此时的点间距为Spacing,至此,当前分块点云包围盒的八叉树构建完毕。逐级剖分时,按照Spacing*2Level-L的点云间距进行采样,其中L指当前剖分的层级,为正整数,且L≤Level。S2-5,设八叉树坐标为octree(x,y,z),则按照“根目录/x坐标/y坐标/z坐标”的层级来组织目录结构,目录组织格式如图3所示,按坐标命名目录时使用坐标的16进制,按“%8x”格式化,并在八叉树下设置有对该八叉树进行描述的配置文件,详细记录了该八叉树的坐标以及其包围盒大小等信息。对于八叉树内的节点文件,各级节点的子节点均按编号在其父节点名后追加数字进行命名,命名形式如图4所示,其中的.hrc文件对八叉树的各个节点进行描述,记录每个节点的子节点的位置及该节点所包含的点云的数量。S2-6,按步骤S2-1至S2-5对所有分块点云包围盒构建八叉树,并配置其描述文件。第三步,将八叉树按照其坐标投影到二维平面,在该平面上对八叉树做规则格网划分,并对每个规则格网包含的八叉树构建四叉树结构,为八叉树建立空间索引。具体为:S3-1,将八叉树按其坐标分别投影到xoy平面上,在该平面上以长度M为标准将八叉树按其坐标进行格网划分,其中M=2p,p为正整数,设八叉树坐标为octree(x,y,z),计算其对应的格网位置(xgrid,ygrid),计算公式为:xgrid=floor(x/M)*Mygrid=floor(y/M)*M.]]>S3-2,根据xgrid与ygrid对该规则格网进行编码,编码生成方式为:规则格网的编码keygrid=(xgrid<<32)|ygrid,具有相同规则格网编码的八叉树属于同一个规则格网。S3-3,计算所有八叉树所对应的规则格网编码值,完成八叉树的规则格网划分。S3-4,对每一个规则格网包含的八叉树构建四叉树结构,并通过参数Level'和MinCount对四叉树的构建过程进行控制,其中Level'表示构建四叉树的最大层级,四叉树层级超过Level时,则停止构建,MinCount表示四叉树叶子节点中包含的八叉树的最小数目,若该节点所包含的点云八叉树的数目小于MinCount,则停止对该节点的剖分。具体构建方法为:将当前格网作为四叉树的根节点,然后沿着X和Y方向将该格网剖分为4个子格网,将这4个子格网作为根节点的子节点,然后将每个子节点包含的八叉树数量与MinCount作比较,若该子节点包含的八叉树个数小于MinCount值,则停止对该节点的剖分,反之,继续对该节点进行剖分,直到四叉树层级达到Level',完成对当前格网四叉树的建立。按些方法对所有规则格网包含的八叉树构建四叉树结构,完成空间索引的构建。S4,浏览器实时向服务器发送查询请求,服务器将八叉树查询结果实时返回浏览器,浏览器对八叉树查询结果进行可见性判断,卸载不可见的八叉树,加载可见八叉树,完成海量三维点云数据动态加载与调度,实现在浏览器端对三维点云数据的发布。具体分以下几步,S4-1,通过服务器端对八叉树进行查询:在服务器端为点云八叉树构建空间索引后,当浏览器端向服务器端进行数据请求和空间查询时,根据浏览器端查询参数的设置,如设查询点坐标为pquery(xquery,yquery,zquery)及查询范围半径buffer,则向服务器端发送数据查询请求,服务器端在收到数据查询请求后开始进行八叉树查询,并向浏览器端返回查询结果,浏览器端接收到服务器端返回的查询结果后,对查询结果进行解析,查询结果中包含了八叉树坐标octree(x,y,z)等信息,根据八叉树坐标octree(x,y,z)信息和第一步中的S1-4确定该八叉树的配置文件及八叉树节点文件所在位置,并将查询到的八叉树信息加载进内存,但不对八叉树节点文件进行加载。其中,八叉树查询方法为:首先结合查询点的坐标根据步骤S3-1和步骤S3-2中的公式计算该查询点所在的规则格网位置及编号,并计算其它格网到该查询点的距离,将距离小于查询范围半径的规则格网列为查询的候选格网。然后分别对每个格网进行四叉树查询,查找满足要求的所有八叉树,即与查询点距离值小于查询范围半径buffer,并将查询结果返回浏览器端。S4-2,判断八叉树可见性:查询到的八叉树范围较大时,只需将在三维场景中的八叉树进行筛选并加载,将不在三维场景中的八叉树删除。具体为通过WebGL相机与八叉树包围盒的相交检测,判断八叉树是否在三维场景外,即相机视野外,将在相机视野外的八叉树从查询结果中删除,对在相机视野内的八叉树进行筛选并加载。S4-3,构建八叉树LOD模型:为了减少内存的消耗及满足点云显示不同层次细节的要求,为在相机视野中的点云八叉树构建LOD模型,来动态控制对点云八叉树节点的调运。即对八叉树进行加载时,依据不同的视点,当相机位置距离八叉树较远时,则只需加载八叉树根节点点云,当视点较近时,则加载相应层次的八叉树节点点云。而不需要将八叉树所有节点文件加载进内存,减少内存消耗。S4-4,动态加载与调度海量三维点云数据:加载相机视野内的不同细节层次的八叉树节点文件,实现海量三维点云数据的动态加载与调度,从而实现了在浏览器端对三维点云数据进行发布,效果图如图5所示。作为本实施例的优选方案,步骤S1-4中的固定偏移原点p0(x0,y0,z0)的x坐标,y坐标和z坐标分别为:x0=xMin,y0=yMin,z0=zMin。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1