CN101908068A - 一种基于四叉树索引的海量激光扫描点云实时绘制方法 - Google Patents

一种基于四叉树索引的海量激光扫描点云实时绘制方法 Download PDF

Info

Publication number
CN101908068A
CN101908068A CN2010102451375A CN201010245137A CN101908068A CN 101908068 A CN101908068 A CN 101908068A CN 2010102451375 A CN2010102451375 A CN 2010102451375A CN 201010245137 A CN201010245137 A CN 201010245137A CN 101908068 A CN101908068 A CN 101908068A
Authority
CN
China
Prior art keywords
point cloud
node
cloud data
laser
laser point
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2010102451375A
Other languages
English (en)
Other versions
CN101908068B (zh
Inventor
张靖
郭大海
江万寿
王建超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Aero Geophysical Survey & Remote Sensing Center For Land And Resources
Wuhan University WHU
Original Assignee
China Aero Geophysical Survey & Remote Sensing Center For Land And Resources
Wuhan University WHU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Aero Geophysical Survey & Remote Sensing Center For Land And Resources, Wuhan University WHU filed Critical China Aero Geophysical Survey & Remote Sensing Center For Land And Resources
Priority to CN2010102451375A priority Critical patent/CN101908068B/zh
Publication of CN101908068A publication Critical patent/CN101908068A/zh
Application granted granted Critical
Publication of CN101908068B publication Critical patent/CN101908068B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Numerical Control (AREA)

Abstract

本发明提供了一种基于四叉树索引的海量机载激光扫描点云实时绘制方法,对原始的激光点云数据建立四叉树索引,并对四叉树索引进行序列化,利用建立的四叉树索引,对海量激光点云进行快速视场裁剪,并通过点云绘制时的绘制细节控制和绘制时间控制,实现海量点云的实时高质量绘制。

Description

一种基于四叉树索引的海量激光扫描点云实时绘制方法
技术领域
本发明涉及海量激光扫描点云数据绘制技术,尤其是建立高效四叉树索引,并基于该索引结构的海量激光扫描点云实时绘制方法。
背景技术
机载激光扫描(Light Detection And Ranging以下简称LiDAR)是集激光测距、全球定位以及惯性导航技术于一体的新型空间测量技术。该技术能够快速获取探测目标高精度的三维坐标,具有广泛的应用前景。当前LiDAR扫描频率已普遍达到100KHz以上,每次飞行采集的数据量非常巨大。由于计算机内存大小以及显卡渲染速度的制约,对于海量点云数据的可视化还是一个非常复杂、有待解决的问题。为了实现海量LiDAR点云的实时显示和动态漫游,研究LiDAR点云的索引组织方式,以及实时绘制方法具有重要的意义和价值。
目前对于激光点云的绘制,在实际应用中常采用抽稀的方式进行处理。例如TerraScan和PointVue LE等软件,都需要设定最大绘制点数,以此来对点云进行抽稀,仅对抽稀后的点进行绘制。这种方法实现简单,不需要对数据进行预处理,但并没有真正解决海量点云实时绘制的问题。LiDAR点云在数据量增大的同时,也提供了更多的细节信息,采用抽稀显示的处理方法,为了保证显示的流畅性,必须随着点云数据量的增加提高抽稀比例,这样必定会造成细节信息的丢失,在进行放大显示时,丢失细节的现象就更为明显。
为了实现海量LiDAR点云的高效绘制,需要在绘制时采用可见性剔除和层次细节(Level Of Detail以下缩写为LOD)技术。LiDAR点云是非结构化的离散点云,分布不均匀,要实现LiDAR点云的快速可视性剔除和LOD,必须对点云建立索引。支晓栋等在论文《基于改进四叉树的LiDAR点云数据组织研究》中采用四叉树来建立点云索引,并对索引方法和索引效率进行了分析,但没有在此基础上进一步解决海量LiDAR点云的绘制问题,黄先锋等在论文《机载激光雷达点云数据的实时渲染》中提出一种顺序四叉树的索引结构,利用四叉树的每一层节点来存储点云,并将点云数据顺序组织,以方便的将点云数据整块加载到图形处理器(Graphic Processing Unit以下缩写为GPU)中进行绘制。但该方法不是将点云数据全部存储在四叉树的叶子节点上,在进行数据裁剪时,为了保证获得完整的裁剪数据,必须将落入裁剪框的四叉树节点从根节点开始逐层向下全部裁剪出来,这种方式会造成大量的数据冗余,当裁剪框减小时,裁剪效率下降得更加明显。Rusinkiewicz等在论文《QSplat:AMultiresolution Point Rendering System for Large Meshes》中运用点模型来表达复杂的几何体,并开发出了QSplat(软件名称)的点绘制技术。但他们所采用的点模型实际上是小的面片,通过考虑面片的遮挡关系来实现点模型的约简,且其建立的索引也不适合处理LiDAR点云。
发明内容
本发明的目的在于:针对目前LiDAR点云数据量巨大的特点,提出了一种点云四叉树索引快速建立方法,并基于该索引结构实现海量点云的实时高质量绘制。
本发明所采用的技术方案是一种基于四叉树索引的海量机载激光扫描点云实时绘制方法,包括以下步骤:
步骤1,对原始的激光点云数据建立四叉树索引,具体包括以下步骤,
步骤1.1,根据激光点云数据包围盒范围和总点数,计算激光点云数据的平均点密度;所述激光点云数据包围盒范围采用激光点云数据的包围盒的长度length和宽度width标记,总点数记为ptNum,激光点云数据的平均点密度density按公式(1)算得;
density = ptNum length × width - - - ( 1 )
步骤1.2,根据激光点云数据包围盒的长度length、宽度width以及步骤1.1所得平均点密度density,计算激光点云数据分块的长度l和宽度w,以及四叉树深度depth  其中
l = height 2 depth (2)
w = width 2 depth
l×w×density≤max_ptNum                        (3)
即预先设定阈值max_ptNum,每一个激光点云数据分块中的激光点总点数l×w×density不能超过阈值max_ptNum;
步骤1.3,利用步骤1.2所得激光点云数据分块的长度l和宽度w对激光点云数据进行网格分块,得到多个激光点云数据分块;
所述网络分块的实现方式为,设激光点云数据中某个激光点的坐标为(x,y,z),整个激光点云数据的包围盒左下角坐标为(bbmin_x,bbmin_y),则根据公式(4)计算出每个激光点所属的分块号,其中col_No为分块的列号,row_No为分块的行号,
col_No=(x-bbmin_x)/w
row_No=(y-bbmin_y)/l               (4)
步骤1.4,首先,根据步骤1.2所得四叉树深度depth建立四叉树索引,将每一个激光点云数据分块对应四叉树最底层的一个叶节点,叶节点的指针指向对应激光点云数据分块所含激光点的真实存储位置;每个激光点云数据分块都是一个长度为l、宽度为w的矩形,计算出矩形的外接圆圆心(cell_x,cell_y)和半径cell_r分别作为对应叶子节点的圆心和半径,并将激光点云分块中的点数cell_ptNum记入相应叶子节点中;从最底层的叶子节点开始逐层向上建立父节点,直到四叉树的根节点时完成四叉树的建立;每个父节点所对应圆的圆心和半径是其所有子节点的外接圆圆心和半径,所包含的激光点数是其子节点中的激光点数之和;
步骤1.5,将步骤1.4中建立的四叉树索引补充为一棵完全的四叉树,将四叉树中不包含激光点云数据的节点标记为dummy;
步骤2,利用步骤1所得四叉树索引对激光点云数据进行绘制,具体包括以下步骤,
步骤2.1,利用四叉树索引实现对激光点云数据的快速视场裁剪,实现方式为在进行点云数据绘制时,只对落入显示区域内的激光点云数据进行绘制,即利用显示区域的包围盒对四叉树索引进行裁剪,裁剪方法是用四叉树中节点的圆心和半径构成的圆与裁剪框进行相交判断,如果圆在裁剪框内或与裁剪框相交,则表示该节点所包含的激光点数据全部或部分位于显示区域内;如果圆在裁剪框外,则表示该节点包含的激光点数据在显示区域外;裁剪时从根节点开始,如果节点标记为dummy或节点在裁剪框外,则直接跳过该节点;如果节点在裁剪框内,则继续对该节点的子节点进行裁剪直到最底层的叶节点,得到落入裁剪框的所有节点;
步骤2.2,在绘制细节控制下对步骤2.1所得剪裁结果进行实时绘制,实现方式如下,
首先,根据叶节点的半径cell_r,按公式(5)计算出叶节点投影到屏幕上的半径Rscreen
Rscreen=cell_r×scale                      (6)
其中,scale为投影转换的尺度参数,由当前裁剪框范围与在屏幕上的显示窗口大小计算得到;设裁剪框的长度为clipping_len,显示窗口长度为viewport_len,按公式(7)计算scale,
scale=viewport_len/clipping_len                 (8)
然后,根据裁剪得到的叶节点得到对应的激光点云数据分块,采用视觉感知驱动的最优细节层次自动确定方法,计算出每个点云分块应绘制激光点总数draw_num,实现方法为,设在屏幕上绘制的最小目标半径为min_radius,min_radius根据具体显示分辨率设置,按公式(9)计算出为达到最优绘制细节层次,每个分块应绘制激光点总数draw_num,
draw_num=Rscreen/min_radius                     (10)
最后,逐块绘制与裁剪得到的叶节点对应的激光点云数据分块,如果当前绘制的激光点云数据分块的应绘制激光点数draw_num大于激光点云数据分块中的总点数,则绘制该激光点云数据分块中全部的激光点;如果应绘制激光点总数draw_num小于激光点云数据分块中的总点数,则随机提取该激光点云数据分块中draw_num个激光点进行绘制,绘制方式为遍历提取激光点云数据分块中的点,然后判断该点是否在裁剪框内,如果在就绘制该点,直到已绘制的点数达到应绘制激光点数draw_num或者该激光点云数据分块中的全部点遍历完。
而且,在步骤1.5建立完整的四叉树之后,为四叉树的所有节点编写索引号后进行序列化,即将步骤1.5中所得四叉树中的节点按照节点索引号顺序存储到文件中,形成线性四叉树;在步骤2.2提取激光点云数据分块中激光点进行绘制时,用索引号计算出相应叶节点在文件中的位置,从而直接提取激光点云数据分块中激光点。
而且,由于四叉树中的每个父节点都具有四个子节点,设四个子节点将父节点所覆盖的空间划分为四个象限,根据象限实现编写索引号,实现过程如下,
设定四叉树中的某个节点的索引号cell_idx,其父节点索引号parent_idx,该节点所在其父节点的象限号quadrant通过比较该节点的圆心位置(cell_x,cell_y)与父节点的圆心位置(parent_x,parent_y)来计算,计算方法见(11);该节点的索引号cell_idx根据父节点索引号parent_idx及所在父节点的象限号quadrant计算得到,计算方法见公式(12);将四叉树的根节点的编号设为0,自根节点开始,逐层向下计算各个节点的索引号;
quadrant = 1 cell _ x < parent _ x , cell _ y > parent _ y 2 cell _ x < parent _ x , cell _ y < parent _ y 3 cell _ x > parent _ x , cell _ y < parent _ y 4 cell _ x > parent _ x , cell _ y > parent _ y - - - ( 13 )
cell_idx=4×parent_idx+quadrant                        (14)。
而且,在步骤2中,通过渐进绘制技术和渲染时间控制,实现海量点云数据的实时交互;
所述渐进式绘制技术,是最初绘制点云数据的粗略概况,然后逐渐精化;并利用双缓冲绘制方法,每次绘制都先绘制到后备缓冲上,然后进行前后缓冲的交换,以避免在绘制过程中出现抖动现象;
所述渲染时间控制,是通过一个监控器来监控当前外部输入事件,当无交互请求时,则分配一段时间给渲染器进行点云绘制,当收到用户交互请求时,则将渲染器挂起,保证优先响应用户请求。
本发明通过对点云数据建立四叉树索引,可以提高数据查找速度。在此基础上,还提出对四叉树索引采用线性化存储,能够保证在进行数据查找时按一个方向顺序遍历,避免了来回查找造成数据交换上的“颠簸”现象;利用视觉感知驱动来自动确定绘制的细节程度,实现了绘制效果和绘制速度的平衡;利用渲染时间控制和渐进式绘制方法,实现了海量数据的实时绘制和用户操作的及时响应。
附图说明
图1为本发明实施例的LiDAR点云数据示意图;
图2为本发明实施例的LiDAR点云数据分块示意图;
图3为本发明实施例的LiDAR点云分块编号示意图;
图4为本发明实施例的点云四叉树索引示意图;
图5为本发明实施例的序列化后的线性四叉树示意图;
图6为本发明实施例中利用裁剪框对激光点云裁剪的示意图;
图7为本发明实施例中四叉树裁剪得到的节点示意图;
图8为本发明实施例中基于渲染时间控制的点云绘制流程图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
实施例所提供的一种基于四叉树索引的海量LiDAR点云实时绘制方法,流程如下:
步骤1.对LiDAR点云数据建立四叉树索引,并对四叉树索引进行序列化,具体包括以下步骤,
步骤1.1,图1为LiDAR点云数据示意图,每个黑点代表一个激光点。根据激光点云数据包围盒范围和总点数,计算激光点云数据的平均点密度density;所述激光点云数据包围盒范围采用激光点云数据的包围盒的长度length和宽度width标记,总点数记为ptNum。计算方法见公式(1)。
density = ptNum length &times; width - - - ( 15 )
步骤1.2,根据激光点云数据包围盒的长度length、宽度width以及步骤1.1所得平均点密度density,计算激光点云数据分块的长度l和宽度w,以及四叉树深度depth。计算方法见公式(2),(3)。
l = height 2 depth (16)
w = width 2 depth
l×w×density≤max_ptNum                            (17)
步骤1.3,利用步骤1.2所得激光点云数据分块的长度l和宽度w对激光点云数据进行网格分块,得到多个激光点云数据分块。
激光点云分块的大小和四叉树索引深度是一组矛盾参数,要想提数据查找效率,需要使数据分块尽可能小,以减少在一个分块中的激光点数,这样可以使得在步骤2.2中一个分块中进行比较判断某激光点是否在裁剪框内的次数降低;但随着分块的减小,会导致四叉树的深度增大,这样增加了遍历四叉树的时间。因此在建立四叉树索引时,需要在分块大小和树的深度之间进行权衡。在实际处理中,可以将分块中的最大点数设为64-512之间,计算出四叉树深度和分块大小。如果分块深度超过12,则将四叉树深度设为12,并重新计算分块的长度和宽度。
如图2,实施例采用公式(4)对点云进行分块。得到一个4*4的网格,四叉树深度为2。
col_No=(x-bbmin_x)/w
                        (18)
row_No=(y-bbmin_y)/l
步骤1.4,根据步骤1.2所得四叉树深度depth建立四叉树索引,将每一个激光点云数据分块对应四叉树最底层的一个叶子节点,叶子节点的指针指向对应激光点云数据分块所含激光点的真实存储位置。
每个激光点云数据分块都是一个长度为l、宽度为w的矩形,计算出矩形的外接圆圆心(cell_x,cell_y)和半径cell_r分别作为对应叶子节点的圆心和半径,并将激光点云分块中的点数cell_ptNum记入相应叶子节点中;从最底层的叶子节点开始逐层向上建立父节点,直到四叉树的根节点时完成四叉树的建立;每个父节点所对应圆的圆心和半径是其所有子节点的外接圆圆心和半径,所包含的激光点数是其子节点中的激光点数之和。
步骤1.5,将步骤1.4中建立的四叉树索引补充为一棵完全的四叉树,将四叉树中不包含激光点云数据的节点标记为dummy。图4是对图3中的LiDAR点云数据建立的四叉树索引,不存在数据的dummy节点就有10、17、19、20。
由于激光点云的分布不规则,数据中通常还存在空洞,会造成建立的四叉树不是一棵完全四叉树。具体实施时,将四叉树索引补充成完全四叉树的实现方式可以为,对四叉树进行层序遍历,如果当前遍历的节点不是叶节点,则判断当前节点的四个子节点是否存在,如果不存在则插入节点并将插入的节点标记为dummy;如果当前遍历的节点是叶节点,则停止遍历。
为了能够对四叉树索引采用线性化存储,在步骤1.5建立完整的四叉树之后,可以为四叉树的所有节点编写索引号后进行序列化,即将步骤1.5中所得四叉树中的节点按照节点索引号顺序存储到文件中,形成线性四叉树;在步骤2.2提取激光点云数据分块中激光点进行绘制时,用索引号计算出相应叶节点在文件中的位置,从而直接提取激光点云数据分块中激光点。将四叉树的节点在文件中是按序号顺序排列的,查找时可以根据节点序号确定节点在文件中的位置,顺序排列的节点保证了在文件中按一个方向顺序查找。因为叶节点的指针指向对应激光点云数据分块所含激光点的真实存储位置,如果查找到叶节点,就可以直接得到叶节点对应激光点云数据分块所含激光点在文件中的位置。可以提高绘制时,提取激光点数据的效率。
由于四叉树中的每个父节点都具有四个子节点,设四个子节点将父节点所覆盖的空间划分为四个象限。对每个象限按一定方式进行编号,即可根据子节点在父节点覆盖的空间中的位置唯一确定其编号。实施例根据象限实现编号的实现过程如下,
设定四叉树中的某个节点的索引号cell_idx,其父节点索引号parent_idx,该节点所在其父节点的象限号quadrant通过比较该节点的圆心位置(cell_x,cell_y)与父节点的圆心位置(parent_x,parent_y)来计算,计算方法见(19);该节点的索引号cell_idx根据父节点索引号parent_idx及所在父节点的象限号quadrant计算得到,计算方法见公式(20);将四叉树的根节点的编号设为0,自根节点开始,逐层向下计算各个节点的索引号。
实施例根据步骤1.2中计算出的四叉树深度为2,按照公式(21),(22)计算出每一个叶子节点的编号,如图3中,将节点编号标注在每个点云分块上,可见节点编号按象限分成四组5、6、7、8,9、10、11、12,13、14、15、16,17、18、19、20,各组内又按象限进行分布。
quadrant = 1 cell _ x < parent _ x , cell _ y > parent _ y 2 cell _ x < parent _ x , cell _ y < parent _ y 3 cell _ x > parent _ x , cell _ y < parent _ y 4 cell _ x > parent _ x , cell _ y > parent _ y - - - ( 23 )
cell_idx=4×parent_idx+quadrant                   (24)。
图5为图4中的四叉树对应的线性四叉树,其中0是根节点,1、2、3、4是根节点下一层的节点,5、6、7…20是最底层的叶子节点,其中不存在数据的dummy节点是10、17、19、20。
步骤2,利用步骤1所得四叉树索引对激光点云数据进行绘制,具体包括以下步骤:
步骤2.1,利用四叉树索引实现对激光点云数据的快速视场裁剪,实现方式为在进行点云数据绘制时,只对落入显示区域内的激光点云数据进行绘制,即利用显示区域的包围盒对四叉树索引进行裁剪,裁剪方法是用四叉树中节点的圆心和半径构成的圆与裁剪框进行相交判断,如果圆在裁剪框内或与裁剪框相交,则表示该节点所包含的激光点数据全部或部分位于显示区域内;如果圆在裁剪框外,则表示该节点包含的激光点数据在显示区域外。
如图6中,实施例用裁剪框对激光点云进行裁剪,从四叉树的根节点开始遍历,以当前节点的圆心和半径构成的圆与裁剪框进行相交判断,如果圆与裁剪框相交,则继续对该节点的所有子节点进行裁剪。最终的裁剪结果见附图7,裁剪出的节点编号为0、2、3、11、12、13、14,其中包含激光点数据的叶子节点编号为11、12、13、14。
裁剪时从根节点开始,如果节点标记为dummy或节点在裁剪框外,则直接跳过该节点;如果节点在裁剪框内,则继续对该节点的子节点进行裁剪直到最底层的叶节点,得到落入裁剪框的所有节点。为了提高效率,可以先判断当前遍历到的节点标记是否为dummy。若当前遍历到的节点标记是dummy,表明该节点中不含有激光点数据,该节点直接跳过,不进行裁剪;若当前遍历到的节点标记不是dummy,才以该节点的圆心和半径构成的圆与裁剪框进行相交判断。
步骤2.2,在绘制细节控制下对步骤2.1所得剪裁结果进行实时绘制,实现方式如下,
首先,根据叶节点的半径cell_r,按公式(25)计算出叶节点投影到屏幕上的半径Rscreen
Rscreen=cell_r×scale                        (26)
其中,scale为投影转换的尺度参数,由当前裁剪框范围与在屏幕上的显示窗口大小计算得到;设裁剪框的长度为clipping_len,显示窗口长度为viewport_len,按公式(27)计算scale,
scale=viewport_len/clipping_len              (28)
然后,根据裁剪得到的叶节点得到对应的激光点云数据分块,采用视觉感知驱动的最优细节层次自动确定方法,计算出每个点云分块应绘制激光点总数draw_num,实现方法为,设在屏幕上绘制的最小目标半径为min_radius,min_radius根据具体显示分辨率设置,按公式(29)计算出为达到最优绘制细节层次,每个分块应绘制激光点总数draw_num,
draw_num=Rscreen/min_radius                   (30)
最后,逐块绘制与裁剪得到的叶节点对应的激光点云数据分块,如果当前绘制的激光点云数据分块的应绘制激光点数draw_num大于激光点云数据分块中的总点数,则绘制该激光点云数据分块中全部的激光点;如果应绘制激光点总数draw_num小于激光点云数据分块中的总点数,则随机提取该激光点云数据分块中draw_num个激光点进行绘制,绘制方式为遍历提取激光点云数据分块中的点,然后判断该点是否在裁剪框内,如果在就绘制该点,直到已绘制的点数达到应绘制激光点数draw_num或者该激光点云数据分块中的全部点遍历完。
实施例将目视可区分的最小目标半径设置为1个像素,利用公式(31)、(32)、(33)计算每个裁剪得到的激光点云数据分块中需要绘制的激光点数,并进行绘制。当激光点云数据分块较小时,可以不遍历判断块中的点是否在裁剪框内,直接随机提取块中draw_num个激光点进行绘制,这样效率较高。
为了实现海量点云的实时高质量绘制,本发明实施例在绘制时采用渐进绘制技术和渲染时间控制,实现海量点云数据的绘制,并利用外部事件监控器来监控用户输入,优先响应用户操作,保证对海量点云数据绘制的同时能够及时响应用户操作。所述渐进式绘制技术,是最初绘制点云数据的粗略概况,然后逐渐精化;并利用双缓冲绘制方法,每次绘制都先绘制到后备缓冲上,然后进行前后缓冲的交换,以避免在绘制过程中出现抖动现象。渐进式绘制技术和双缓冲绘制方法为现有技术,本发明不予赘述。所述渲染时间控制,是通过一个监控器来监控当前外部输入事件,当无交互请求时,则分配一段时间给渲染器进行点云绘制,当收到用户交互请求时,则将渲染器挂起,保证优先响应用户请求。图8给出了实施例中基于渲染时间控制的点云绘制流程图,可供实施参考:当发出渲染请求,请求渲染时间时,监控器判断是否有用户交互,无则分配渲染时间,由渲染器执行渲染,有则处理交互请求,然后删除事件队列,等待下次判断。
本发明中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

Claims (4)

1.一种基于四叉树索引的海量机载激光扫描点云实时绘制方法,其特征在于,包括以下步骤:
步骤1,对原始的激光点云数据建立四叉树索引,具体包括以下步骤,
步骤1.1,根据激光点云数据包围盒范围和总点数,计算激光点云数据的平均点密度;所述激光点云数据包围盒范围采用激光点云数据的包围盒的长度length和宽度width标记,总点数记为ptNum,激光点云数据的平均点密度density按公式(1)算得;
density = ptNum length &times; width - - - ( 1 )
步骤1.2,根据激光点云数据包围盒的长度length、宽度width以及步骤1.1所得平均点密度density,计算激光点云数据分块的长度l和宽度w,以及四叉树深度depth;其中
l = height 2 depth (2)
w = width 2 depth
l×w×density≤max_ptNum                    (3)
即预先设定阈值max_ptNum,每一个激光点云数据分块中的激光点总点数l×w×density不能超过阈值max_ptNum;
步骤1.3,利用步骤1.2所得激光点云数据分块的长度l和宽度w对激光点云数据进行网格分块,得到多个激光点云数据分块;
所述网络分块的实现方式为,设激光点云数据中某个激光点的坐标为(x,y,z),整个激光点云数据的包围盒左下角坐标为(bbmin_x,bbmin_y),则根据公式(4)计算出每个激光点所属的分块号,其中col_No为分块的列号,row_No为分块的行号,
col_No=(x-bbmin_x)/w
                        (4)
row_No=(y-bbmin_y)/l
步骤1.4,首先,根据步骤1.2所得四叉树深度depth建立四叉树索引,将每一个激光点云数据分块对应四叉树最底层的一个叶节点,叶节点的指针指向对应激光点云数据分块所含激光点的真实存储位置;每个激光点云数据分块都是一个长度为l、宽度为w的矩形,计算出矩形的外接圆圆心(cell_x,cell_y)和半径cell_r分别作为对应叶子节点的圆心和半径,并 将激光点云分块中的点数cell_ptNum记入相应叶子节点中;从最底层的叶子节点开始逐层向上建立父节点,直到四叉树的根节点时完成四叉树的建立;每个父节点所对应圆的圆心和半径是其所有子节点的外接圆圆心和半径,所包含的激光点数是其子节点中的激光点数之和;
步骤1.5,将步骤1.4中建立的四叉树索引补充为一棵完全的四叉树,将四叉树中不包含激光点云数据的节点标记为dummy;
步骤2,利用步骤1所得四叉树索引对激光点云数据进行绘制,具体包括以下步骤,
步骤2.1,利用四叉树索引实现对激光点云数据的快速视场裁剪,实现方式为在进行点云数据绘制时,只对落入显示区域内的激光点云数据进行绘制,即利用显示区域的包围盒对四叉树索引进行裁剪,裁剪方法是用四叉树中节点的圆心和半径构成的圆与裁剪框进行相交判断,如果圆在裁剪框内或与裁剪框相交,则表示该节点所包含的激光点数据全部或部分位于显示区域内;如果圆在裁剪框外,则表示该节点包含的激光点数据在显示区域外;裁剪时从根节点开始,如果节点标记为dummy或节点在裁剪框外,则直接跳过该节点;如果节点在裁剪框内,则继续对该节点的子节点进行裁剪直到最底层的叶节点,得到落入裁剪框的所有节点;
步骤2.2,在绘制细节控制下对步骤2.1所得剪裁结果进行实时绘制,实现方式如下,
首先,根据叶节点的半径cell_r,按公式(5)计算出叶节点投影到屏幕上的半径Rscreen
Rscreen=cell_r×scale                        (6)
其中,scale为投影转换的尺度参数,由当前裁剪框范围与在屏幕上的显示窗口大小计算得到;
设裁剪框的长度为clipping_len,显示窗口长度为viewport_len,按公式(7)计算scale,
scale=viewport_len/clipping_len              (8)
然后,根据裁剪得到的叶节点得到对应的激光点云数据分块,采用视觉感知驱动的最优细节层次自动确定方法,计算出每个点云分块应绘制激光点总数draw_num,实现方法为,设在屏幕上绘制的最小目标半径为min_radius,min_radius根据具体显示分辨率设置,按公式(9)计算出为达到最优绘制细节层次,每个分块应绘制激光点总数draw_num,
draw_num=Rscreen/min_radius                (10)
最后,逐块绘制与裁剪得到的叶节点对应的激光点云数据分块,如果当前绘制的激光点云数据分块的应绘制激光点数draw_num大于激光点云数据分块中的总点数,则绘制该激光点云数据分块中全部的激光点;如果应绘制激光点总数draw_num小于激光点云数据分块中的总点数,则随机提取该激光点云数据分块中draw_num个激光点进行绘制,绘制方式为遍历提取激光点云数据分块中的点,然后判断该点是否在裁剪框内,如果在就绘制该点,直到已绘制的点数达到应绘制激光点数draw_num或者该激光点云数据分块中的全部点遍历完。
2.如权利要求1所述的海量机载激光扫描点云实时绘制方法,其特征在于:在步骤1.5建立完整的四叉树之后,为四叉树的所有节点编写索引号后进行序列化,即将步骤1.5中所得四叉树中的节点按照节点索引号顺序存储到文件中,形成线性四叉树;在步骤2.2提取激光点云数据分块中激光点进行绘制时,用索引号计算出相应叶节点在文件中的位置,从而直接提取激光点云数据分块中激光点。
3.如权利要求2所述的海量机载激光扫描点云实时绘制方法,其特征在于:由于四叉树中的每个父节点都具有四个子节点,设四个子节点将父节点所覆盖的空间划分为四个象限,根据象限实现编写索引号,实现过程如下,
设定四叉树中的某个节点的索引号cell_idx,其父节点索引号parent_idx,该节点所在其父节点的象限号quadrant通过比较该节点的圆心位置(cell_x,cell_y)与父节点的圆心位置(parent_x,parent_y)来计算,计算方法见(11);该节点的索引号cell_idx根据父节点索引号parent_idx及所在父节点的象限号quadrant计算得到,计算方法见公式(12);将四叉树的根节点的编号设为0,自根节点开始,逐层向下计算各个节点的索引号;
quadrant = 1 cell _ x < parent _ x , cell _ y > parent _ y 2 cell _ x < parent _ x , cell _ y < parent _ y 3 cell _ x > parent _ x , cell _ y < parent _ y 4 cell _ x > parent _ x , cell _ y > parent _ y - - - ( 13 )
cell_idx=4×parent_idx+quadrant                     (14)。
4.如权利要求1或2或3所述的海量机载激光扫描点云实时绘制方法,其特征在于:在步骤2中,通过渐进绘制技术和渲染时间控制,实现海量点云数据的实时交互;
所述渐进式绘制技术,是最初绘制点云数据的粗略概况,然后逐渐精化;并利用双缓冲绘制方法,每次绘制都先绘制到后备缓冲上,然后进行前后缓冲的交换,以避免在绘制过程中出现抖动现象;
所述渲染时间控制,是通过一个监控器来监控当前外部输入事件,当无交互请求时,则分配一段时间给渲染器进行点云绘制,当收到用户交互请求时,则将渲染器挂起,保证优先响应用户请求。
CN2010102451375A 2010-08-03 2010-08-03 一种基于四叉树索引的海量激光扫描点云实时绘制方法 Expired - Fee Related CN101908068B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102451375A CN101908068B (zh) 2010-08-03 2010-08-03 一种基于四叉树索引的海量激光扫描点云实时绘制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102451375A CN101908068B (zh) 2010-08-03 2010-08-03 一种基于四叉树索引的海量激光扫描点云实时绘制方法

Publications (2)

Publication Number Publication Date
CN101908068A true CN101908068A (zh) 2010-12-08
CN101908068B CN101908068B (zh) 2012-05-23

Family

ID=43263528

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102451375A Expired - Fee Related CN101908068B (zh) 2010-08-03 2010-08-03 一种基于四叉树索引的海量激光扫描点云实时绘制方法

Country Status (1)

Country Link
CN (1) CN101908068B (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722640A (zh) * 2012-05-24 2012-10-10 中交第二公路勘察设计研究院有限公司 一种顾及邻近波形信息的机载激光波形数据分解算法
CN103544249A (zh) * 2013-10-11 2014-01-29 北京建筑大学 一种古建筑散乱点云空间索引的方法
CN104050283A (zh) * 2014-06-27 2014-09-17 浙江大学 一种适用于高维散乱点云的索引查询方法
CN105808672A (zh) * 2016-03-01 2016-07-27 重庆市勘测院 基于浏览器的海量三维点云数据的发布方法
CN106780748A (zh) * 2016-11-29 2017-05-31 北京航空航天大学 一种基于网格关联的四叉树索引点云排序方法
CN106875364A (zh) * 2017-02-23 2017-06-20 深圳飞马机器人科技有限公司 一种真正射影像生成方法
CN107038687A (zh) * 2016-10-12 2017-08-11 深圳市数字城市工程研究中心 抽稀图像的生成方法及装置
CN107346215A (zh) * 2017-05-10 2017-11-14 国网浙江省电力公司宁波供电公司 点云显示方法和设备
CN107729494A (zh) * 2017-10-18 2018-02-23 北京中遥地网信息技术有限公司 一种基于z型空间曲线映射的poi检索方法
CN107943961A (zh) * 2017-11-27 2018-04-20 武汉地普三维科技有限公司 一种基于Web的海量点云渲染方法
CN108470374A (zh) * 2018-04-08 2018-08-31 中煤航测遥感集团有限公司 海量点云数据处理方法及装置
CN108718409A (zh) * 2018-06-11 2018-10-30 齐齐哈尔大学 基于块方向提升小波及自适应四叉树编码的遥感影像压缩方法
CN110543709A (zh) * 2019-08-22 2019-12-06 新疆大学 复杂零件激光熔覆干涉检测及轨迹修正方法
CN111736167A (zh) * 2019-03-25 2020-10-02 北京京东尚科信息技术有限公司 一种获取激光点云密度的方法和装置
WO2020248187A1 (zh) * 2019-06-13 2020-12-17 深圳市大疆创新科技有限公司 一种点云编码方法、点云解码方法及相关设备
CN113094536A (zh) * 2021-04-19 2021-07-09 国网北京市电力公司 基于电网gim的输电杆塔轻量化展示方法与装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101702200A (zh) * 2009-11-03 2010-05-05 武汉大学 一种机载激光雷达点云数据的自动分类方法
CN101702023A (zh) * 2009-11-03 2010-05-05 武汉大学 基于文件的机载激光雷达点云数据快速显示方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101702200A (zh) * 2009-11-03 2010-05-05 武汉大学 一种机载激光雷达点云数据的自动分类方法
CN101702023A (zh) * 2009-11-03 2010-05-05 武汉大学 基于文件的机载激光雷达点云数据快速显示方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《武汉大学学报(信息科学版)》 20051130 黄先锋 陶闯 江万寿 龚健雅 机载激光雷达点云数据的实时渲染 975-978 第30卷, 第11期 2 *
《计算机工程与应用》 20100321 支晓栋 林宗坚 苏国中 钟良 基于改进四叉树的LiDAR点云数据组织研究 71-74 第46卷, 第9期 2 *

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722640A (zh) * 2012-05-24 2012-10-10 中交第二公路勘察设计研究院有限公司 一种顾及邻近波形信息的机载激光波形数据分解算法
CN102722640B (zh) * 2012-05-24 2014-10-15 中交第二公路勘察设计研究院有限公司 一种顾及邻近波形信息的机载激光波形数据分解算法
CN103544249A (zh) * 2013-10-11 2014-01-29 北京建筑大学 一种古建筑散乱点云空间索引的方法
CN103544249B (zh) * 2013-10-11 2017-01-04 北京建筑大学 一种古建筑散乱点云空间索引的方法
CN104050283A (zh) * 2014-06-27 2014-09-17 浙江大学 一种适用于高维散乱点云的索引查询方法
CN105808672A (zh) * 2016-03-01 2016-07-27 重庆市勘测院 基于浏览器的海量三维点云数据的发布方法
CN105808672B (zh) * 2016-03-01 2019-01-18 重庆市勘测院 基于浏览器的海量三维点云数据的发布方法
CN107038687B (zh) * 2016-10-12 2020-04-24 深圳市数字城市工程研究中心 抽稀图像的生成方法及装置
CN107038687A (zh) * 2016-10-12 2017-08-11 深圳市数字城市工程研究中心 抽稀图像的生成方法及装置
CN106780748A (zh) * 2016-11-29 2017-05-31 北京航空航天大学 一种基于网格关联的四叉树索引点云排序方法
CN106875364A (zh) * 2017-02-23 2017-06-20 深圳飞马机器人科技有限公司 一种真正射影像生成方法
CN106875364B (zh) * 2017-02-23 2019-07-26 深圳飞马机器人科技有限公司 一种真正射影像生成方法
CN107346215A (zh) * 2017-05-10 2017-11-14 国网浙江省电力公司宁波供电公司 点云显示方法和设备
CN107729494A (zh) * 2017-10-18 2018-02-23 北京中遥地网信息技术有限公司 一种基于z型空间曲线映射的poi检索方法
CN107943961A (zh) * 2017-11-27 2018-04-20 武汉地普三维科技有限公司 一种基于Web的海量点云渲染方法
CN108470374A (zh) * 2018-04-08 2018-08-31 中煤航测遥感集团有限公司 海量点云数据处理方法及装置
CN108470374B (zh) * 2018-04-08 2022-03-25 中煤航测遥感集团有限公司 海量点云数据处理方法及装置
CN108718409A (zh) * 2018-06-11 2018-10-30 齐齐哈尔大学 基于块方向提升小波及自适应四叉树编码的遥感影像压缩方法
CN108718409B (zh) * 2018-06-11 2020-09-18 齐齐哈尔大学 一种遥感影像压缩方法
CN111736167A (zh) * 2019-03-25 2020-10-02 北京京东尚科信息技术有限公司 一种获取激光点云密度的方法和装置
CN111736167B (zh) * 2019-03-25 2024-04-12 北京京东乾石科技有限公司 一种获取激光点云密度的方法和装置
WO2020248187A1 (zh) * 2019-06-13 2020-12-17 深圳市大疆创新科技有限公司 一种点云编码方法、点云解码方法及相关设备
CN110543709A (zh) * 2019-08-22 2019-12-06 新疆大学 复杂零件激光熔覆干涉检测及轨迹修正方法
CN110543709B (zh) * 2019-08-22 2023-08-04 新疆大学 复杂零件激光熔覆干涉检测及轨迹修正方法
CN113094536A (zh) * 2021-04-19 2021-07-09 国网北京市电力公司 基于电网gim的输电杆塔轻量化展示方法与装置
CN113094536B (zh) * 2021-04-19 2023-10-27 国网北京市电力公司 基于电网gim的输电杆塔轻量化展示方法与装置

Also Published As

Publication number Publication date
CN101908068B (zh) 2012-05-23

Similar Documents

Publication Publication Date Title
CN101908068B (zh) 一种基于四叉树索引的海量激光扫描点云实时绘制方法
CN110738721B (zh) 基于视频几何分析的三维场景渲染加速方法及系统
CN110910505B (zh) 一种场景模型的加速渲染方法
CN102663801B (zh) 一种提高三维模型渲染性能的方法
CN100514369C (zh) 一种基于非均匀空间划分的场景可见性裁剪方法
CN108520557B (zh) 一种图形图像融合的海量建筑绘制方法
US8391610B2 (en) Rapid, spatial-data viewing and manipulating including data partition and indexing
US11532123B2 (en) Method for visualizing large-scale point cloud based on normal
KR100452089B1 (ko) 게임 화면을 갱신하기 위한 오브젝트를 로딩하는 이미지리소스 로딩 시스템 및 이미지 리소스 로딩 방법
CN104778744B (zh) 基于Lidar数据的大规模三维森林可视化场景建立方法
EP2282245B9 (en) Cutting process simulation display device, method for displaying cutting process simulation, and cutting process simulation display program
CN102855661B (zh) 基于空间相似性的大规模森林场景快速生成方法
CN107590226A (zh) 一种基于瓦片的矢量地图渲染方法
CN112308974A (zh) 一种改进八叉树和自适应读取的大规模点云可视化方法
CN105260523B (zh) 一种分布式并行空间可视域分析方法
CN107358579B (zh) 一种游戏战争迷雾实现方法
CN112396682B (zh) 一种三维场景下视觉递进的模型浏览方法
CN105261066A (zh) 一种三维地理信息系统实时绘制多线程分配与控制方法
CN102651141A (zh) 一种大场景中矢量地图与高分辨率数字高程模型自动叠加渲染的方法
CN110111408A (zh) 基于图形学的大场景快速求交方法
CN101770655B (zh) 一种大规模虚拟动态场景简化方法
CN103268342A (zh) 基于cuda的dem动态可视化加速系统和方法
CN109636889A (zh) 一种基于动态缝合带的大规模三维地形模型渲染方法
JP5992354B2 (ja) 3次元地図表示システム
CN117726777B (zh) 无人机航线优化方法、装置及计算机存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120523

Termination date: 20130803