matlab 点云滤波(中值、均值、高斯滤波)代码

这篇具有很好参考价值的文章主要介绍了matlab 点云滤波(中值、均值、高斯滤波)代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

点云中值、均值、高斯滤波

介绍一下滤波函数

smoothdata: 对含噪数据进行平滑处理
B = smoothdata(___,method) 为上述任一语法指定平滑处理方法。例如,B = smoothdata(A,'sgolay') 使用 Savitzky-golay 滤波器对 A 中的数据进行平滑处理。

 Method-平滑处理方法

"movmean"(默认)|'movmedian'|'gaussian'|'lowess'|'loess'|'rlowess'|'rloess'|'sgolay'

  • 'movmean'   -A的每个窗口内的移动平均值,此方法对于减少数据中的周期性趋势很有用。
  • 'movmedian'  -A的每个窗口的移动中位数。当存在离群值时,此方法对于减少数据中的周期性区域很有用。
  • 'gaussian'   -A的每个窗口内的高斯加权移动平均值
  • 'lowess'  -A的每个窗口内的线性回归。该方法可能会耗费大量的计算资源但会减少不连续性
  • 'loess'  -A 的每个窗口内的二次回归。此方法的计算开销略高于‘lowess’。
  • 'rlowess'  -A的每个窗口内的稳健性线性回归。此方法比lowess的方法的计算开销更大,不过它处理离群值时更为稳健
  • 'rloess'  -A 的每个窗口内的稳健二次回归。此方法比loess方法的计算量开销更大,不过它在处理离群值时更为稳健
  • 'sgolay'   -Savitzky-Golay滤波器,它根据在A的每个窗口上拟合的二次多项式进行平滑处理。当数据变化很快时,此方法可能比其他方法更有效。
clc;clear all;close all;

%点云按高程进行赋色
%首先按照Z轴方向求取所在点云的高程极值(包括高程最大值与最小值),然后将高程归一化到0~255范围内,最后采用matlab中的colormap颜色染函数进行赋色并保存渲染结果到点云。
%读取点云
filename='E:\程序库\点云\规则点云\bunny.pcd';
ptCloud=pcread(filename);

x=ptCloud.Location(:,1);
y=ptCloud.Location(:,2)
z=ptCloud.Location(:,3)

zMIN=ptCloud.ZLimits(2)
zMAX=ptCloud.ZLimits(1)

color=hsv(256);
%hsv:以三列数组形式返回 hsv 颜色图,其中包含的行数与当前图窗的颜色图相同。如果不存在图窗,则行数等于默认长度 256。数组中的每一行包含一种特定颜色的红、绿、蓝强度。强度介于 [0,1] 范围内。
pccolor=zeros(length(z),3);%返回当前点云的颜色图

for i =1:length(z)
    index=floor(255*(z(i)-zMIN)/(zMAX-zMIN))+1;%将高程归一化到[0,255]
    pccolor(i,:)=color(index,:);%将高度为index的对应的hsv颜色图赋值给点云的颜色图。
end

%添加高斯噪声,均值为0,标准差为0.002
noise=normrnd(0,0.002,size(ptCloud.Location));
addgaussian=ptCloud.Location+noise;

%高斯平滑
pt_gaussiansmooth=smoothdata(addgaussian,'gaussian');
%均值平滑
pt_movmeansmooth=smoothdata(addgaussian,'movmean');
%中值平滑
pt_movmediansmooth=smoothdata(addgaussian,'movmedian');

%可视化原始点云
figure;subplot(221);pcshow(filename);title('原始点云');
%可视化高程赋色后的点云
ptColor2 = pointCloud(ptCloud.Location,"Color",pccolor);
subplot(222);pcshow(ptColor2);title('高程赋色后的点云');
colorbar;%显示颜色带
%可视化添加高斯噪声后的点云
subplot(2,2,[3,4]);pcshow(addgaussian);title('添加高斯噪声后的点云')

figure;subplot(221);pcshow(addgaussian);title('添加高斯噪声后的点云')
subplot(222);pcshow(pt_gaussiansmooth);title('高斯平滑');
subplot(223);pcshow(pt_movmeansmooth);title('均值平滑');
subplot(224);pcshow(pt_movmediansmooth);title('中值平滑');

matlab 点云滤波(中值、均值、高斯滤波)代码

 文章来源地址https://www.toymoban.com/news/detail-429363.html

到了这里,关于matlab 点云滤波(中值、均值、高斯滤波)代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包