代码先锋网 代码片段及技术文章聚合

PCL:计算点云的标准化(normalized)协方差矩阵

技术标签: PCL 点云数据处理  算法

1 原理

对于点云中的每个点 p i p_i pi,对应的协方差矩阵 C C C 如下:
C = 1 N ⋅ ∑ i = 1 N ⋅ ( p i − p ‾ ) ⋅ ( p i − p ‾ ) T C=\cfrac {1}{N}·\sum_{i=1}^{N}·\left(p_i-\overline p\right)·\left(p_i-\overline p\right)^T C=N1i=1N(pip)(pip)T
C ⋅ V j ⃗ = λ j ⋅ V j ⃗ , j ∈ 0 , 1 , 2 C·\vec{V_j}=\lambda_j·\vec{V_j},j∈{0,1,2} CVj =λjVj j012

式中, N N N 为点云中点的个数, p ‾ \overline p p 为点云质心, λ j \lambda_j λj 为协方差矩阵的第 j j j 个特征值, V j ⃗ \vec{V_j} Vj 为第 j j j 个特征向量

点云的标准化协方差矩阵就是指将协方差矩阵的每一个元素除以点的个数

此方法在理论上是准确的。但是,使用浮点进行内部计算会降低精度,但会提高效率。

2 代码实现

关键代码:

给定输入点云,输出标准化的协方差矩阵和点云质心

pcl::computeMeanAndCovarianceMatrix(*cloud, covariance, centeroid);

完整代码:

#include <iostream>
#include <pcl\io\pcd_io.h>
#include <pcl\common\centroid.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;
	//================================================================


	//--------------------- 计算点云标准化协方差矩阵 -------------------
	Eigen::Matrix3f covariance;					//创建存储3×3协方差矩阵的对象
	Eigen::Vector4f centeroid;					//创建存储点云质心的对象
	pcl::computeMeanAndCovarianceMatrix(*cloud, covariance, centeroid);
	cout << "\n->点云的协方差矩阵为:" << endl;
	cout << covariance << endl;
	cout << "\n->点云质心为:" << endl;
	cout << centeroid << endl;
	//================================================================


	return 0;
}

3 结果展示

->加载了 1348 个数据点

->点云的协方差矩阵为:
   20.117   -3.8919   0.21394
  -3.8919  0.755084 -0.179444
  0.21394 -0.179444   8.88523

->点云质心为:
6.86964
1.52943
3.56691
      1
版权声明:本文为weixin_46098577原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46098577/article/details/119939758

智能推荐

关于协方差,协方差矩阵的个人理解

文章目录 协方差 协方差定义 举例说明 方差 相关系数 协方差矩阵(covariance matrix) 举例说明 数学符号表示 协方差矩阵的应用 马氏距离 数学符号定义 PCA降维 使用sklearn中的np.cov遇到的坑 协方差 协方差定义 协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。 设有随机变量XXX和随机变量YYY,则协方差定义为: Cov(X,Y)=E...

tips:MATLAB如何计算协方差矩阵

1.源码阅读 使用 阅读MATLAB源码。别看前面的注释,容易混 2.原理 MATLAB输入矩阵X是m*n大小。请注意: m是#features,n是#samples。 计算的主要代码是: denom为m-1(m>1)或m(m = 1)。非常有意思的是: a.先移除均值&移除均值的方式; b.denorm 是用来normlize.参考之前的文章,应该是把features看做样本 3....

java opencv calcCovarMatrix 计算协方差矩阵

在opencv的Core中有一个函数是计算协方差矩阵,这个函数为:calcCovarMatrix 在这里我们就来简单的介绍一些协方差矩阵 方差 方差是各个数据与平均数之差的平方的平均数。在概率论和数理统计中,方差(英文Variance)用来度量随机变量和其数学期望(即均值)之间的偏离程度 我们首先看看方差,对于单个向量,我们称为是方差。比如一个n维的向量   其中&n...

方差、标准差和协方差三者之间的定义与计算

理解三者之间的区别与联系,要从定义入手,一步步来计算,同时也要互相比较理解,这样才够深刻。 方差 方差是各个数据与平均数之差的平方的平均数。在概率论和数理统计中,方差(英文Variance)用来度量随机变量和其数学期望(即均值)之间的偏离程度。在许多实际问题中,研究随机变量和均值之间的偏离程度有着很重要的意义。  标准差 方差开根号。 协方差 在概率论和统计学中,协方差用于衡量两个变量的...

猜你喜欢

浅谈协方差矩阵

今天看论文的时候又看到了协方差矩阵这个破东西,以前看模式分类的时候就特困扰,没想到现在还是搞不清楚,索性开始查协方差矩阵的资料,恶补之后决定马上记录下来,嘿嘿~本文我将用自认为循序渐进的方式谈谈协方差矩阵。 统计学的基本概念 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差。首先我们给你一个含有n个样本的集合X={X1,…,Xn},依次给出这些概念的...

协方差矩阵

原文链接:http://pinkyjie.com/2010/08/31/covariance/ 一、统计学的基本概念 统计学里最基本的概念就是样本的均值、方差、标准差。首先,我们给定一个含有n个样本的集合,下面给出这些概念的公式描述:均值X¯¯¯¯X¯、标准差S=∑ni=1(Xi−X¯¯¯¯...

协方差矩阵

在统计学与概率论中,协方差矩阵的每个元素是各个向量元素之间的协方差,是从标量随机变量到高维度随机向量的自然推广。 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差。首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧,一带而过。 很显然,均值描述的是样本集合的中间点,它告诉我们的信息是很有限的,而标准差给我们描述的则是...

协方差矩阵

输入矩阵1 axb 输入矩阵2 cxd 协方差矩阵shape 为 (a+c) x (a+c) 示例:...

对方差,协方差,相关系数,协方差矩阵的理解与比较

与博主有相同的感觉,方差,协方差,相关系数这三个概念都很常见,对方差和相关系数的理解还好,每次碰到协方差都好像是第一次见到一样,要查阅一下他的定义公式和意义,进行新一次的学习。 这几个概念已经有很多人总结分析过,但是总要自己亲自整理输出一次,才能加深理解。 方差 一个随机变量偏离中心的离散程度。公式: 协方差 两个随机变量协同偏离中心的离散程度。公式: 仅仅观察协方差的模值可能意义不大,因为并不知...