基于均匀和不均匀网格法实现点云精简附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电子书和数学建模资料

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值