您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

matlab 点云中值滤波

目录

  • 一、算法原理
    • 1、中值滤波
    • 2、主要函数
    • 3、参考文献
  • 二、代码实现
  • 三、结果展示

一、算法原理

1、中值滤波

  中值滤波的方法是,对待处理的当前采样点,选择一个模板,该模板由其邻近的若干个数据点组成,对模版内的点云数据由小到大进行排序,再用模板的中值来替代当前采样点的值的方法。对于三维点云,模板为一个球体 D D D(如图1c),对于三维点云中的一个采样点 ( x 0 , y 0 , z 0 ) (x_0, y_0, z_0) (x0,y0,z0),其邻域 D ( x 0 , y 0 , z 0 ) = ( x , y , z ) ∣ ( x − x 0 ) 2 + ( y − y 0 ) 2 + ( z − z 0 ) 2 < d 2 D(x_0, y_0, z_0)={(x, y, z)|(x-x_0)^2+(y-y_0)^2+(z-z_0)^2<d^2} D(x0,y0,z0)=(x,y,z)(xx0)2+(yy0)2+(zz0)2<d2 。邻域中的所有点,对每个通道(xyz 轴方向)从大到小排序:

X = s o r t e d { x ∣ ( x , y , z ) ∈ D ( x 0 , y 0 , z 0 ) } (1) X=sorted\lbrace x|(x,y,z)\in D(x_0,y_0,z_0)\rbrace\tag{1} X=sorted{x(x,y,z)D(x0,y0,z0)}(1)
Y = s o r t e d { y ∣ ( x , y , z ) ∈ D ( x 0 , y 0 , z 0 ) } (2) Y=sorted\lbrace y|(x,y,z)\in D(x_0,y_0,z_0)\rbrace\tag{2} Y=sorted{y(x,y,z)D(x0,y0,z0)}(2)
Z = s o r t e d { z ∣ ( x , y , z ) ∈ D ( x 0 , y 0 , z 0 ) } (3) Z=sorted\lbrace z|(x,y,z)\in D(x_0,y_0,z_0)\rbrace\tag{3} Z=sorted{z(x,y,z)D(x0,y0,z0)}(3)

  取其中 值处的数据作为采样点 ( x 0 , y 0 , z 0 ) (x_0, y_0, z_0) (x0,y0,z0)处的替代值。由此得到中值滤波的点对点映射:

( x ′ , y ′ , z ′ ) ← ( m e d i a n ( X ) , m e d i a n ( Y ) , m e d i a n ( Z ) ) (4) (x',y',z')\leftarrow(median(X),median(Y),median(Z))\tag{4} (x,y,z)(median(X),median(Y),median(Z))(4)

  该算法 抑制噪声效果较好,点云的细节信息基本保持,对于脉冲噪声也有很好的去噪效果,但是对高斯噪声的抑制效果不是很好。
在这里插入图片描述

图1 中值滤波模拟图(a:原始模拟点云图; b:加入噪声的点云 图; c:滤波球体; d:去噪后点云图)

2、主要函数

ptCloudB = pcmedian(ptCloud,'Dimensions',3,'Radius',0.1);%中值滤波

  对三维点云数据进行中值滤波.该函数分别过滤点云的每个通道。输出是一个过滤过的点云。每个输出位置属性值是对应的输入位置属性值附近邻域的中值。pcmedian函数不对边缘进行零处理。相反,它只对可用的邻域值进行操作。如果输入点云是一个有组织的点云,则pcmedian函数使用N-by-N邻域方法.如果点云是无组织的,则函数采用径向邻域方法。

  • ptCloud:输入点云
  • 'Dimensions':感兴趣的点云维数,指定为范围内整数的向量[1,3]。值1、2和3分别对应x-、y-和z-轴。这里必须按升序指定维度。
  • 'FilterSize':有组织点云的中值滤波器的大小,默认值为:3。
  • 'Radius':无组织点云的邻域半径,指定为正标量。默认值为:0.05。
  • ptCloudB:滤波后的输出点云。

3、参考文献

[1]朱志华,刘晋,胡晰远.线形痕迹三维点云去噪技术研究[J].刑事技术,2020,45(06):556-561.

二、代码实现

ptCloud = pcread('测试点云.pcd');

figure
pcshow(ptCloud.Location,ptCloud.Location(:,1))
view(-90,2)
title('Original Point Cloud')

ptCloudB = pcmedian(ptCloud,'Dimensions',3,'Radius',1);%中值滤波
figure
pcshow(ptCloudB.Location, ptCloudB.Location(:,1))
view(-90,2)
title('Filtered Point Cloud')
pcwrite(ptCloudB, 'medianfiter.pcd', 'Encoding', 'ascii'); %将程序中的xyz数据写入pcd文件中

三、结果展示

1、滤波前的点云
在这里插入图片描述
2、滤波后的点云
在这里插入图片描述


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进