1 为什么点云会有噪声?

受到仪器、周围环境、被扫描目标本身的特性影响,点云数据中无法避免存在一些噪声。噪声的来源有很多,比如超过扫描设定范围的点;由于受到周围的风、周围物体的震动等影响产生的点;或者是空气中水汽的影响等等,产生的噪声点,不仅会增加点云的数据量,还会影响建模、信息提取的精度等。需要进行去除。


2 噪声的类型

①漂移点,即那些明显远离目标主体,漂浮于点云上方的稀疏、散乱的点。

②孤立点,即那些远离点云中心区,小而密集的点。

③冗余点,即那些超过预定扫描区域的多余的点。

④混杂点,即那些和正确点混淆在一起的点。

————————《海量点云数据处理理论与技术》


3 matlab案列

(1)中值滤波

中值滤波采用各数据点的统计中值,对于消除数据毛刺,效果较好,但对于彼此靠近的混杂点噪声滤除效果不好。

(2)均值滤波

是对点集进行均布平均,将采样点的坐标值取为滤波窗口内各数据点的统计平均值,从而取代原有的点。均值滤波改变了点的位置,对高斯噪声有较好的平滑能力,但是容易造成边缘失真。

(3)高斯滤波

将某一数据点与其前后各n个数据点加权平均,那些远大于操作距离的点被处理成固定的端点,这有助于识别间隙和端点。由于高斯滤波平均效果较小,在滤波的同时,能较好的保持数据原貌,因而常被使用。

可以在matlab中使用函数smoothdata实现上述的三种去噪处理,这三种方法并非去除噪声点,而是平滑数据,这意味着数量是不会改变的。 

% 生成一个带有噪声的点云clear all% 生成平面点云数据
gv = 0:0.01:1;
[X,Y] = meshgrid(gv,gv);% X(:)的意思是把矩阵转换为一行
p = [X(:),Y(:),0.5*ones(numel(X),1)];% 生成噪声,随机生成500个噪声点
noise = rand(500, 3);% 合并,p的矩阵为n*3
p = [p;noise];pcshow(p)
%接下一段代码

% 通过中值滤波实现平滑处理
% 针对x坐标平滑
p1 = smoothdata(p(:,1),'movmean');
% 针对y坐标平滑
p2 = smoothdata(p(:,2),'movmean');
% 针对z坐标平滑
p3 = smoothdata(p(:,3),'movmean');
% pp为平滑后的xyz组合
pp = [p1,p2,p3];
pcshow(pp)

可以发现,所有的噪声点都聚集在右边了,目标点也变得密疏不一。

关于smoothdata ,可以实现多种平滑数据操作,包含平均值、中值、高斯滤波、S-G滤波等等。其更加具体的方法,详见matlab帮助文档(对含噪数据进行平滑处理 - MATLAB smoothdata- MathWorks 中国)。

(4)基于空间分布的去噪算法(Statistical Outlier Removal,SOR)

基本原理:对每个点进行K领域统计分析,计算该点到它的K个邻近点的平均距离。假设所得结果服从高斯分布,高斯分布的形状取决于平均值和标准差,将平均距离在给定阈值范围之外的点并去除。———————————《激光雷达森林生态应用——理论、方法及实例》

该方法需要两个参数,一个是sig标准差的倍数参数,另一个是k邻近点的个数。

①计算每个点的k个邻近点的距离(d),计算这些距离的总和D。

②所有点的D相加,即sum(D)。

③计算距离总和的平均值mean(sum(D))。

④计算距离总和的标准差std(sum(D))。

⑤得到噪点离群距离mean(sum(D))+sig*std(sum(D))

⑥大于这个距离的就是噪声点。

MATLAB2019b自带SOR去噪function,使用如下:默认参数sig=1,k=4。

clear all
%生成平面点云数据
gv = 0:0.01:1;
[X,Y] = meshgrid(gv,gv);
% X(:)的意思是把矩阵转换为一行
p = [X(:),Y(:),0.5*ones(numel(X),1)];
% 生成噪声
noise = rand(500, 3);
% 合并
p = [p;noise];
pcshow(p)% 将n*3的矩阵转换为matlab的格式
p = pointCloud(p);
% matlab2019b自带SOR去噪功能
p_non_nosie = pcdenoise(p);pcshow(p_non_nosie)

除此之外还有双边滤波、直通滤波、随机采样一致性滤波等。

如果没有安装matlab2019b的,可以尝试下载博主自己写的SOR函数,和matlab2019b自带的函数效果一致。资源链接:

matlab-点云SOR去噪算法,包含主程序和function-其它文档类资源-CSDN下载

主程序如下:SOR即为博主自己写的函数

clear all
%生成平面点云数据
gv = 0:0.01:1;
[X,Y] = meshgrid(gv,gv);
% X(:)的意思是把矩阵转换为一行
p = [X(:),Y(:),0.5*ones(numel(X),1)];
% 生成噪声
noise = rand(500, 3);
% 合并
p = [p;noise];
% pcshow(p)% SOR 滤波,sig为1,k邻近为4
% a输出为去噪的数据
% idx为噪声点的索引,和去噪数据一样长,噪声点为0,非噪声为1
[idx, a] = SOR(p,1,4);
subplot(1,2,1),pcshow(p,idx)
subplot(1,2,2),pcshow(a)

(5)双边滤波

点云双边滤波处理,博客链接如下:

点云去噪-双边滤波-matlab实现-2021-7-26-_~追风筝的猫的博客-CSDN博客

点云去噪(中值、高斯、均值、SOR滤波),及matlab的代码撰写-2021-7-21-相关推荐

  1. CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)

    CV:计算机视觉技术之图像基础知识(一)-以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边) 目录 一.图像中的傅里叶变换 1 ...

  2. matlab mean 滤波,中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation).doc...

    中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation) 中值和均值滤波---matlab实现(Median and me ...

  3. 一维中值、均值、高斯滤波的MATLBA实现

    中值滤波的代码: x=0:2047; a=load('data.txt'); %运行时data.txt文件要放到当前目录(current directory)中 n=5; % n为模板长度,值可以改变 ...

  4. open cv均值 中值 高斯 双边高斯 滤波及模糊

    /* 模糊与消噪 模糊原理(线性滤波) ●Smooth/Blur 是图像处理中最简单和常用的操作之一 ●使用该操作的原因之一-就为了给图像预处理时候减低噪声 ●使用Smooth/Blur操作其背后是数 ...

  5. [学习opencv]高斯、中值、均值、双边滤波

    以前的时候,为了过滤图像中的一些噪点,学过一些简单的滤波,比如中值滤波,均值滤波,也是自己实现的. 在opencv中有现成的函数可以调用,实现滤波的操作. 函数的原型如下: CVAPI(void) c ...

  6. 图像处理技术之三:降噪处理(中值、均值、最大值、最小值滤波、图像噪声)

    图像噪声的成因分类与常见图像去噪算法简介 1.图像噪声的成因 图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质,这对后续图像的处理和图像视觉效应将产生不利影响.噪声种类很多,比如:电噪 ...

  7. 滤波算法、中值和均值滤波区别

    滤波算法:  这里所讲的算法都是针对图像空间的滤波算法,其中模板,可以理解为图像形态学中的结构元素,是用来选取图像中的那些像素点被用来操作的.空间滤波根据其功能划分为平滑滤波和锐化滤波.平滑滤波:能减 ...

  8. python中值滤波去除反光_数学之路-python计算实战(17)-机器视觉-滤波去噪(中值滤波)...

    Blurs an image using the median filter.C++:void medianBlur(InputArray src, OutputArray dst, int ksiz ...

  9. Python+matplotlib绘制箱线图并设置异常值、中值、均值显示格式

    推荐教材: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,2020年1月出版,2021年3月第6 ...

最新文章

  1. 根据录入的计算公式计算_工业铝型材承重计算
  2. 12c 新特性之单表恢复
  3. 岁月在流逝,从阿里退下来接近70后程序猿带给我的启示
  4. STM32项目中一种在线升级/应用升级OTA-IAP设计方案
  5. ios html5 exif,IOS中html5上传图片方向问题解决方法
  6. 二叉搜索树(HDU3791)
  7. 两个乒乓球队进行比赛 各出3人c语言_19年国际乒乓球大赛时间出炉:比赛的密集程度令人窒息!...
  8. Android如何实现汉字手写输入法(带中文自动识别提示)
  9. java基于springboot+vue的校园一卡通管理系统 ssm nodejs
  10. Android 自定义视频录制终极解决方案(翻转问题)
  11. day91~93-Paas云平台_docker容器
  12. linux 添加开机启动项的三种方法。
  13. progress中的数据库访问
  14. 基于Echarts实现可视化数据大屏分析大屏监控系统
  15. cad等比例缩放快捷键_CAD中怎么才能将图案等比例缩放?
  16. NS32F103C8T6 可完美替代 STM32F103C8T6
  17. 如何判断一个动作是深蹲还是硬拉?
  18. 马上2023年了,《北上广深杭》有哪些值得加入的软件测试大厂公司呢?花了三天三夜整理出各大互联网公司
  19. GoAccess请求监控
  20. html页面跳转href过渡效果,页面锚链接平滑动画过渡纯JS插件

热门文章

  1. android studio的GearVR应用开发(二)、一个简单的VR app(Oculus官方GearVR开发教程,翻译转载)
  2. fork的坑:文件描述符继承
  3. Activesheet 与 worksheet的区别
  4. MATLAB 取整与取余函数使用说明
  5. 微信客户端跨域分享iframe内的内容
  6. 实现购物车页面结算功能
  7. Ubuntu使用docker安装elasticsearch与Kibana
  8. 斩·赤红之瞳动漫网页 html源码 期末大作业 课程设计
  9. 安卓逆向能做什么|APP自动化执行
  10. platformio使用记录