PCL 添加噪聲

添加高斯噪聲
#include <iostream> //標準輸入輸出流
#include <pcl/io/pcd_io.h> //PCL的PCD格式文件的輸入輸出頭文件
#include <pcl/point_types.h> //PCL對各種格式的點的支持頭文件
#include <pcl/point_cloud.h>
#include <pcl/visualization/cloud_viewer.h>//點雲查看窗口頭文件
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/random.hpp>
#include <pcl/console/time.h>

int main(int argc, char** argv)
{
 std::cout << "讀取文件" << std::endl;
 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 創建點雲(指針)
 if (pcl::io::loadPCDFile<pcl::PointXYZ>("E:\\data\\12.pcd", *cloud) == -1) //* 讀入PCD格式的文件,如果文件不存在,返回-1
 {
  PCL_ERROR("Couldn't read file test_pcd.pcd \n"); //文件不存在時,返回錯誤,終止程序。
  system("pause");
  return (-1);
 }
 std::cout << "正確查找文件" << std::endl;

 //添加高斯噪聲
 pcl::PointCloud<pcl::PointXYZ>::Ptr cloudfiltered(new pcl::PointCloud<pcl::PointXYZ>());
 cloudfiltered->points.resize(cloud->points.size());//將點雲的cloud的size賦值給噪聲
 cloudfiltered->header = cloud->header;
 cloudfiltered->width = cloud->width;
 cloudfiltered->height = cloud->height;
 boost::mt19937 rng;
 rng.seed(static_cast<unsigned int>(time(0)));
 boost::normal_distribution<> nd(0, 2);
 boost::variate_generator<boost::mt19937&, boost::normal_distribution<>> var_nor(rng, nd);
 //添加噪聲
 for (size_t point_i = 0; point_i < cloud->points.size(); ++point_i)
 {
  cloudfiltered->points[point_i].x = cloud->points[point_i].x + static_cast<float> (var_nor());
  cloudfiltered->points[point_i].y = cloud->points[point_i].y + static_cast<float> (var_nor());
  cloudfiltered->points[point_i].z = cloud->points[point_i].z + static_cast<float> (var_nor());
 }

 pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
 //設置顏色爲綠色
 pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> singleColor(cloud, 0, 255, 0);
 //往窗口添加點雲並設置顏色,原圖爲cloud 添加後爲cloudfiltered,記得改
 viewer.addPointCloud(cloud, singleColor, "cloud");
 //添加點雲後,通過點雲ID來設置顯示大小
 viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");
 //重置相機,將點雲顯示到窗口
 viewer.resetCamera();
 while (!viewer.wasStopped())
 {
  viewer.spinOnce();
 }
 return (0);
}


結果圖對比

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章