基于均匀和不均匀网格法实现点云精简附matlab代码

简介: 基于均匀和不均匀网格法实现点云精简附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

针对点云数据量大的特点,提出了基于非均匀网格的点云数据缩减算法.采用球面投影的方法建立规则网格,以网格内部点的法矢的标准差作为网格细分的依据,用中值滤波的方法确定每个网格内的保留点,通过实验验证了该算法的可行性,并取得了良好的效果.

⛄ 部分代码

%%均匀网格法

clc

clear

close all

P = ascread('bun000.asc');

P = P{2};

figure;

x=P(1,1:1:end);

y=P(2,1:1:end);

z=P(3,1:1:end);

c=z+1;

scatter3(x,y,z,1.2,c,'filled');

colorbar

view(2)

title('原始数据')


X = P(1,:);

Y = P(2,:);

Z = P(3,:);

step=0.002;% 包围盒尺寸,控制精简率的唯一参数

% std_th = 100;

tic;


Xmin=min(X);Xmax=max(X);

Ymin=min(Y);Ymax=max(Y);

Zmin=min(Z);Zmax=max(Z);

jingjian = zeros(size(P));% 预定义

ite = 0;

for ix=Xmin:step:Xmax

   xindex=find((X>=ix&X<(ix+step)));

   if isempty(xindex)==1

       continue

   end

   Xselect=X(xindex);

   Yselect=Y(xindex);

   Zselect=Z(xindex);

   for iy=Ymin:step:Ymax

       yindex=find(Yselect>=iy&Yselect<(iy+step));

       if isempty(yindex)==1

           continue

       end

       Xslt=Xselect(yindex);

       Yslt=Yselect(yindex);

       Zslt=Zselect(yindex);

       for iz=Zmin:step:Zmax

           zindex=find(Zslt>=iz&Zslt<(iz+step));

           if isempty(zindex)==1

               continue

           end

           Xsel=Xslt(zindex);

           Ysel=Yslt(zindex);

           Zsel=Zslt(zindex);

           if length(zindex)==1

               ite = ite + 1;

               jingjian(:,ite) = [Xsel;Ysel;Zsel];

               continue

           end

           Distance=sqrt((Xsel-mean(Xsel)).^2+(Ysel-mean(Ysel)).^2+(Zsel-mean(Zsel)).^2);

           index=find(Distance==min(Distance));

           index = index(1);

           ite = ite + 1;

           jingjian(:,ite) = [Xsel(index);Ysel(index);Zsel(index)];

       end

   end

end

jingjian(:,ite+1:end) = [];% 删除矩阵jingjian中的空位置

figure;

x=jingjian(1,:);

y=jingjian(2,:);

z=jingjian(3,:);

c=z+1;

scatter3(x,y,z,1.2,c,'filled');

colorbar

view(2)

title('精简后的点云');

toc;

disp(['精简率为:',num2str((size(P,2)-size(jingjian,2))/size(P,2)*100),'%']);

⛄ 运行结果

⛄ 参考文献

[1] 曹玉宝. 关于自由曲面数据点云直接数控加工的研究[D]. 江南大学.

[2] 陈慧群, 黎景炎. 基于变形网格法的高密点云曲面重建[J]. 工程图学学报, 2011, 32(2):4.

[3] 朱红迟金亮刘虹张坤. 基于AVP的不均匀散乱点云离群点去噪算法[J]. 计算机工程与设计, 2016, 037(005):1234-1238.

[4] 陈胜勇, 杨延红, 钱李勇,等. 基于均匀网格局部聚焦的点云法向量重定向方法和装置:, CN103593874B[P]. 2016.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
2天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
2天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
2天前
|
算法 调度
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
|
2天前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
2天前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)
|
2天前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
2天前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
2天前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
2天前
|
算法 调度 SoC
电动汽车充放电V2G模型(Matlab代码)
电动汽车充放电V2G模型(Matlab代码)

热门文章

最新文章