经典点云去噪算法总结

本文汇总了多种经典的点云去噪算法,包括移动最小二乘(MLS)、双边滤波、LOP、WLOP、CLOP、EAR、PCN及TD(Total Denoising)和Pointfilter。提供了相应的代码资源和参考文献,适用于点云处理和表面重建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下列出方法均有运行成功的代码,所有工程文件我都会放在如下链接:

https://github.com/gx-sun/classic-point-cloud-denoising-methods

欢迎star

持续补充中,目前最新为2021.12月。

1.移动最小二乘MLS

基于PCL

#include "stdafx.h"


#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/surface/mls.h>
int main(int argc, char** argv)
{// 将一个适当类型的输入文件加载到对象PointCloud中
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());
	// 加载bun0.pcd文件,加载的文件在 PCL的测试数据中是存在的 
	pcl::io::loadPCDFile("bunny_hi_noise.pcd", *cloud);
	// 创建一个KD树
	pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
	// 输出文件中有PointNormal类型,用来存储移动最小二乘法算出的法线
	pcl::PointCloud<pcl::PointNormal> mls_points;
	// 定义对象 (第二种定义类型是为了存储法线, 即使用不到也需要定义出来)
	pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointNormal> mls;
	mls.setComputeNormals(true);
	//设置参数
	mls.setInputCloud(cloud);
	mls.setPolynomialFit(true);
	mls.setSearchMethod(tree);
	mls.setSearchRadius(0.06);
	// 曲面重建
	mls.process(mls_points);
	// 保存结果
	pcl::io::savePCDFile("bunny_hi_noise_mls.pcd", mls_points);
}

2.双边滤波

2.1基于PCL

实验编译成功了,但是因为其需要intensity分量,一般都没有,故无法运行 

#include "stdafx.h"
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/filters/bilat
点云点云处理中的一个重要任务,可以提高点云数据的质量。常用的点云算法包括基于统计学的方法、基于几何学的方法和基于深度学习的方法。这里我们介绍几种常用的基于统计学和几何学的点云算法的Python实现。 1. 基于统计学的点云算法——Statistical Outlier Removal (SOR) SOR算法是一种基于统计学的点云算法,其基本思想是通过计算每个点与周围点的距离的标准差,将距离超出一定阈值的点视为声点并剔除。SOR算法实现如下: ```python import open3d as o3d # 读取点云数据 pcd = o3d.io.read_point_cloud("point_cloud.ply") # SOR算法 pcd_sor = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) # 保存后的点云数据 o3d.io.write_point_cloud("point_cloud_sor.ply", pcd_sor) ``` 2. 基于几何学的点云算法——Uniform Sampling Uniform Sampling算法是一种基于几何学的点云算法,其基本思想是通过对每个点的周围点进行均匀采样,来减少点云数据中的声点。Uniform Sampling算法实现如下: ```python import open3d as o3d # 读取点云数据 pcd = o3d.io.read_point_cloud("point_cloud.ply") # Uniform Sampling算法 pcd_uniform = pcd.uniform_down_sample(every_k_points=10) # 保存后的点云数据 o3d.io.write_point_cloud("point_cloud_uniform.ply", pcd_uniform) ``` 3. 基于几何学的点云算法——Radius Outlier Removal (ROR) ROR算法是一种基于几何学的点云算法,其基本思想是通过计算每个点与周围点的距离的平均值,将距离超出一定半径范围的点视为声点并剔除。ROR算法实现如下: ```python import open3d as o3d # 读取点云数据 pcd = o3d.io.read_point_cloud("point_cloud.ply") # ROR算法 pcd_ror = pcd.remove_radius_outlier(nb_points=16, radius=0.05) # 保存后的点云数据 o3d.io.write_point_cloud("point_cloud_ror.ply", pcd_ror) ``` 以上三种算法均基于Open3D库实现,可以通过pip安装: ``` pip install open3d ```
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值