【数据分析】基于八叉树和损失编码的无损点云压缩附matlab代码

简介: 【数据分析】基于八叉树和损失编码的无损点云压缩附matlab代码

1 内容介绍

为了解决因散乱点云数据量较大而给点云的存储、传输和应用带来的不便,基于线性八叉树编码方法,结合排序与差分编码、改进的游程编码、算术编码等方法,提出了一种散乱点云的压缩方法.此方法不改变点云数据的精度,只改变测量点的顺序.由于散乱点云具有无序性,因此可以将本方法视为无损压缩.该方法在压缩率上明显优于已有的点云压缩方法和商业软件.对提出的方法在不同的点云密度和数据精度下的压缩率进行了比较研究,发现在点较密集,且精度较低的情况下压缩效果更好.创新之处在于用合理的点云索引方法组织和编码点云,根据编码表现出的特点有选择地综合和改进了多种编码压缩方法,获得了较好的压缩效果.


2 仿真代码

function [Codes,Octree] = GenOctree(points)

tic

mcode = Morton(points);

Lmax = ceil((size(mcode,2)/3));

pointNum = size(mcode,1);

pointID = 1:pointNum;

nodeid = 0;

proot.nodeid = nodeid;

proot.childPoint={pointID};

proot.occupancyCode=[];

proot.parent=0;

Octree(1:Lmax+1) =struct('node',[],'level',0);

Octree(1).node=proot;

% Octree(1).nodeNum = 1;

for L=1:Lmax

   Octree(L+1).level = L;

   NodeTemp(1:min([pointNum,8^(L-1)])) = struct('nodeid',nan,'childPoint',{[]},'parent',0,'occupancyCode',[]);

   nodeNum = 0;

   for node = Octree(L).node

       for ptid = node.childPoint

           PId = ptid{:};

           if isempty(PId)

              continue

           end

           PId = pointID(PId);

           nodeid=nodeid+1;

           Node.nodeid = nodeid;

           Node.childPoint=cell(1,8);

           Node.parent=node.nodeid;

           n = L-1;

           mn = mcode(PId,1+n*3:3+n*3);

           idn = bin2dec(mn)+1;

           for i = 1:8

             Node.childPoint(i)= {PId(idn==i)};

           end

   %      Node.occupancyCode = flip(~cellfun("isempty",Node.childPoint));

   %     fast code

           Node.occupancyCode = ismember(8:-1:1,idn);

           nodeNum = nodeNum+1;

           NodeTemp(nodeNum)=Node;

       end

   end

   Octree(L+1).node= NodeTemp(1:nodeNum);

end

Octree(1)=[];

toc

% fprintf('bpp before entropy coding:%f bit\n',nodeid*8/pointNum);

% Nodes =  arrayfun(@(S)S.node,Octree,'UniformOutput',false);

% Codes=cellfun(@(S)arrayfun(@(S)S.occupancyCode,S,'UniformOutput',false),Nodes,'UniformOutput',false);

% Codes = bin2dec(num2str(cell2mat([Codes{:}]')));

Nodes = [Octree.node]';

Codes = bin2dec(num2str(cell2mat({Nodes.occupancyCode}')));

end


function mcode= Morton(A)

n = ceil(log2(max(A(:))+1));

x = dec2bin(A(:,1),n);

y = dec2bin(A(:,2),n);

z = dec2bin(A(:,3),n);

m = cat(3,x,y,z);

m = permute(m,[1,3,2]);

mcode = reshape(m,size(x,1),[]);

% mcode = bin2dec(mcode);

end

3 运行结果

4 参考文献

[1]危育冰. 基于八叉树编码的散乱点云数据压缩[J]. 武汉大学学报:工学版, 2020, 53(8):6.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


相关文章
|
20天前
|
存储 算法 数据安全/隐私保护
基于方块编码的图像压缩matlab仿真,带GUI界面
本项目展示了基于方块编码的图像压缩算法,包括算法运行效果、软件环境(Matlab 2022a)、核心程序及理论概述。算法通过将图像划分为固定大小的方块并进行量化、编码,实现高效压缩,适用于存储和传输大体积图像数据。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
226 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
供应链 数据可视化 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
本文详细介绍了第十一届泰迪杯数据挖掘挑战赛B题的解决方案,涵盖了对产品订单数据的深入分析、多种因素对需求量影响的探讨,并建立了数学模型进行未来需求量的预测,同时提供了Python代码实现和结果可视化的方法。
151 3
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析的新手指南深入浅出操作系统:从理论到代码实践
【8月更文挑战第30天】在数据驱动的世界中,掌握数据分析技能变得越来越重要。本文将引导你通过Python这门强大的编程语言来探索数据分析的世界。我们将从安装必要的软件包开始,逐步学习如何导入和清洗数据,以及如何使用Pandas库进行数据操作。文章最后会介绍如何使用Matplotlib和Seaborn库来绘制数据图表,帮助你以视觉方式理解数据。无论你是编程新手还是有经验的开发者,这篇文章都将为你打开数据分析的大门。
|
4月前
|
机器学习/深度学习 数据采集 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题二
本文提供了第十一届泰迪杯数据挖掘挑战赛B题问题二的详细解题步骤,包括时间序列预测模型的建立、多元输入时间预测问题的分析、时间序列预测的建模步骤、改进模型的方法,以及使用Python进行SARIMA模型拟合和预测的具体实现过程。
117 1
|
4月前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
4月前
|
供应链 算法 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 23页论文及实现代码
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛B题的解决方案,深入分析了产品订单数据,并使用Arimax和Var模型进行了需求预测,旨在为企业供应链管理提供科学依据,论文共23页并包含实现代码。
162 0
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 23页论文及实现代码
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
5月前
|
机器学习/深度学习 算法 计算机视觉
通过MATLAB分别对比二进制编码遗传优化算法和实数编码遗传优化算法
摘要: 使用MATLAB2022a对比了二进制编码与实数编码的遗传优化算法,关注最优适应度、平均适应度及运算效率。二进制编码适用于离散问题,解表示为二进制串;实数编码适用于连续问题,直接搜索连续空间。两种编码在初始化、适应度评估、选择、交叉和变异步骤类似,但实数编码可能需更复杂策略避免局部最优。选择编码方式取决于问题特性。