PCL:计算点云均值与标准差

Posted 没事就要敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCL:计算点云均值与标准差相关的知识,希望对你有一定的参考价值。

1 函数原型

pcl::getMeanStd (const std::vector< float > &values, double &mean, double &stddev)

或者

pcl::getMeanStdDev(const std::vector< float > &values, double &mean, double &stddev);

2 代码实现

关键代码:

给定float类型的向量,输出均值和标准差

pcl::getMeanStd(vec_x, mean, stddev);

或者

pcl::getMeanStdDev(vec_x, mean, stddev);

源码:

pcl::getMeanStd (const std::vector<float> &values, double &mean, double &stddev)
{
  double sum = 0, sq_sum = 0;

  for (size_t i = 0; i < values.size (); ++i)
  {
    sum += values[i];
    sq_sum += values[i] * values[i];
  }
  mean = sum / static_cast<double>(values.size ());
  double variance = (sq_sum - sum * sum / static_cast<double>(values.size ())) / (static_cast<double>(values.size ()) - 1);
  stddev = sqrt (variance);
}

完整代码:

#include <iostream>
#include <pcl\\io\\pcd_io.h>
#include <pcl\\common\\common.h>	

using namespace std;

typedef pcl::PointXYZ PointT;

int main()
{
	//---------------------------- 加载点云 --------------------------
	pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
	if (pcl::io::loadPCDFile("test.pcd", *cloud) < 0)
	{
		PCL_ERROR("->点云文件不存在!\\a\\n");
		system("pause");
		return -1;
	}
	cout << "->加载了 " << cloud->points.size() << " 个数据点" << endl;
	//================================================================


	//------------------------ 计算点云均值与标准差 --------------------
	double mean;	//点云均值
	double stddev;	//点云标准差
	vector<float> vec_x;
	for (size_t i = 0; i < cloud->points.size(); i++)
	{
		vec_x.push_back(cloud->points[i].x);
	}

	pcl::getMeanStd(vec_x, mean, stddev);
	cout << "\\n->点云X坐标的均值为:" << endl;
	cout << mean << endl;
	cout << "\\n->点云X坐标的标准差为:" << endl;
	cout << stddev << endl;
	//================================================================

	return 0;
}

3 输出结果

->加载了 1348 个数据点

->点云X坐标的均值为:
6.86964

->点云X坐标的标准差为:
4.48687

以上是关于PCL:计算点云均值与标准差的主要内容,如果未能解决你的问题,请参考以下文章

如何计算一个数字与平均值的标准差?

如何根据随机分布数据计算 C++ 中的样本均值、标准差和方差,并与原始均值和 sigma 进行比较

均值方差和标准差计算的python代码

PCL点云处理之基于高程的粗糙度计算(一百)

算法 A 求稳健平均值和稳健标准差

算法 A 求稳健平均值和稳健标准差