0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

汇总!三维点云去噪算法,涉及深度学习等

3D视觉工坊 来源:3DCV 2023-07-09 15:18 次阅读

1 什么是去噪

1.1 噪声

噪声:也称为孤立点/离群点/异常点,是指点云数据中的不相关或不希望存在的干扰信号或误差。噪声来源:环境光线的明亮程度、测量设备精度及系统误差、物体材料及表面的纹理和人为抖动等因素影响。

1.2 噪声来源

环境光线的明亮程度、测量设备精度及系统误差、物体材料及表面的纹理和人为抖动等因素。

1.3 点云去噪

在点云数据中,通过适当的滤波和处理方法,去除无用或噪声点,以提高数据质量和准确性的过程。

2 常见的去噪算法

2.1 统计滤波

1 原理

去除明显分布稀疏的离群点。根据给定均值与方差,可剔除方差之外的点,即方差之外的点是正确点。

2 举例

一点云中有50个点,每个点的邻近点个数设置为8,则50个点(8领域)的平均值计算如下:

b950a06c-1da9-11ee-962d-dac502259ad0.png

则算出50个点的平均值,设置距离阈值σ,若平均值在阈值之外的视为离群点,在点云数据中去除。

3 核心代码

—--统计滤波
//创建滤波器。对每个点分析的临近点的个数设置为50,并将标准差的倍数设置为1,这意味着如果一个点的距
离超出了平均距离一个标准差以上,则该点被标记为离群点,并将它移除,存储起来
pcl::Statistical0utlierRemowalSor;
sor.setInputCloud(cloud);//设置待波波的点云
sor.setMeamK(50);//设置在进行统计时考虑查询点邻近点数
Sor. setStddevMu1Thresh(1);//设置判断是否为高群点的阈值,里边的数字表示标准差的倍数,1个标准差以上就是离群点。
//即。当判断点的k近邻平均距高(mean distance)大于全局的1倍标准差+平均距离(global distances meanm and standard),则为离群点。

2.2 直通滤波

1 原理

根据点云的属性(属性比如x,y,z,颜色值等),在点的属性上设置范围,对点进行滤波,保留范围内的或保留范围外的,则去除离群点。

2 举例

在一个点云数据中,取z轴0~1范围内的点云进行保存。

3 核心代码

//创建滤波器对象
pcl::PassThroughpass;
pass.setInputCloud(c1oud);
pass.setFi1terFie1dName("z");//滤波字段名被设置为z轴方向
pass.setFi1terLimits(0.0,1.0);//设置在过滤方向上的过滤范围
//pass.setKeepOrganized(true);//保持有序点云结构,该功能用于有序点云才有意义。
pass.setNegative(true);//设置保留范围内的点还是过滤掉范围内的点,标志为false时保留范围内的点

2.3 半径滤波

1 原理

设定滤波半径,计算每个点在其半径范围内的其他点的个数。半径范围内其他点个数少于某一设定的阈值的点将被滤除。

2 举例设置半径为d,分别考察黄蓝绿三点,若点个数的阈值为1,则黄色点将被滤除;若阈值为2,则黄色点和绿色点都将被滤除。

b96bf5f6-1da9-11ee-962d-dac502259ad0.png

3 核心代码

ror.setInputC1oud(c1oud_in);//输入点云
ror.setRadiusSearch(0.1);//设置半径为0.1m范围内找临近点
ror.setMinNeighborsInRadius(10);//设置查询点的邻域点集数小于10删除
ror.fi1ter(*cloud_radius);//执行滤波

2.4 条件滤波

1 原理

根据点云数据的某些属性或特征进行筛选,可以一次删除满足对输入的点云设定的一个或多个条件指标的所有的数据点,如点的法线方向、点的强度值、点的颜色等属性来筛选点云数据。

条件滤波和直通滤波的区别:

条件滤波基于点的任何属性或特征进行筛选,而直通滤波只能基于轴向范围进行筛选。

2.5 中值滤波

1 原理

是常用的非线性滤波方法,用于去除图像或信号中的噪声。它通过将像素值替换为其邻域窗口内的中值来实现去噪的效果。

2 步骤

  • 定义一个固定大小的邻域窗口,通常是一个正方形或矩形窗口。
  • 将窗口内的像素值按照从小到大的顺序进行排序。
  • 取排序后的像素值的中间值作为中心像素的新值,用于替换原始像素值。
  • 对图像中的每个像素都应用上述步骤,以完成中值滤波。
  • 如下图3×3的内核(也可看做窗口,或者模版):

b982c18c-1da9-11ee-962d-dac502259ad0.png

image.png

2.6 均值滤波

1 原理

是一种常用的线性滤波方法,通过计算邻域窗口内像素值的平均值来实现去噪的效果。但会破坏图像细节,使图像变得模糊。

2 举例

3×3的内核(也可看做窗口,或者模版)中,包含了9个点及对应像素值。在对该区域进行滤波过程为:对P1~P9九个像素的灰度值求平均,代替中间P5的灰度值。

b99a46fe-1da9-11ee-962d-dac502259ad0.png

中值滤波和均值滤波的区别

  • 中值滤波能够更好地处理脉冲噪声或孤立的离群点,因为它选择中值作为替代值,而不受异常值的影响。
  • 中值滤波去除脉冲噪声或孤立的离群点,均值滤波能够平滑信号或图像。
  • 相比之下中值滤波运行速度更快

2.7 投影滤波

1 原理

将点投影到一个参数化模型上,这个参数化模型可以是平面、圆球、圆柱、锥形等进行投影滤波。

2 投影模型

b9bcf9c4-1da9-11ee-962d-dac502259ad0.png

3 核心代码

//本例使用axtby+ez+d=O的平面模型创建一个系数为a=b=d=0,c=1的平面,也就是X-Y平面。z轴相关的点全部投影在X-Y面上
pcl::Ptrcoefficients(newpcl::ModelCoefficients());
coefficients->values.resize(4);
coefficients->values[0]=coefficients->values[1]=O;
coefficients->values[2]=1.0;
coefficients->values[3]=0;

2.8 高斯滤波

1 原理

用于平滑图像并减少图像中的噪声。基于高斯函数的数学原理,通过在图像上应用高斯核来实现平滑效果。

2 步骤

1)确定高斯核的大小和标准差:高斯核的大小是指核的尺寸,通常是一个奇数,例如3x3、5x5、7x7等。标准差决定了高斯函数的形状,控制了滤波的平滑程度。标准差越大,平滑效果越明显。

2)生成高斯核:根据确定的高斯核大小和标准差,生成一个二维的高斯权值矩阵。高斯权值矩阵中的每个元素表示了相应位置上的权重值,这些权重值是根据高斯函数计算得出的。


3)对图像进行卷积:将生成的高斯核应用于原始图像。对于图像中的每个像素,将高斯核与其周围的像素进行卷积操作。卷积操作即将高斯核的每个元素与对应位置的像素值相乘,并将结果进行求和。

4)更新像素值:将卷积操作得到的结果作为滤波后的像素值,用于更新原始图像中对应位置的像素值。这样就完成了一次高斯滤波操作。

5)对整个图像重复滤波操作:重复步骤3和步骤4,对整个图像进行滤波操作,直到所有像素都被更新为滤波后的值。

3 卷积原理

卷积操作中,高斯核与图像中的每个像素以及其周围的邻域像素进行加权求和。卷积的结果是通过将每个像素的值乘以对应位置的高斯核权重,并将所有结果相加得到的。假定中心点的坐标是(0,0),那么取距离它最近的8个点坐标,为了计算,需要设定σ的值。假定σ=1.5,则模糊半径为1的高斯模板如下:

b9de5cae-1da9-11ee-962d-dac502259ad0.png

这个时候我们我们还要确保这九个点加起来为1(高斯模板的特性),这9个点的权重总和等于0.4787147,因此上面9个值还要分别除以0.4787147,得到最终的高斯模板。

b9f94c6c-1da9-11ee-962d-dac502259ad0.png

假设现有9个像素点,灰度值(0-255)的高斯滤波计算如下:

ba058310-1da9-11ee-962d-dac502259ad0.png

通常创建KD树,可以用于加速搜索滤波器的卷积操作。

4 KD-Tree

依次搜寻每个点云数据周围的k个邻域点,并计算出采样点到其k个邻域点的平均欧式距离。原始点云数据ba2611b6-1da9-11ee-962d-dac502259ad0.png经过KD-Tree 搜索后的数据集为ba3c1c0e-1da9-11ee-962d-dac502259ad0.png,定义di为已经得到的点pi到其k个邻域点的平均距离,σ为di的标准差。

  • σ值越大,权值分布越平缓。因此邻域各点值对输出值的影响越大,最终结果造成图像越模糊;
  • 核大小固定,σ值越小,权值分布越突起。因此邻域各点值对输出值的影响越小,图像变化越小。假如中心点权值为1,其他点权值为0,最终结果是图像没有任何变化;
  • σ固定时,核越大图像越模糊;
  • σ固定时,核越小图像变化越小。

ba4f8c80-1da9-11ee-962d-dac502259ad0.png

5 核心代码

//—————基于高斯核函数的卷积滤波实现-—---------
pcl::CaussianKernelkernel;//滤波器类输入+输出
kernel.setSigma(4);//高斯函数的标准方差,决定函数的宽度
kernel.setThresho1dRelativeToSigma(4)://设置相对Sigma参数的距离阈值
kernel.setThreshold(0.05);//设置距离阈值,若点间距高大于阈值则不予考虑
court<<"Kernelmade”<< end1;

//——————-创建k维树——————
pcl::KdTree::Ptrtree(newpcl:KdTree);
tree->setInputCloud(cloud);
court<>convolution;
convolution.setKernel(kernel);//设置卷积核
convolution.setInputCloud(cloud);
convolution.setNumberOfThreads(8);//卷积操作的线程数量为8
convolution.setSearchMethod(tree);//搜索方法为tree
convolution.setRadiusSearch(0.01);//积操作的半径搜索参数为0.01
cout<< "ConvolutionStart"<< end1;

3 深度学习的去噪算法

1)自编码器(Autoencoder):自编码器是一种无监督学习的神经网络模型,可以用于图像和信号的去噪。它通过将输入信号压缩到低维编码空间,然后再将其解码回原始信号空间,从而学习到信号的有用特征,并去除噪声。

2)基于卷积神经网络(CNN)的去噪算法:CNN在图像处理领域广泛应用,可以用于图像去噪。通过在网络中使用卷积层、池化层和反卷积层等结构,CNN可以学习到图像的局部特征,并对噪声进行去除。

3)基于生成对抗网络(GAN)的去噪算法:GAN是一种由生成器和判别器组成的对抗性模型。在图像去噪中,生成器负责将噪声图像转换为清晰图像,而判别器则用于判断生成器输出的图像是否真实。通过不断迭代训练,生成器可以生成更加清晰的图像,从而实现去噪效果。

4)基于变分自编码器(VAE)的去噪算法:VAE是一种生成模型,可以学习到输入数据的潜在表示。在去噪中,VAE可以学习到噪声数据的潜在分布,并生成去噪后的图像或信号。

5)基于深度残差网络(DnCNN)的去噪算法:DnCNN是一种专门设计用于图像去噪的深度残差网络。它通过堆叠多个卷积层和残差连接来学习到图像中的噪声特征,并去除噪声。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4774

    浏览量

    100909
  • 算法
    +关注

    关注

    23

    文章

    4622

    浏览量

    93063
  • 深度学习
    +关注

    关注

    73

    文章

    5507

    浏览量

    121298
  • 点云数据
    +关注

    关注

    0

    文章

    13

    浏览量

    1523

原文标题:汇总!三维点云去噪算法,涉及深度学习等

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于深度学习三维配准方法

    基于深度学习三维配准方法成为研究的主流,并随之诞生了DeepVCP、DGR、Predator
    发表于 11-29 11:41 1857次阅读

    三维快速建模技术与三维扫描建模的应用

    的HANDYSCAN三维激光扫描仪采集它的三维信息,然后利用Vxelements软件对多站式
    发表于 08-07 11:14

    汇总 |计算机视觉系统学习资料下载 精选资料分享

    计算机视觉干货资料,涉及相机标定、三维重建、立体视觉、SLAM、深度学习后处理、姿态估计、
    发表于 07-27 07:51

    视频运动捕获系统中多标记三维跟踪算法

    针对视频运动参数捕获系统中标记无法被正确匹配及跟踪的问题,提出一种多目标三维立体跟踪算法。该算法通过二
    发表于 04-08 09:00 21次下载

    采用密度k_means和改进双边滤波的自适应算法_郭进

    采用密度k_means和改进双边滤波的自适应算法_郭进
    发表于 03-19 18:58 1次下载

    散乱与简化的统一算法

    针对三维和简化很难用同一参数的问题,提出一种基于扩展的曲面变化度局部离群系数( ESVLOF)的散乱
    发表于 11-24 16:50 1次下载
    散乱<b class='flag-5'>点</b><b class='flag-5'>云</b><b class='flag-5'>去</b><b class='flag-5'>噪</b>与简化的统一<b class='flag-5'>算法</b>

    双边滤波算法

    针对三维数据模型在光顺中存在不同尺度噪声的问题,提出一种基于噪声分类的双边滤波
    发表于 01-05 10:51 2次下载
    双边滤波<b class='flag-5'>点</b><b class='flag-5'>云</b><b class='flag-5'>去</b><b class='flag-5'>噪</b><b class='flag-5'>算法</b>

    计算机视觉:三维数据处理学习内容总结

    三维匹配的目的就是把相邻扫描的数据拼接在一起。三维匹配重点关注匹配算法,常用的算法有最近
    的头像 发表于 11-27 10:32 4877次阅读

    基于深度学习三维语义分割研究分析

    近年来,深度传感器和三维激光扫描仪的普及推动了三维处理方法的快速发展。
    发表于 04-01 14:48 16次下载
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>三维</b><b class='flag-5'>点</b><b class='flag-5'>云</b>语义分割研究分析

    基于激光雷达三维目标检测算法

    文中提出了一种基于激光雷达三维目标检测算法 Voxeircnn( Voxelization Region-based Convolutional Neural Networks)
    发表于 05-08 16:35 45次下载

    的概念以及与三维图像的关系

    概念 三维图像的关系:三维图像是一种特殊的信息表达形式,其特征是表达的空间中
    的头像 发表于 08-17 09:18 7330次阅读
    <b class='flag-5'>点</b><b class='flag-5'>云</b>的概念以及与<b class='flag-5'>三维</b>图像的关系

    一文详解三维图像处理技术

    三维图像的关系:三维图像是一种特殊的信息表达形式,其特征是表达的空间中个维度的数据,表现形式包括:
    的头像 发表于 03-31 16:07 3084次阅读

    基于深度学习三维配准新方法

    一、摘要 本文介绍了一种基于深度学习三维配准新方法。该架构由个部分组成: (1)编码器由
    的头像 发表于 06-17 09:54 1413次阅读
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>三维</b><b class='flag-5'>点</b><b class='flag-5'>云</b>配准新方法

    什么是三维分割

    是世界的一种非结构化三维数据表示,通常由激光雷达传感器、立体相机或深度传感器采集。它由一系列单个组成,每个
    的头像 发表于 10-29 09:21 205次阅读

    基于深度学习三维分类方法

    近年来,云表示已成为计算机视觉领域的研究热点之一,并广泛应用于自动驾驶、虚拟现实、机器人许多领域。虽然深度学习技术在处理常规结构化的二
    的头像 发表于 10-29 09:43 638次阅读
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>三维</b><b class='flag-5'>点</b><b class='flag-5'>云</b>分类方法