基于改进八叉树的三维点云压缩算法 下载: 1525次
ing at the transmission and storage requirements of three-dimensional model in the large data environment, a three-dimensional point cloud lossy compression algorithm based on the octree is presented. The stop condition of the octree segmentation is improved, so the segmentation can be stopped at an appropriate depth, and the proper size of voxel is ensured. At the same time,the
1 引言
通过三维测量技术可以获得复杂物体的点云数据,其中常见的方法有激光三维测量法[1-2]和光栅投影测量法[3-4]。然而随着技术的发展,测量设备的精度也随之提高,获取物体的三维数据数量级也越来越大,这给后续的传输和储存都带来了挑战。为了节省存储空间和提高传输效率,众多学者开始对数据压缩领域展开研究。相比较目前已经较为成熟的多边形网格压缩领域,三维点云压缩是一个比较新的概念,考虑到在实际应用中,用多边形网格来表示高精度模型需要数量级较大的网格,维护和存储都将消耗较多的内存和时间。同时,当投影转换到平面的多边形数目比平面像素还多时,多边形网格在平面上的投影将会比一个平面像素更小,此时利用点来替代网格作为模型的基本单元将更有优势。因此基于点的图形学成为了近些年的研究热点[5-7]。而根据编译解码后数据精度或点云个数是否损失,可以将压缩算法分为有损点云压缩和无损点云压缩。在工程上,点云模型的位置信息和属性信息都使用浮点数进行表示,而浮点数的精度较大,实际工程中并不需要这么高的精度,因此目前提出的多数算法都属于有损范围。
Kalaiah等[8]利用
与此同时,在利用三维系统获取点云数据的过程中,由于采集设备精度、操作者经验、采集环境因素以及被测物体表面变化和数据拼接配准等操作的影响,采集得到的点云数据往往存在一些离主体点云即离被测物体点云较远的离散点,即离群点[14-15]。不同的设备获取的离群点结构也有不同。原始点云中离群点的干扰,会使得点云的处理变得困难。目前,离群点移除也受到了国内外很多研究人员的重视,提出了基于局部点云特征移除方案,对采样点处曲率变化率或法向量进行运算,但是该类计算量较大且复杂,很有可能得到错误的数值,最终可能引发点云后期处理的失败。
在上述研究的基础上,针对目前所存在的问题,本文利用改进的八叉树算法对数据进行分割,从实际应用角度出发采用统计的方法去除离群点,并且在后续操作中优化了数据点的位置编码。通过压缩与解压缩后的效果以及与其他现有压缩算法的对比实验可以看出所提算法在保证了原始数据精度的前提下,有效地提高了压缩率,降低了压缩时间。
2 算法简介
基于无序的点云模型,所提出的压缩算法主要步骤如下:
1) 八叉树分割:根据读入点云数据坐标的
2) 离群点移除:在分割的基础上,建立
3) 点位置细节编码和区间编码:为了提高解压精度,对每个体素所占有的点做处理。在执行序列化的同时,利用广度优先遍历查询和编码点的局部细节,对含有超过一个点的体素,计算点和体素中心的拓扑关系,产生与各自体素中心相关的位置细节参数流。最后利用区间编码输入至集合输入流,输出的点云压缩数据被写至一个文件中。
算法流程如
3 基于改进八叉树的点云压缩算法
3.1 八叉树分割
3.1.1 简单八叉树结构
八叉树结构在空间划分上有很强的优势。先在空间形成包围盒,八叉树将包围盒分成八个相同时间空间复杂度的子区间。八叉树的存储方式沿用了二维四叉树的有关方法。存储方法充分利用了八叉树结构在空间的相关性。因此,所占存储空间比三维体素阵列要少。八叉树的主要优点在于可以方便地对编码之后的点进行集合计算(例如求交、并、异或),这大大提高了计算效率,这也是其他方法难以与之匹敌的地方。不仅如此,由于通过八叉树划分之后的空间具有良好的有序性和分层性,也提高了点云的计算精度和速度。
八叉树结构通过对三维空间的几何实体进行空间划分,通过循环递归的方法对大小为2
图 2. 包围盒示意图及局部放大细节。(a)水壶模型包围盒示意图;(b)水壶模型的局部放大细节;(c)兔子模型包围盒示意图;(d)兔子模型的局部放大细节
Fig. 2. Bounding box schematic and local enlargement details. (a) Bounding box schematic of kettle model; (b) local enlargement details of kettle model; (c) bounding box schematic of bunny model; (d) local enlargement details of bunny model
在完成逐层划分之后,对数据进行编码,编码方式为:假设点云坐标
首先利用空间坐标计算出节点索引值:
式中
其编码可用二进制表示为
节点序号
若知道八叉树某一节点序号
式中mod为取模运算符,利用上述公式可以由点
通过八叉树结构对每个点搜索其邻域。查询非空叶子节点所在立方体的数据点和周围26个叶子节点立方体中的数据点,找到最近的
3.1.2 分割停止条件
在实际操作中,对于分割停止条件,并无确定的标准。目前一般使用八叉树分辨率进行限制。但当分辨率过小时,过多的分割会造成内存浪费;当分辨率过大时,体素就越大,由于利用体素形心近似表示原始点,因此造成的误差越大。本文提出了一种新的分割停止条件。以构造的包围盒为划分对象,根据分割停止标准划分最小包围盒,其中分割停止标准的建立基于叶子节点/点云比率、八叉树分辨率
式中
图 3. 八叉树分割,每个体素至少含一个点。(a) n=1, Pvoxel=9; (b) n=2, Pvoxel=40; (c) n=3, Pvoxel=137; (d) n=4, Pvoxel=435; (e)n=5, Pvoxel=1426; (f) n=6, Pvoxel=4815; (g) n=7, Pvoxel=15845; (h) n=8, Pvoxel=45859
Fig. 3. Octree segmentation, each voxel containing at least one point. (a) n=1, Pvoxel=9; (b) n=2, Pvoxel=40; (c) n=3, Pvoxel=137; (d) n=4, Pvoxel=435; (e)n=5, Pvoxel=1426; (f) n=6, Pvoxel=4815; (g) n=7, Pvoxel=15845; (h) n=8, Pvoxel=45859
3.2 离群点移除
对于完成分割后的数据,利用熊邦书等[15]的方法建立
算法首先通过广度遍历对八叉树分层遍历,对最深层的叶子节点添加掩码。如
节点
式中
离群点去除的方法如下:设
3.3 点位置细节编码
根据八叉树特性,所有被分配到一个特定体素的点只会被体素中心表示。在实际处理中,并不能保证100%的分割(即每个体素只含一个点),因此采用额外的点位置编码来提高精度。
对于八叉树分割之后含有超过一个点的体素,采用点位置编码,并计算每个点坐标
3.4 区间编码
最后对输入的数据流进行熵编码,常用的方法有哈夫曼编码、算术编码和区间编码。综合考虑结合效率和压缩率,选择了区间编码。
区间编码是在整数区间上进行整数运算,区间长度为
假设
如果
4 实验
本文算法实验仿真编译结果在Microsoft Visual Studio 2012 32位win7系统上进行,并对八叉树分割、离群点移除以及最后的压缩结果进行了分析。结合实验室在点云处理中常用的点云模型,验证了本文算法的实用性和有效性。点云模型如
图 6. 实验所用点云模型。(a)兔子模型,点数为31607;(b)猫模型,点数为10000;(c)水壶模型,点数为19062;(d)人脸模型,点数为46111;(e)塑料模型,点数为24673
Fig. 6. Point cloud models used in experiment. (a) Bunny model, point is 31607; (b) cat model, point is 10000; (c) kettle model, point is 19062; (d) face model, point is 46111; (e) plastic model, point is 24673
表 1. 八叉树分割
Table 1. Octree segmentation
|
完成八叉树分割之后,为了保证表面平滑和不受噪声点干扰,在所建立的
图 7. 离群点移除结果。(a)原始数据;(b)移除离群点后的点云数据;(c)移除的离群点
Fig. 7. Results of removing outliers. (a) Initial data; (b) point cloud data after removing outliers; (c) removed outliers
从
图 8. 兔子模型解压缩示意图。(a)解压缩前的兔子模型;(b)图(a)局部放大细节;(c) t=0.25时解压缩结果;(d)图(c)局部放大细节;(e) t=0.005时解压缩结果;(f)图(e)局部放大细节
Fig. 8. Decompression schematic of bunny model. (a) Bunny model before decompression; (b) local amplification details of Fig. (a); (c) decompression result when t=0.25; (d) local amplification details of Fig. (c); (e) decompression result when t=0.005; (f) local amplification details of Fig. (e)
另外还将本文算法与文献[ 16]、[17]算法进行了性能对比。文献[ 16]算法利用生成树划分空间,并对浮点数做处理;在压缩时间和压缩率上都逊于文献[ 17]算法,其中压缩率采用字节每点(Bpp)为单位。文献[ 17]中采用八叉树对空间划分,主要应用于动态点云压缩,不过利用该算法对静态点云也取得了较好的压缩率。
由
5 结论
现代化点云采集设备所得到的点云数据量越来越庞大,如何在实际应用中高效地对数据进行传输和存储是目前的热点研究问题。针对静态点云,实现了一种基于改进八叉树的点云有损压缩算法,该算法能够有效地快速实现点云模型的压缩。该算法改进了八叉树的分割条件,优化了后续的区间编码。由实验结果可知,该算法具有良好的压缩率和较理想的压缩时间,后续将采用车辆、船只以及现代城市的部分等三维数据对算法进行进一步的测试及改进,以验证其能否真正满足实际应用中对三维点云数据的压缩处理需求。后续研究将会增加在区间编码中频率模型的复杂性,如果再结合有序点云,有望实现更高的压缩效率。
[1] 邓文君, 叶景杨, 张铁. 面向机器人磨抛的激光点云获取及去噪算法[J]. 光学学报, 2016, 36(8): 0814002.
邓文君, 叶景杨, 张铁. 面向机器人磨抛的激光点云获取及去噪算法[J]. 光学学报, 2016, 36(8): 0814002.
[3] 安冬, 盖绍彦, 达飞鹏. 一种新的基于条纹投影的三维轮廓测量系统模型[J]. 光学学报, 2014, 34(5): 0512004.
安冬, 盖绍彦, 达飞鹏. 一种新的基于条纹投影的三维轮廓测量系统模型[J]. 光学学报, 2014, 34(5): 0512004.
[6] GrossM, PfisterH. Point based graphics[M]. San Fransisco: Morgan Kaufmann Publishers, 2007.
GrossM, PfisterH. Point based graphics[M]. San Fransisco: Morgan Kaufmann Publishers, 2007.
[7] 律帅, 达飞鹏, 黄源. 基于数据类型转换的点云快速有损压缩算法[J]. 图学学报, 2016, 37(2): 199-205.
律帅, 达飞鹏, 黄源. 基于数据类型转换的点云快速有损压缩算法[J]. 图学学报, 2016, 37(2): 199-205.
Lü Shuai, Da Feipeng, Huang Yuan. A fast and lossy compression algorithm for point-cloud models based on data type conversion[J]. Journal of Graphics, 2016, 37(2): 199-205.
[9] BotschM, WiratanayaA, KobbeltL. Efficient high quality rendering of point sampled geometry[C]. Proceedings of the 13th Eurographics Workshop on Rendering, 2002: 53- 64.
BotschM, WiratanayaA, KobbeltL. Efficient high quality rendering of point sampled geometry[C]. Proceedings of the 13th Eurographics Workshop on Rendering, 2002: 53- 64.
[10] Peng JL, Kuo C C J. Progressive geometry encoder using octree-based space partitioning[C]. IEEE International Conference on Multimedia and Expo, 2004, 1: 1- 4.
Peng JL, Kuo C C J. Progressive geometry encoder using octree-based space partitioning[C]. IEEE International Conference on Multimedia and Expo, 2004, 1: 1- 4.
[11] SchnabelR, KleinR. Octree-based point-cloud compression[C]. Proceedings of the 3rd Eurographics/IEEE VGTC Conference on Point-Based Graphics, 2006: 111- 120.
SchnabelR, KleinR. Octree-based point-cloud compression[C]. Proceedings of the 3rd Eurographics/IEEE VGTC Conference on Point-Based Graphics, 2006: 111- 120.
[13] BordignonA, LewinerT, LopesH, et al. Point set compression through BSP quantization[C]. Proceedings of Brazilian Symposium on Computer Graphics and Image Processing, 2006: 229- 236.
BordignonA, LewinerT, LopesH, et al. Point set compression through BSP quantization[C]. Proceedings of Brazilian Symposium on Computer Graphics and Image Processing, 2006: 229- 236.
[14] 聂建辉, 胡英, 马孜. 散乱点云离群点的分类识别算法[J]. 计算机辅助设计与图形学学报, 2011, 23(9): 1526-1532.
聂建辉, 胡英, 马孜. 散乱点云离群点的分类识别算法[J]. 计算机辅助设计与图形学学报, 2011, 23(9): 1526-1532.
Nie Jianhui, Hu Ying, Ma Zi. Outlier detection of scattered point cloud by classification[J]. Journal of Computer-Aided Design & Computer Graphics, 2011, 23(9): 1526-1532.
[15] 熊邦书, 何明一, 俞华璟. 三维散乱数据的k个最近邻域快速搜索算法[J]. 计算机辅助设计与图形学报, 2004, 16(7): 909-912.
熊邦书, 何明一, 俞华璟. 三维散乱数据的k个最近邻域快速搜索算法[J]. 计算机辅助设计与图形学报, 2004, 16(7): 909-912.
Xiong Bangshu, He Mingyi, Yu Huajing. Algorithm for finding k-nearest neighbors of scattered points in three dimension[J]. Journal of Computer-Aided Design & Computer Graphics, 2004, 16(7): 909-912.
[16] 王鹏杰, 潘志庚, 徐明亮, 等. 基于局部最小生成树的点模型快速无损压缩算法[J]. 计算机研究与发展, 2011, 48(7): 1263-1268.
王鹏杰, 潘志庚, 徐明亮, 等. 基于局部最小生成树的点模型快速无损压缩算法[J]. 计算机研究与发展, 2011, 48(7): 1263-1268.
Wang Pengjie, Pan Zhigeng, Xu Mingliang, et al. A fast and lossless compression algorithm for point-based models based on local minimal spanning tree[J]. Journal of computer Research and Development, 2011, 48(7): 1263-1268.
[17] KammerlJ, BlodowN, Rusu RB, et al. Real-time compression of point cloud streams[C]. IEEE International Conference on Robotics and Automation, 2012: 778- 785.
KammerlJ, BlodowN, Rusu RB, et al. Real-time compression of point cloud streams[C]. IEEE International Conference on Robotics and Automation, 2012: 778- 785.
黄源, 达飞鹏, 唐林. 基于改进八叉树的三维点云压缩算法[J]. 光学学报, 2017, 37(12): 1210003. Yuan Huang, Feipeng Da, Lin Tang. Three-Dimensional Point Cloud Compression Algorithm Based on Improved Octree[J]. Acta Optica Sinica, 2017, 37(12): 1210003.