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:计算点云均值与标准差的主要内容,如果未能解决你的问题,请参考以下文章