亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實現(xiàn)點云添加高斯噪聲功能

 更新時間:2021年07月15日 15:50:12   作者:借我十斤肉  
所謂高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲,這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)點云添加高斯噪聲功能的相關(guān)資料,需要的朋友可以參考下

0 添加高斯噪聲后的點云

紅色為添加的高斯噪聲點,白色為原始點

1 什么是高斯噪聲

高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲。(百度百科

高斯分布,也稱正態(tài)分布,又稱常態(tài)分布,記為 N ( μ , σ 2 ) ),其中 μ , σ 2 為分布的參數(shù),分別為高斯分布的期望和方差,其中 σ > 0 ,稱為標準差。當 μ , σ 有確定值時,p ( x ) 也就確定了,特別當 μ = 0 , σ 2 = 1時,x 的分布為標準正態(tài)分布。

高斯分布函數(shù)

2 怎樣添加高斯噪聲

磨刀不誤砍柴工,將添加高斯噪聲封裝到 CreatGaussNoise類 中,只需在main.cpp中設(shè)置輸入點云(要添加噪聲的點云)、設(shè)置高斯噪聲參數(shù)(μ , σ)即可。

實現(xiàn)代碼

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;							//創(chuàng)建高斯噪聲對象agn
	pcl::PointCloud<pcl::PointXYZ> cloud_out;	//保存結(jié)果的點云
	agn.setInputCloud(cloud_in);				//設(shè)置輸入點云
	agn.setParameters(0,2);						//設(shè)置高斯噪聲參數(shù)mu,sigma
	agn.addGaussNoise(cloud_out);				//執(zhí)行添加高斯噪聲,并將結(jié)果保存在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>		//隨機數(shù)所需頭文件

class AddGaussNoise
{
public:

	/**
	* @brief   : 設(shè)置輸入點云
	* @param[I]: cloud_in (輸入點云)
	* @param[O]: none
	* @return  : none
	* @note    :
	**/
	void setInputCloud(pcl::PointCloud<pcl::PointXYZ> &cloud_in);

	/**
	* @brief   : 設(shè)置高斯噪聲參數(shù)
	* @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   : 執(zhí)行添加高斯噪聲
	* @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;					//是否設(shè)置輸入點云
	double m_mu, m_sigma;							//高斯分布參數(shù)
	bool is_setParameters = false;					//是否設(shè)置高斯分布參數(shù)
};

add_gauss_noise.cpp

#include "add_gauss_noise.h"

/**
* @brief   : 設(shè)置輸入點云
* @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   : 設(shè)置高斯噪聲參數(shù)
* @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應(yīng)大于0!\a\n");
		system("pause");
		abort();
	}
}

/**
* @brief   : 執(zhí)行添加高斯噪聲
* @param[I]: cloud_out (添加高斯噪聲后的點云)
* @param[O]: none
* @return  : none
* @note    :
**/
void AddGaussNoise::addGaussNoise(pcl::PointCloud<pcl::PointXYZ> &cloud_out)
{
	boost::mt19937 zgy;								//等分布均勻偽隨機數(shù)發(fā)生器
	zgy.seed(static_cast<unsigned int>(time(0)));	//隨機種子
	boost::normal_distribution<> nd(m_mu, m_sigma);	//定義正態(tài)分布,均值為mu,標準差為sigma
	boost::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高斯正態(tài)分布函數(shù)用法詳解

總結(jié)

到此這篇關(guān)于C++實現(xiàn)點云添加高斯噪聲功能的文章就介紹到這了,更多相關(guān)C++點云高斯噪聲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中的結(jié)構(gòu)體的入門學習教程

    C語言中的結(jié)構(gòu)體的入門學習教程

    這篇文章主要介紹了C語言中的結(jié)構(gòu)體的入門學習教程,以struct語句定義的結(jié)構(gòu)體是C語言編程中的重要基礎(chǔ),需要的朋友可以參考下
    2015-12-12
  • C語言簡單實現(xiàn)銀行ATM存取款功能

    C語言簡單實現(xiàn)銀行ATM存取款功能

    這個是大一時期寫的。大四的時候整理了一下(本人C語言學的也不太好)。肯定很多不足和存在漏洞的地方、僅供借鑒、僅供借鑒,代碼中有大量注釋,新手看起來也沒有困難
    2021-11-11
  • Qt 自定義分頁控件的實現(xiàn)

    Qt 自定義分頁控件的實現(xiàn)

    在應(yīng)用程序開發(fā)時經(jīng)常會遇到數(shù)據(jù)分頁的需求,每一頁展示特定數(shù)量的數(shù)據(jù),通過點擊按鈕翻頁或者輸入頁碼跳轉(zhuǎn)到指定頁,本文就來介紹一下Qt 自定義分頁控件的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • C++類和對象實戰(zhàn)之Date類的實現(xiàn)方法

    C++類和對象實戰(zhàn)之Date類的實現(xiàn)方法

    C++ 標準庫沒有提供所謂的日期類型,C++ 繼承了C語言用于日期和時間操作的結(jié)構(gòu)和函數(shù),這篇文章主要給大家介紹了C++類和對象實戰(zhàn)之Date類的實現(xiàn)方法,需要的朋友可以參考下
    2021-12-12
  • c語言中全局變量的設(shè)置方式

    c語言中全局變量的設(shè)置方式

    這篇文章主要介紹了c語言中全局變量的設(shè)置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Qt實現(xiàn)柵格布局效果

    Qt實現(xiàn)柵格布局效果

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)柵格布局效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++之std::vector刪除元素的幾種方式及區(qū)別說明

    C++之std::vector刪除元素的幾種方式及區(qū)別說明

    這篇文章主要介紹了C++之std::vector刪除元素的幾種方式及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言從基礎(chǔ)到進階全面講解數(shù)組

    C語言從基礎(chǔ)到進階全面講解數(shù)組

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計算機內(nèi)存里連續(xù)存放,地址編號最低的存儲單元存放數(shù)組的起始元素,地址編號最高的存儲單元存放數(shù)組的最后一個元素
    2022-05-05
  • C\C++ 獲取當前路徑實例詳解

    C\C++ 獲取當前路徑實例詳解

    這篇文章主要介紹了C\C++ 獲取當前路徑實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++?電話號碼的字母組合功能實現(xiàn)

    C++?電話號碼的字母組合功能實現(xiàn)

    這篇文章主要介紹了C++?電話號碼的字母組合,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08

最新評論