一、简介
在点云模型中,所有点沿向量方向偏移一定距离,其距离并服从高斯分布,来得到高斯分布噪声。
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/random_sample.h>
#include <pcl/filters/uniform_sampling.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/filters/fast_bilateral.h>
#include <random>
#include <pcl/io/ply_io.h>
using namespace pcl;
using namespace std;
int main()
{
// 读取点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("xrz.pcd", *cloud);
// 添加高斯噪声
pcl::PointCloud<pcl::PointXYZ>::Ptr noisyCloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::copyPointCloud(*cloud, *noisyCloud);
float mean = 0.0f; // 噪声均值
float stddev = 0.015f; // 噪声标准差
std::random_device rd;
std::default_random_engine generator(rd());
std::normal_distribution<float> distribution(mean, stddev);
for (size_t i = 0; i < noisyCloud->points.size(); ++i)
{
noisyCloud->points[i].x += distribution(generator);
noisyCloud->points[i].y += distribution(generator);
noisyCloud->points[i].z += distribution(generator);
}
// 保存噪声点云
pcl::io::savePLYFile("v2.ply", *noisyCloud); //保存文件
return 0;
}