CN113870402A - 一种基于八叉树索引的海量点云分层实时渲染方法 - Google Patents
一种基于八叉树索引的海量点云分层实时渲染方法 Download PDFInfo
- Publication number
- CN113870402A CN113870402A CN202111066203.7A CN202111066203A CN113870402A CN 113870402 A CN113870402 A CN 113870402A CN 202111066203 A CN202111066203 A CN 202111066203A CN 113870402 A CN113870402 A CN 113870402A
- Authority
- CN
- China
- Prior art keywords
- point cloud
- point
- index
- points
- block
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000009877 rendering Methods 0.000 title claims abstract description 21
- 238000005070 sampling Methods 0.000 claims abstract description 53
- 230000000903 blocking effect Effects 0.000 claims abstract description 17
- 238000000638 solvent extraction Methods 0.000 claims abstract description 9
- 238000010276 construction Methods 0.000 claims abstract description 8
- 230000008569 process Effects 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 11
- 230000011218 segmentation Effects 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000007499 fusion processing Methods 0.000 claims description 6
- 238000013507 mapping Methods 0.000 claims description 4
- 230000007246 mechanism Effects 0.000 claims description 3
- 238000011426 transformation method Methods 0.000 claims description 3
- 238000012800 visualization Methods 0.000 abstract description 3
- 230000004927 fusion Effects 0.000 abstract description 2
- 230000007547 defect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/56—Particle system, point based geometry or rendering
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种基于八叉树索引的海量点云分层实时渲染方法。三维激光扫描数据量往往达到GB甚至TB级,若点云不能做到实时刷新,则不能满足海量点云可视化的需求。本发明包括点云三维格网分块、结合八叉树特征的微小点云块融合、点云分块二进制bin文件动态输出、点云分块二进制bin文件的多级索引构建、泊松圆盘均匀采样、层次结构输出与点云实时分层调度渲染六大步骤。本发明对点云文件进行三维格网分块,大大减少了内存消费,提高了索引查询效率;采用改进泊松圆盘采样策略,避免了数据冗余。
Description
技术领域
本发明属于三维激光扫描数据处理技术领域,涉及一种基于八叉树索引的海量点云分层实时渲染方法。
背景技术
目前三维激光扫描技术可用于文物数字化保护、土木工程、工业测量、自然灾害调查、数字城市地形可视化、城乡规划等领域,其数据量往往达到GB甚至TB级,而常用的电脑内存只有4-16GB,无法将点云数据一次性加载,需要对海量点云进行管理及调度。目前常用KD树、R树、四叉树、八叉树等,并结合金字塔结构对点云构建索引,而索引构建的好坏直接影响对点云数据的组织查询效率,若点云不能做到实时刷新,则不能满足海量点云可视化的需求。
专利CN104750854B公开了一种海量三维激光点云压缩存储及快速加载显示方法,通过采集点云数据总体结构、按照不同级别对数据进行分类、压缩,每一级别包括块集、块和包三级索引,实现高度存储和快速加载显示,但其在点云分块时未考虑点云文件数据大小,及点云稀疏分布的特点,会造成很多的空包与内存浪费等。
专利CN106407408B、CN105808672等公开了一种海量点云数据的空间索引构建方法及装置对获取的原始点云数据进行分块处理,得到多个点云数据块;对于每个点云数据块,构建当前点云数据块的八叉树索引;将多个点云数据块的八叉树索引进行合并处理,得到原始点云数据的空间索引结构,但其在点云八叉树金字塔结构建立过程中,不同层存在交集,造成数据冗余;且其采用随机采样方法,造成抽稀的点云数据不均匀。
发明内容
为了弥补现有技术的不足,本发明提供一种基于八叉树索引的海量点云分层实时渲染方法,减少了内存消费,提高了索引查询效率且避免数据冗余。
为了达到上述目的,本发明所采用的技术方案为:
一种基于八叉树索引的海量点云分层实时渲染方法,包括如下步骤:
步骤一:点云三维格网分块;
步骤二:结合八叉树特征的微小点云块融合;
步骤三:点云分块二进制bin文件动态输出;
步骤四:点云分块二进制bin文件的多级索引构建;
步骤五:泊松圆盘均匀采样;
步骤六:层次结构输出与点云实时分层调度渲染。
具体地,步骤一包括如下步骤:
1)根据点云文件头记录的坐标范围及点云个数,定义三维空间格网单元的边长大小;依据所述三维空间格网单元的边长大小,定义三维格网线性编码数组;
2)固定读取点云文件中一百万个点,依据数据的地址位链接访问所述一百万个点的点坐标,并定义线程池,采用多线程机制动态循环并行读取点云数据;
3)根据点云文件头记录的坐标范围,计算每个点在三维格网中的位置索引及线性索引编码;以线性编码方式进行单元块的映射,并分别统计落入各个三维网格单位中的点个数;
所述每个点在三维格网中的位置索引计算公式如下:
posSize=(Max-Min).max()
所述每个点在三维格网中的线性索引编码计算公式如下:
index=nx+ny*gridSize+nz*gridSize*gridSize
式中,index—各点线性索引编码;(nx,ny,nz)—各点位置索引;gridSize—三维空间格网单元的边长大小;posSize—三维坐标差最大值。
具体地,步骤二包括如下步骤:
1)定义点云块点个数阈值threshold1,以所述三维空间格网单元边长的对数作为金字塔最大分层levelmax;
2)从所述金字塔最大分层开始从下往上层级循环,依据所述每个点在三维格网中的位置索引及线性索引编码,访问各点的八个临近节点,计算八个单元块点个数总和;
3)若所述八个单元块点个数总和小于等于点云块点个数阈值threshold1,进行块融合处理;若所述八个单元块点个数总和大于点云块点个数阈值threshold1,根据位置编码及当前层级,保存各个节点node,建立对应的节点查询索引编码luIndex,并设置标识符flag=true,表示此单元块已完成融合;所述保存各个节点node方法如下:
位置编码索引(mx,my,mz)定义公式如下:
式中,位置编码(ox,oy,oz)的值为{(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)};i=0,1,2,3,4,5,6,7;nx/ny/nz为三维格网坐标轴的单元序号;
所述节点查询索引编码定义公式如下:
式中,currentGridsize=2level,luIndex的初始值为0
4)逐层循环步骤2)和3)获得具有金字塔结构的八叉树点云分块结果;
5)根据存储的分块节点node,完成三维格网合并后索引的构建,后续每个点坐标落入对应块建立查询表,即完成三维格网点云块的融合处理。
具体地,步骤三包括如下步骤:
1)对读取的固定点个数进行循环,根据每个点坐标在三维格网中的线性编码及所述查询表,判断每个点落入的点云块节点;
2)对点云坐标减去坐标范围的最小值,并与比例尺相除,取整的结果以二进制格式输出到文件中,其中二进制文件以步骤二中获得的查询索引编码luIndex命名;
3)利用多线程方式在内存中完成数据读取和输出的动态过程,且实时对各个文件的属性值进行更新,最终获得输出到外存中的各个分块节点的二进制bin文件。
具体地,步骤四包括如下步骤:
1)读取输出的点云分块二进制bin文件,将单个bin文件作为根节点,进行点云格网分块计数;定义最大分层为level=5,则格网单元边长为32;
2)点云分块计数过程中采用线性八叉树的Morton编码,存储点数据;
3)对分块的点云从下往上循环建立金字塔层级结构8level,依据地址码索引,计算其相邻八个子节点的点个数之和sum,作为上一层的点云块索引值,由此建立统计金字塔sumPyramid;
4)在完成点云分层计数后,定义点云块点个数阈值threshold2,所述点云块点个数阈值threshold2小于点云块点个数阈值threshold1;从上往下判断各个点云块点个数是否大于设定的点云块点个数阈值threshold2;
5)若点云块点个数小于等于点云块点个数阈值threshold2,与微小点云块融合不同,此时记录点云块为节点node;为节点结构设置比特掩码bit-mask,来确定子节点是否为空,并记录节点查询索引编码、地址码起始位、点个数、层级、位置编码等属性信息;
6)若点云块点个数大于点云块点个数阈值threshold2,则通过Morton地址码访问下一层阶对应的统计金字塔sumPyramid;
依据4)、5)、6),直到检索到最底层金字塔;若点云块点个数大于点云块点个数阈值threshold2,则判定此点云块为新的根节点,重复上述点云格网分块、金字塔分层计数步骤。
具体地,步骤五包括如下步骤:
1)根据三维格网范围大小,设定最大采样间距s,对不同层级level,自适应最小采样半径r=s/2level;
2)以bin文件的范围中心为枢纽,以点到中心的距离从小到大进行排序;
3)以经过排序后点云数组中第一个点作为采样点,当候选点Pt到中心点center的距离与任何一个采样点到中心点的距离差值都大于指定采样半径r或候选点与所有采样点的距离差均大于采样半径r时,将候选点添加到采样点数组中;反之,将候选点作为非采样点;对所有候选点重复以上步骤;
4)将非采样点数组保存为level层的点云,输出采样后的节点数据到二进制文件result.bin中,并记录点个数、字节大小,以不断更新累加的输出点云字节总大小作为地址起始位进行数据的输出存储,完成多个bin文件的合并处理;
5)将采样点更新为高一级即level-1层的点云,并重复上述步骤1)、2)、3)、4),完成八叉树点云块的金字塔分层抽稀。
具体地,步骤六包括如下步骤:
1)在bin文件的层级采样过程中,对建立的层次结构索引进行输出;
2)对层次结构信息输出定义:节点命名+比特掩码+点个数+地址起始位+字节大小+节点坐标范围最小值+节点坐标范围最大值,定义公式如下:
3)根据视口范围,判断节点是否落入视野内,并设定点云密度,读取输出的result.bin文件,自适应加载对应金字塔层级的点云数据;
4)采用直方图均衡化方法,对读取的点云数据进行灰度值统计,获得每个灰度值的概率分布,最后进行动态范围的扩展,完成灰度直方图的对比度拉伸处理;
5)采取灰度分割法或灰度彩色变换法完成伪彩色渲染。
本发明的有益效果:
1)考虑到点云数据量超过100GB、甚至TB级别时,常规方法只对点云进行一次格网划分,在构建索引及后续查询时,会造成时间消耗,甚至会造成内存卡顿;本发明对点云文件进行三维格网分块,定义的格网边长不需太大,且将点数较少的格网单元合并到临近网格中;完成索引构建及二进制bin文件输出后,分别读取输出的bin文件,并将单个bin文件作为根节点,再次进行点云格网分块计数,大大减少了内存消费,提高了索引查询效率;
2)在对三维格网进行分块计数过程中,建立了三维线性索引编码,并利用线性八叉树的数据压缩功能,通过Morton地址码访问相邻子节点,从下往上循环建立具有金字塔层级结构的八叉树点云节点结构,同时为避免不需要的映射关联,为节点结构设置了比特掩码bit-mask等;
3)本发明采用改进泊松圆盘采样策略,定义自适应最小采样半径,从下而上对二进制文件进行金字塔分层抽稀处理,最终可得到均匀分布的采样点,且不同金字塔层点云属于并集关系,不存在交叉,避免了数据冗余。
附图说明
图1是本发明总流程图;
图2是三维格网分块及单元合并结果俯视图;
图3是三维格网分块及单元合并结果侧视图;
图4是金字塔不同分层结果示例图;
图5是泊松圆盘采样点与候选点判断示意图;
图6是金字塔分层采样二维简化图。
具体实施方式
下面结合具体实施方式对本发明进行详细的说明。
本实施例以las点云文件为基础,其文件大小为28GB,共11亿个点;如图1本发明总流程图所示,本发明包括如下步骤:
步骤一:点云三维格网分块
1)根据点云文件头记录的坐标范围及点云个数,定义三维空间格网单元的边长大小,格网边长采用256;依据所述三维空间格网单元的边长大小,定义三维格网线性编码数组grid[256*256*256];
2)固定读取点云文件中一百万个点,依据数据的地址位链接访问所述一百万个点的点坐标,并定义线程池,采用多线程机制动态循环并行读取点云数据;
3)根据点云文件头记录的坐标范围,可得三维坐标差最大值posSize=4150,计算每个点在三维格网中的位置索引及线性索引编码;以线性编码方式进行单元块的映射,并分别统计落入各个三维网格单位中的点个数;
所述每个点在三维格网中的位置索引计算公式如下:
posSize=(Max-Min).max()
所述每个点在三维格网中的线性索引编码计算公式如下:
index=nx+ny*gridSize+nz*gridSize*gridSize
式中,index—各点线性索引编码;(nx,ny,nz)—各点位置索引;gridSize—三维空间格网单元的边长大小;
步骤二:结合八叉树特征的微小点云块融合
为减少网格单元中点云数据过少,造成数据块稀疏分布的缺点,结合八叉树结构特征,通过金字塔分层方式对微小点云块进行融合,具体步骤如下:
1)定义点云块点个数阈值threshold1,比如1千万,以所述三维空间格网单元边长的对数log2(gridSize)作为金字塔最大分层levelmax;gridSize取256时,最大层levelmax=8;
2)从所述金字塔最大分层开始从下往上层级循环,依据所述每个点在三维格网中的位置索引及线性索引编码,访问各点的八个临近节点,计算八个单元块点个数总和;
3)若所述八个单元块点个数总和小于等于点云块点个数阈值threshold1,进行块融合处理;若所述八个单元块点个数总和大于点云块点个数阈值threshold1,根据位置编码及当前层级,保存各个节点node,建立对应的节点查询索引编码luIndex,并设置标识符flag=true,表示此单元块已完成融合;所述保存各个节点node方法如下:
位置编码索引(mx,my,mz)定义公式如下:
式中,位置编码(ox,oy,oz)的值为{(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)};i=0,1,2,3,4,5,6,7;nx/ny/nz为三维格网坐标轴的单元序号;
所述节点查询索引编码定义公式如下:
式中,currentGridsize=2level,luIndex的初始值为0
4)逐层循环步骤2)和3)获得具有金字塔结构的八叉树点云分块结果;
5)根据存储的分块节点node,完成三维格网合并后索引的构建,后续每个点坐标落入对应块建立查询表,即完成三维格网点云块的融合处理;如图2与图3所示为对点数较少的单元进行合并后的不规则八叉树格网;
步骤三:点云分块二进制bin文件动态输出
1)对读取的固定点个数进行循环,根据每个点坐标在三维格网中的线性编码及所述查询表,判断每个点落入的点云块节点;
2)为节省存储空间,对点云坐标减去坐标范围的最小值,并与比例尺相除,取整的结果以二进制格式输出到文件中,其中二进制文件以步骤二中获得的查询索引编码luIndex命名;比如r240,即表示此二进制文件落入八叉树的第3层,第1层位于子节点2,第2层以第1层子节点2作为根节点,其位于子节点4,第3层以第2层的子节点4为根节点,其位于子节点0,由此完成bin文件的快速查找;
3)利用多线程方式在内存中完成数据读取和输出的动态过程,且实时对各个文件的属性值进行更新,最终获得输出到外存中的各个分块节点的二进制bin文件。
步骤四:点云分块二进制bin文件的多级索引构建
为减小后续对点云浏览时内存调用,以及优化点云密度较大块的处理效果,需对输出的分块bin文件进行金字塔多级索引构建处理,具体步骤如下:
1)读取输出的点云分块二进制bin文件,将单个bin文件作为根节点,进行点云格网分块计数;定义最大分层为level=5,则格网单元边长为32;这种处理方式避免了总数据量达到TB级时容易出错崩溃问题,且大大提高了索引查询效率;
2)为对点云数据进一步压缩,点云分块计数过程中采用线性八叉树的Morton编码,存储点数据;
3)对分块的点云从下往上循环建立金字塔层级结构8level,依据地址码索引,可计算其相邻八个子节点即0-7点云块的点个数之和sum,作为上一层的点云块索引值,由此建立统计金字塔sumPyramid;
4)在完成点云分层计数后,定义点云块点个数阈值threshold2,所述点云块点个数阈值threshold2小于点云块点个数阈值threshold1;从上往下判断各个点云块点个数是否大于设定的点云块点个数阈值threshold2;
5)若点云块点个数小于等于点云块点个数阈值threshold2,与微小点云块融合不同,此时记录点云块为节点node;为节点结构设置比特掩码bit-mask,来确定子节点是否为空,并记录节点查询索引编码、地址码起始位、点个数、层级、位置编码等属性信息;
6)若点云块点个数大于点云块点个数阈值threshold2,则通过Morton地址码访问下一层阶对应的统计金字塔sumPyramid;
依据4)、5)、6),直到检索到最底层金字塔;若点云块点个数仍大于点云块点个数阈值threshold2,则判定此点云块为新的根节点,重复上述点云格网分块、金字塔分层计数步骤,即点密度越大的节点块,分层层级越深;
通过线性八叉树对bin文件进行金字塔分块分层处理,即可反应八叉树的层次关系,对应的分割节点node记录了对bin文件的访问起始地址、字节大小等属性,又达到了数据的快速检索目的
步骤五:泊松圆盘均匀采样
完成bin文件的node多级索引构建后,从下而上对bin文件进行金字塔分层抽稀处理。为解决随机采样造成数据采样不均匀的缺点,本专利采用泊松圆盘采样方法对建立的金字塔进行分层均匀采样策略,具体步骤如下:
1)根据三维格网范围大小,设定最大采样间距s,比如利用点云坐标最大范围与三维格网分割时设置的格网大小相除,本实施例点云最大范围为4150米,格网大小256,则最大采样距离s设置为16.21米,对不同层级level,自适应最小采样半径r=s/2level,即从下而上,采样半径逐渐变大;深度越深,分辨率越高,细节越丰富;
2)以bin文件的范围中心为枢纽,以点到中心的距离从小到大进行排序;
3)以经过排序后点云数组中第一个点作为采样点,当候选点Pt到中心点center的距离与任何一个采样点到中心点的距离差值都大于指定采样半径r或候选点与所有采样点的距离差均大于采样半径r时,将候选点添加到采样点数组中;反之,将候选点作为非采样点;对所有候选点重复以上步骤;
4)将非采样点数组保存为level层的点云,输出采样后的节点数据到二进制文件result.bin中,并记录点个数、字节大小,以不断更新累加的输出点云字节总大小作为地址起始位进行数据的输出存储,完成多个bin文件的合并处理;
5)将采样点更新为高一级即level-1层的点云,并重复上述步骤1)、2)、3)、4),完成八叉树点云块的金字塔分层抽稀,如图6所示,最顶层level0点云最少,越往下点密度越大,细节越丰富,此方法不仅可获得均匀分布的点云数据,且不同层的点云数据并集存储,不存在交集(level0∩level1∩level2∩…=null),又避免了数据保存的冗余;
步骤六:层次结构输出与点云实时分层调度渲染
1)在bin文件的层级采样过程中,对建立的层次结构索引进行输出,以方便后续点云分层实时调用;
2)对层次结构信息输出定义:节点命名+比特掩码+点个数+地址起始位+字节大小+节点坐标范围最小值+节点坐标范围最大值,定义公式如下:
3)根据视口范围,判断节点是否落入视野内,并设定点云密度,读取输出的result.bin文件,自适应加载对应金字塔层级的点云数据,以减少内存调用,实现近密远稀;
4)点云数据存储了强度信息,可进行灰度渲染,但有时地物点云颜色对比不明显,本专利采用直方图均衡化方法,对读取的点云数据进行灰度值统计,获得每个灰度值的概率分布,最后进行动态范围的扩展,完成灰度直方图的对比度拉伸处理;
5)点云灰度值只分布在0-255区间,采取灰度分割法或灰度彩色变换法完成伪彩色渲染。
本发明的内容不限于实施例所列举,本领域普通技术人员通过阅读本发明说明书而对本发明技术方案采取的任何等效的变换,均为本发明的权利要求所涵盖。
Claims (7)
1.一种基于八叉树索引的海量点云分层实时渲染方法,其特征在于:包括如下步骤:
步骤一:点云三维格网分块;
步骤二:结合八叉树特征的微小点云块融合;
步骤三:点云分块二进制bin文件动态输出;
步骤四:点云分块二进制bin文件的多级索引构建;
步骤五:泊松圆盘均匀采样;
步骤六:层次结构输出与点云实时分层调度渲染。
2.根据权利要求1所述的一种基于八叉树索引的海量点云分层实时渲染方法,其特征在于:所述步骤一包括如下步骤:
1)根据点云文件头记录的坐标范围及点云个数,定义三维空间格网单元的边长大小;依据所述三维空间格网单元的边长大小,定义三维格网线性编码数组;
2)固定读取点云文件中一百万个点,依据数据的地址位链接访问所述一百万个点的点坐标,并定义线程池,采用多线程机制动态循环并行读取点云数据;
3)根据点云文件头记录的坐标范围,计算每个点在三维格网中的位置索引及线性索引编码;以线性编码方式进行单元块的映射,并分别统计落入各个三维网格单位中的点个数;
所述每个点在三维格网中的位置索引计算公式如下:
posSize=(Max-Min).max()
所述每个点在三维格网中的线性索引编码计算公式如下:
index=nx+ny*gridSize+nz*gridSize*gridSize
式中,index—各点线性索引编码;(nx,ny,nz)—各点位置索引;gridSize—三维空间格网单元的边长大小;posSize—三维坐标差最大值。
3.根据权利要求1所述的一种基于八叉树索引的海量点云分层实时渲染方法,其特征在于:所述步骤二包括如下步骤:
1)定义点云块点个数阈值threshold1,以所述三维空间格网单元边长的对数作为金字塔最大分层levelmax;
2)从所述金字塔最大分层开始从下往上层级循环,依据所述每个点在三维格网中的位置索引及线性索引编码,访问各点的八个临近节点,计算八个单元块点个数总和;
3)若所述八个单元块点个数总和小于等于点云块点个数阈值threshold1,进行块融合处理;若所述八个单元块点个数总和大于点云块点个数阈值threshold1,根据位置编码及当前层级,保存各个节点node,建立对应的节点查询索引编码luIndex,并设置标识符flag=true,表示此单元块已完成融合;所述保存各个节点node方法如下:
位置编码索引(mx,my,mz)定义公式如下:
式中,位置编码(ox,oy,oz)的值为{(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)};i=0,1,2,3,4,5,6,7;nx/ny/nz为三维格网坐标轴的单元序号;
所述节点查询索引编码定义公式如下:
式中,currentGridsize=2level,luIndex的初始值为0
4)逐层循环步骤2)和3)获得具有金字塔结构的八叉树点云分块结果;
5)根据存储的分块节点node,完成三维格网合并后索引的构建,后续每个点坐标落入对应块建立查询表,即完成三维格网点云块的融合处理。
4.根据权利要求1所述的一种基于八叉树索引的海量点云分层实时渲染方法,其特征在于:所述步骤三包括如下步骤:
1)对读取的固定点个数进行循环,根据每个点坐标在三维格网中的线性编码及所述查询表,判断每个点落入的点云块节点;
2)对点云坐标减去坐标范围的最小值,并与比例尺相除,取整的结果以二进制格式输出到文件中,其中二进制文件以步骤二中获得的查询索引编码luIndex命名;
3)利用多线程方式在内存中完成数据读取和输出的动态过程,且实时对各个文件的属性值进行更新,最终获得输出到外存中的各个分块节点的二进制bin文件。
5.根据权利要求1所述的一种基于八叉树索引的海量点云分层实时渲染方法,其特征在于:所述步骤四包括如下步骤:
1)读取输出的点云分块二进制bin文件,将单个bin文件作为根节点,进行点云格网分块计数;定义最大分层为level=5,则格网单元边长为32;
2)点云分块计数过程中采用线性八叉树的Morton编码,存储点数据;
3)对分块的点云从下往上循环建立金字塔层级结构8level,依据地址码索引,计算其相邻八个子节点的点个数之和sum,作为上一层的点云块索引值,由此建立统计金字塔sumPyramid;
4)在完成点云分层计数后,定义点云块点个数阈值threshold2,所述点云块点个数阈值threshold2小于点云块点个数阈值threshold1;从上往下判断各个点云块点个数是否大于设定的点云块点个数阈值threshold2;
5)若点云块点个数小于等于点云块点个数阈值threshold2,与微小点云块融合不同,此时记录点云块为节点node;为节点结构设置比特掩码bit-mask,来确定子节点是否为空,并记录节点查询索引编码、地址码起始位、点个数、层级、位置编码等属性信息;
6)若点云块点个数大于点云块点个数阈值threshold2,则通过Morton地址码访问下一层阶对应的统计金字塔sumPyramid;
依据4)、5)、6),直到检索到最底层金字塔;若点云块点个数大于点云块点个数阈值threshold2,则判定此点云块为新的根节点,重复上述点云格网分块、金字塔分层计数步骤。
6.根据权利要求1所述的一种基于八叉树索引的海量点云分层实时渲染方法,其特征在于:所述步骤五包括如下步骤:
1)根据三维格网范围大小,设定最大采样间距s,对不同层级level,自适应最小采样半径r=s/2level;
2)以bin文件的范围中心为枢纽,以点到中心的距离从小到大进行排序;
3)以经过排序后点云数组中第一个点作为采样点,当候选点Pt到中心点center的距离与任何一个采样点到中心点的距离差值都大于指定采样半径r或候选点与所有采样点的距离差均大于采样半径r时,将候选点添加到采样点数组中;反之,将候选点作为非采样点;对所有候选点重复以上步骤;
4)将非采样点数组保存为level层的点云,输出采样后的节点数据到二进制文件result.bin中,并记录点个数、字节大小,以不断更新累加的输出点云字节总大小作为地址起始位进行数据的输出存储,完成多个bin文件的合并处理;
5)将采样点更新为高一级即level-1层的点云,并重复上述步骤1)、2)、3)、4),完成八叉树点云块的金字塔分层抽稀。
7.根据权利要求1所述的一种基于八叉树索引的海量点云分层实时渲染方法,其特征在于:所述步骤六包括如下步骤:
1)在bin文件的层级采样过程中,对建立的层次结构索引进行输出;
2)对层次结构信息输出定义:节点命名+比特掩码+点个数+地址起始位+字节大小+节点坐标范围最小值+节点坐标范围最大值,定义公式如下:
3)根据视口范围,判断节点是否落入视野内,并设定点云密度,读取输出的result.bin文件,自适应加载对应金字塔层级的点云数据;
4)采用直方图均衡化方法,对读取的点云数据进行灰度值统计,获得每个灰度值的概率分布,最后进行动态范围的扩展,完成灰度直方图的对比度拉伸处理;
5)采取灰度分割法或灰度彩色变换法完成伪彩色渲染。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111066203.7A CN113870402A (zh) | 2021-09-13 | 2021-09-13 | 一种基于八叉树索引的海量点云分层实时渲染方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111066203.7A CN113870402A (zh) | 2021-09-13 | 2021-09-13 | 一种基于八叉树索引的海量点云分层实时渲染方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113870402A true CN113870402A (zh) | 2021-12-31 |
Family
ID=78995366
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111066203.7A Pending CN113870402A (zh) | 2021-09-13 | 2021-09-13 | 一种基于八叉树索引的海量点云分层实时渲染方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113870402A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114494366A (zh) * | 2022-01-19 | 2022-05-13 | 中铁第一勘察设计院集团有限公司 | 一种影像与点云配准的道路坑槽提取方法 |
CN114723898A (zh) * | 2022-06-09 | 2022-07-08 | 天津市天科数创科技股份有限公司 | 大体量点云模型轻量化的方法及装置 |
CN116109470A (zh) * | 2023-04-13 | 2023-05-12 | 深圳市其域创新科技有限公司 | 实时点云数据渲染方法、装置、终端及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808672A (zh) * | 2016-03-01 | 2016-07-27 | 重庆市勘测院 | 基于浏览器的海量三维点云数据的发布方法 |
WO2020232715A1 (zh) * | 2019-05-23 | 2020-11-26 | 深圳市大疆创新科技有限公司 | 点云的实时显示方法、装置和计算机存储介质 |
CN112308974A (zh) * | 2020-10-30 | 2021-02-02 | 南京航空航天大学 | 一种改进八叉树和自适应读取的大规模点云可视化方法 |
-
2021
- 2021-09-13 CN CN202111066203.7A patent/CN113870402A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808672A (zh) * | 2016-03-01 | 2016-07-27 | 重庆市勘测院 | 基于浏览器的海量三维点云数据的发布方法 |
WO2020232715A1 (zh) * | 2019-05-23 | 2020-11-26 | 深圳市大疆创新科技有限公司 | 点云的实时显示方法、装置和计算机存储介质 |
CN112308974A (zh) * | 2020-10-30 | 2021-02-02 | 南京航空航天大学 | 一种改进八叉树和自适应读取的大规模点云可视化方法 |
Non-Patent Citations (1)
Title |
---|
邱炎;梁玉斌;崔铁军;: "基于外存八叉树的三维激光点云实时渲染技术", 天津师范大学学报(自然科学版), no. 03, 30 May 2017 (2017-05-30) * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114494366A (zh) * | 2022-01-19 | 2022-05-13 | 中铁第一勘察设计院集团有限公司 | 一种影像与点云配准的道路坑槽提取方法 |
CN114494366B (zh) * | 2022-01-19 | 2024-04-30 | 中铁第一勘察设计院集团有限公司 | 一种影像与点云配准的道路坑槽提取方法 |
CN114723898A (zh) * | 2022-06-09 | 2022-07-08 | 天津市天科数创科技股份有限公司 | 大体量点云模型轻量化的方法及装置 |
CN114723898B (zh) * | 2022-06-09 | 2022-09-06 | 天津市天科数创科技股份有限公司 | 大体量点云模型轻量化的方法及装置 |
CN116109470A (zh) * | 2023-04-13 | 2023-05-12 | 深圳市其域创新科技有限公司 | 实时点云数据渲染方法、装置、终端及存储介质 |
CN116109470B (zh) * | 2023-04-13 | 2023-06-20 | 深圳市其域创新科技有限公司 | 实时点云数据渲染方法、装置、终端及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113870402A (zh) | 一种基于八叉树索引的海量点云分层实时渲染方法 | |
CN109992636B (zh) | 时空编码方法、时空索引及查询方法及装置 | |
CN106407408B (zh) | 一种海量点云数据的空间索引构建方法及装置 | |
US8363049B2 (en) | 3D image processing method and apparatus for enabling efficient retrieval of neighboring point | |
CN113868476B (zh) | 一种基于局部密度的八叉树点云预处理方法 | |
CN113268557B (zh) | 一种适应显示导向型可视化分析的快速的空间索引方法 | |
CN114387375B (zh) | 一种海量点云数据多视图渲染方法 | |
CN112465949A (zh) | 基于嵌套八叉树的大规模点云数据组织方法 | |
CN113946700A (zh) | 一种时空索引构建方法、装置、计算机设备及存储介质 | |
CN110119408B (zh) | 地理空间实时流数据下移动对象连续查询方法 | |
CN110633262A (zh) | 基于Spark的地图相交区域面积计算方法及系统 | |
US20230281182A1 (en) | R-tree index merging and updating method and apparatus based on hilbert curve, and medium | |
CN110825830B (zh) | 一种网格空间的数据检索方法 | |
CN113178004A (zh) | 一种基于超核八叉树海量点云显示方法 | |
CN110910462B (zh) | 一种基于特征计算的点云轻量化方法及存储介质 | |
CN111552694A (zh) | 一种自适应地理空间网格索引方法 | |
CN114898043A (zh) | 一种激光点云数据瓦片构建方法 | |
CN112069200A (zh) | 一种面向高维时空大数据的多细节层次可视化方法 | |
CN113468286A (zh) | 一种基于三角面片个数划分的三维金字塔构建方法 | |
CN116467540B (zh) | 一种基于HBase的海量空间数据快速可视化方法 | |
CN110533764B (zh) | 面向建筑群的分形四叉树纹理组织方法 | |
CN114612586B (zh) | 一种基于数据可视化场景下的颜色分等级渲染方法及系统 | |
CN104778212B (zh) | 地图数据生成方法和装置、地图数据读取方法和装置 | |
CN113570712B (zh) | 一种基于gcn的3d建模优化方法 | |
CN115952252A (zh) | 数据处理方法、装置、电子设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |