点云压缩的opencl实现


点云压缩的八叉树算法

1. 八叉树编码

1.1. ref [1]

通过循环递归的方法对大小 2 n × 2 n × 2 n 2^n\times 2^n \times 2^n 2n×2n×2n的八叉树空间8等分划分,最多剖分 n n n次。
在完成逐层划分之后,对数据编码,编码方式为:假设点云坐标 P ( x , y , z ) P(x,y,z) P(x,y,z)和树中节点 ( a , b , c ) (a,b,c) (a,b,c)相对应且树中任一个节点都与一个最小包围盒 C u b e m i n Cube_{min} Cubemin一一对应

o c t : ( a , b , c ) ↔ C u b e m i n (1) oct:(a,b,c)\leftrightarrow Cube_{min} \tag{1} oct:(a,b,c)Cubemin(1)

一个坐标点对应一个oct节点,而一个oct节点可能对应多个坐标点。利用该特性可以删除多余的点。

节点编码为 M = m n − 1 ⋯ m 2 m 1 m 0 M=m_{n-1}\cdots m_2m_1m_0 M=mn1m2m1m0为节点在 n n n层的节点序号。

首先利用空间坐标计算出节点索引值:
{ a = i n t ( x − x m i n λ x ) b = i n t ( y − y m i n λ y ) c = i n t ( z − z m i n λ z ) (2) \begin{cases} a=int\left( \frac{x-x_{min}}{\lambda_x}\right)\\ b=int\left( \frac{y-y_{min}}{\lambda_y}\right)\\ c=int\left( \frac{z-z_{min}}{\lambda_z}\right) \tag{2}\end{cases} a=int(λxxxmin)b=int(λyyymin)c=int(λzzzmin)(2)
使用无符号整数表示 a , b , c a,b,c a,b,c
{ a = a n − 1 a n − 2 ⋯ a 0 b = b n − 1 b n − 2 ⋯ b 0 c = c n − 1 c n − 2 ⋯ c 0 (3) \begin{cases} a=a_{n-1}a_{n-2}\cdots a_0\\ b=b_{n-1}b_{n-2}\cdots b_0\\ c=c_{n-1}c_{n-2}\cdots c_0 \tag{3}\end{cases} a=an1an2a0b=bn1bn2b0c=cn1cn2c0(3)
节点序号 m i m_i mi a i , b i , c i a_i,b_i,c_i ai,bi,ci之间的关系可以表示为:
m i = a i + b i ⋅ 2 + c i ⋅ 4 (4) m_i=a_i+b_i\cdot 2+c_i \cdot 4 \tag{4} mi=ai+bi2+ci4(4)

若知道八叉树某一节点序号 m i m_i mi,利用 m i m_i mi a i , b i , c i a_i,b_i,c_i ai,bi,ci之间的关系得出:
a i = ( m i   m o d   2 ) , b i = [ ( m i / 2 )   m o d   2 ] , c i = [ ( m i / 4 )   m o d   2 ] (5) ai=(m_i\ mod\ 2),b_i=[(m_i/2)\ mod\ 2],c_i=[(m_i/4)\ mod\ 2] \tag{5} ai=(mi mod 2),bi=[(mi/2) mod 2],ci=[(mi/4) mod 2](5)

1.2. 编码

量化
编码
去重

由(2)进行量化,去除重复坐标,然后直接编码为:
M = c n − 1 b n − 1 a n − 1 ⋯ c 0 b 0 a 0 (6) M=c_{n-1}b_{n-1}a_{n-1}\cdots c_0b_0a_0 \tag{6} M=cn1bn1an1c0b0a0(6)

1.3. 去重怎么弄?

量化是按坐标点循环
整数排序 → \rightarrow 去除重复点

2. 解码

解码
反量化

3. opencl算法

3.1. ref [2]

4. 算法实现

  • 直接用C++写了

5. 参考文献

[1] 三维点云数据精简与压缩的研究_唐林
[2] Massively parallel KD-tree construction and nearest neighbor search algorithms

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着当今信息技术的高速发展,人们日常生产生活中产生的数据量呈现出爆 发式增长。因此,对于海量数据集的处理已成为数据挖掘技术的主要挑战。而如 何能以高性价比的方式挖掘到有价值的信息是目前数据挖掘研究的新课题。 GPu通用计算技术的R益成熟为数据挖掘技术的发展注入了新的动力。 GPU通过与CPu截然不同的发展路线,由当初的专用图形处理器一步步走进今 天的通用计算领域,并且正在向传统架构的超级计算机发起挑战。很显然,数 据挖掘这类计算密集型应用也必将受益于现代GPU所提供的廉价大规模并行计 算能力。 关联规则是数据挖掘的重要技术之一,而其中的频繁项集计算任务又是整 个算法的核心,研究如何利用GPu通用计算技术来加速频繁项集挖掘具有一定 的理论与实际意义。本文通过分析与总结过去关于频繁项集挖掘的研究成果, 设计了一种基于OpencL的CPU+GPU异构执行的挖掘算法,利用OpenCL创 建大规模并发线程来加速计算Apriori算法中的计算密集部分。实验采用OpenCL 的Java绑定接口来具体实现,并选择了同一级别的CPu与GPu用于改进后算 法与原算法的性能对比测试。实验结果表明,改进算法对于稀疏数据集有更好 的加速性能,并且随着支持度的降低,加速比呈现扩大趋势,最高达到约20倍。 另外,本文初步讨论并实验了利用0penCL的LocalMemory机制来对事务数据 的访问作进一步优化。不过,最后的测试结果表明这种改进仅对稠密数据集产 生了约10%的性能提升。本文在最后还指出了一些未来值得进一步研究与改进 的方向。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值