点云添加高斯噪声的C++实现
文章目录
- 0 添加高斯噪声后的点云
- 1 什么是高斯噪声
- 2 怎样添加高斯噪声
0 添加高斯噪声后的点云
红色为添加的高斯噪声点,白色为原始点
1 什么是高斯噪声
高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。(百度百科)
高斯分布,也称正态分布,又称常态分布,记为 N(μ,σ2)N(μ,σ^2)N(μ,σ2),其中 μ,σ2μ,σ^2μ,σ2 为分布的参数,分别为高斯分布的期望和方差,其中 σ>0\sigma>0σ>0,称为标准差。当 μ,σμ,σμ,σ 有确定值时,p(x)p(x)p(x) 也就确定了,特别当 μ=0,σ2=1μ=0,σ^2=1μ=0,σ2=1 时,xxx 的分布为标准正态分布。
p(x)=1σ2πe−(x−μ)22σ2p(x)=\cfrac{1}{\sigma\sqrt{2\pi}}e^{-\cfrac{(x-\mu)^2}{2\sigma^2}}p(x)=σ2π1e−2σ2(x−μ)2
高斯分布函数
2 怎样添加高斯噪声
磨刀不误砍柴工,将添加高斯噪声封装到 CreatGaussNoise类 中,只需在main.cpp
中设置输入点云(要添加噪声的点云)、设置高斯噪声参数(μ,σ\mu,\sigmaμ,σ)即可。
实现代码
main.cpp
#include "add_gauss_noise.h"int main()
{//-------------------加载点云-------------------pcl::PointCloud<pcl::PointXYZ> cloud_in;if (pcl::io::loadPCDFile("Armadillo.pcd", cloud_in) < 0){PCL_ERROR("->点云文件不存在!\a\n");system("pause");return -1;}//-------------------添加高斯噪声-------------------AddGaussNoise agn; //创建高斯噪声对象agnpcl::PointCloud<pcl::PointXYZ> cloud_out; //保存结果的点云agn.setInputCloud(cloud_in); //设置输入点云agn.setParameters(0,2); //设置高斯噪声参数mu,sigmaagn.addGaussNoise(cloud_out); //执行添加高斯噪声,并将结果保存在cloud_out中//-------------------保存添加高斯噪声后的点云-------------------pcl::io::savePCDFileBinary("addGaussNoise.pcd", cloud_out);return 0;
}
add_gauss_noise.h
#pragma once
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <boost/random.hpp> //随机数所需头文件class AddGaussNoise
{public:/*** @brief : 设置输入点云* @param[I]: cloud_in (输入点云)* @param[O]: none* @return : none* @note :**/void setInputCloud(pcl::PointCloud<pcl::PointXYZ> &cloud_in);/*** @brief : 设置高斯噪声参数* @param[I]: mu (均值,默认0)* @param[I]: sigma (标准差,默认1)* @param[O]: none* @return : none* @note :**/void setParameters(double mu = 0.0, double sigma = 1.0);/*** @brief : 执行添加高斯噪声* @param[I]: cloud_out (添加高斯噪声后的点云)* @param[O]: none* @return : none* @note :**/void addGaussNoise(pcl::PointCloud<pcl::PointXYZ> &cloud_out);
private:pcl::PointCloud<pcl::PointXYZ> m_cloud_in; //输入点云bool is_setInputCloud = false; //是否设置输入点云double m_mu, m_sigma; //高斯分布参数bool is_setParameters = false; //是否设置高斯分布参数
};
add_gauss_noise.cpp
#include "add_gauss_noise.h"/**
* @brief : 设置输入点云
* @param[I]: cloud_in (输入点云)
* @param[O]: none
* @return : none
* @note :
**/
void AddGaussNoise::setInputCloud(pcl::PointCloud<pcl::PointXYZ> &cloud_in)
{m_cloud_in = cloud_in;is_setInputCloud = true;
}/**
* @brief : 设置高斯噪声参数
* @param[I]: mu (均值,默认0)
* @param[I]: sigma (标准差,默认1)
* @param[O]: none
* @return : none
* @note :
**/
void AddGaussNoise::setParameters(double mu, double sigma)
{if (sigma > 0){m_mu = mu;m_sigma = sigma;is_setParameters = true;}else{PCL_ERROR("->sigma应大于0!\a\n");system("pause");abort();}
}/**
* @brief : 执行添加高斯噪声
* @param[I]: cloud_out (添加高斯噪声后的点云)
* @param[O]: none
* @return : none
* @note :
**/
void AddGaussNoise::addGaussNoise(pcl::PointCloud<pcl::PointXYZ> &cloud_out)
{boost::mt19937 zgy; //等分布均匀伪随机数发生器zgy.seed(static_cast<unsigned int>(time(0))); //随机种子boost::normal_distribution<> nd(m_mu, m_sigma); //定义正态分布,均值为mu,标准差为sigmaboost::variate_generator<boost::mt19937&, boost::normal_distribution<>> gauss_noise(zgy, nd); //生成高斯噪声pcl::PointCloud<pcl::PointXYZ> cloud_gauss; //声明高斯噪声点云cloud_gauss = m_cloud_in; //将原始点云拷贝给高斯噪声点云,用于下面的平移 for (size_t i = 0; i < cloud_gauss.size(); i++){cloud_gauss.points[i].x += static_cast<float> (gauss_noise());cloud_gauss.points[i].y += static_cast<float> (gauss_noise());cloud_gauss.points[i].z += static_cast<float> (gauss_noise());}cloud_out = m_cloud_in + cloud_gauss; //将原始点云与噪声点云合并,得到添加高斯噪声后的点云
}
参考链接
C++ normal_distribution高斯正态分布函数用法详解
点云添加高斯噪声的C++实现相关推荐
- Easy3D 点云添加高斯噪声
文章目录 一.简介 二.实现代码 三.实现效果 参考资料 一.简介 在点云模型中将所有的点沿某一向量方向随机偏移一定距离,以此来得到点云实体的噪声点,偏移的幅度与点云尺度有关,偏移距离服从高斯分布,以 ...
- 图像数据增强(平移,旋转,亮度变换,翻转,添加高斯噪声,缩放,裁剪)
1.平移: import cv2 import tensorflow as tf import numpy as np from PIL import Image from skimage impor ...
- Python3|Opencv——添加高斯噪声Gauss Noise
# -*- coding:utf-8 -*- #@Time: 2020/2/18 #@Author: EmmaHuu #@File: gauss_noise """ 添加 ...
- python高斯滤波和降噪_python添加高斯噪声和椒盐噪声,实现中值滤波和均值滤波,实现Roberts算子和Sobel算子...
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一. 由于时间紧张,代码没有进行任何优化, ...
- 数字图像处理——添加高斯噪声椒盐噪声
数字图像处理--添加高斯噪声&椒盐噪声 本文链接:https://blog.csdn.net/u012936765/article/details/53200918 最近交了数图作业,mark ...
- 向数据中添加高斯噪声
什么是高斯噪声 高斯噪声既是符合高斯正态分布的误差.一些情况下我们需要向标准数据中加入合适的高斯噪声会让数据变得有一定误差而具有实验价值.高斯噪声还有一些其他用途但是我不太了解,这里我是为了实现多项式 ...
- 通过matlab编程,对以下图像分别添加高斯噪声和椒盐噪声(参数自定),并使用理想低通滤波器、高斯低通滤波器和巴特沃斯低通滤波器进行去噪。
添加高斯噪声和椒盐噪声,并用理想低通滤波器进行去噪 t=imread('C:\Users\Administrator\Desktop\123.jpg'); subplot(3,2,1) imshow( ...
- 对一幅图像添加高斯噪声
参考别人的程序写的,因为网上对图像添加高斯噪声的程序很难找到,我就自己整理出来一份. #include "cv.h" #include "highgui.h" ...
- C++版本OpenCv教程(二十七)图像中添加高斯噪声
OpenCV 4中同样没有专门为图像添加高斯噪声的函数,对照在图像中添加椒盐噪声的过程,我们可以根据需求利用能够产生随机数的函数来完成在图像中添加高斯噪声的任务.在OpenCV 4中提供了fill() ...
最新文章
- C语言-变量生存期及作用域
- 第三方软件要使用QQ邮箱进行发邮件相关设置
- 语言线性拟合线对称_文科生都能看懂的机器学习教程:梯度下降、线性回归、逻辑回归...
- 什么是句柄?为什么会有句柄?HANDLE
- 2013年最新省市区三级联动mysql数据库_省市区三级联动菜单(附数据库)
- OI国家集训队论文集1999~2018
- css——居中对齐方法
- 数据库之战| 寻找你心中的数据库漫威英雄
- 服务器安装谷歌浏览器
- HTTP和RPC的区别
- 关于gite代码提交不显示绿格子的处理心得git
- https://mp.weixin.qq.com/s?__biz=MzkxNTIzODIxNQ==tempkey=MTEwOV9qbGlub091aVlKb1NtOVZKV3lTcHgwd3U0NG
- 冰封王座人工只能_魔兽争霸3玩家热议 人工智能能否轻松战war3胜职业选手?
- 木瓜移动跨境行业一周咨讯:字节跳动旗下Fanno欧洲上线、亚马逊中国黑五战绩优秀
- NBA球员数据爬虫练习
- 去除高清视频锯齿几个方法
- 计算机前端总线频率,前端总线频率
- Oracle收集统计信息
- STM32F103C8T6读取气压计MS5611,I2C读取模式
- 使用MDC增强日志记录
热门文章
- Swing 组件嵌套组合自适应大小问题
- 男女都走不出的27岁定律!
- OriginBot智能机器人开源套件-Step1套件组装
- 简体繁体互译代码段:
- 物联网如何赋能污水治理
- Python 高级编程和异步IO并发编程 --13_5 ThreadPoolExecutor 和asyncio完成阻塞io请求
- Cesium地图地形加载与建筑体的使用
- 文献阅读 - Deep Contextualized Word Representations
- AI理论随笔-对称矩阵、正交矩阵与特征向量,特征值(2)
- ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法