【数据分析】基于八叉树和损失编码的无损点云压缩附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代码问题可私信交流。

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


相关文章
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
113 0
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
144 8
|
2月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
142 8
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
839 4
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
250 2
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
344 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
1108 4
数据分析的 10 个最佳 Python 库
|
机器学习/深度学习 数据采集 数据可视化
数据分析之旅:用Python探索世界
数据分析之旅:用Python探索世界
145 3
|
供应链 数据可视化 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
本文详细介绍了第十一届泰迪杯数据挖掘挑战赛B题的解决方案,涵盖了对产品订单数据的深入分析、多种因素对需求量影响的探讨,并建立了数学模型进行未来需求量的预测,同时提供了Python代码实现和结果可视化的方法。
459 3
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。

热门文章

最新文章