PCA相关 PCL库和Matlab对比

首先我们的问题是:

看懂 PCL 库计算 PCA 的结果,通过和 Matlab 相比。

首先,我们的数据是:

//这是5个点(p),每一行是p.x  p.y  p.z-0.376005, -0.541869, -0.342539;-0.184247, -0.617787, -0.348916;-0.672017, -0.49449,   0.035638;-0.556014, -0.604463, -0.575986;-0.834069, -0.786591, -0.703937;

1、PCL的计算方法

void Tools::PCA(PointCloud<PointT>::Ptr aimCloud, Vector4f *pcaCentroid, Matrix3f *eigenVectorsPCA, Vector3f *eigenValuesPCA) {pcl::compute3DCentroid(*aimCloud, *pcaCentroid);Eigen::Matrix3f covariance;pcl::computeCovarianceMatrixNormalized(*aimCloud, *pcaCentroid, covariance);Eigen::SelfAdjointEigenSolver<Eigen::Matrix3f>eigenSolver(covariance, Eigen::ComputeEigenvectors);*eigenVectorsPCA = eigenSolver.eigenvectors();*eigenValuesPCA = eigenSolver.eigenvalues();eigenVectorsPCA->col(2) = eigenVectorsPCA->col(0).cross(eigenVectorsPCA->col(1)); //校正主方向间垂直eigenVectorsPCA->col(0) = eigenVectorsPCA->col(1).cross(eigenVectorsPCA->col(2));eigenVectorsPCA->col(1) = eigenVectorsPCA->col(2).cross(eigenVectorsPCA->col(0));
}
 //计算点云的PCAVector4f pcaCentroid;Matrix3f eigenVectorsPCA;Vector3f eigenValuesPCA;//cloud是只有上述5个点的点云tools->PCA(cloud, &pcaCentroid, &eigenVectorsPCA, &eigenValuesPCA);cout << "特征值(3x1):\n" << eigenValuesPCA << endl;cout << "质心(3x1):\n" << pcaCentroid << endl;cout << "特征向量(3x3):\n" << eigenVectorsPCA << endl;

计算结果是:

特征值(3x1):0.002011730.04396750.0787971质心(3x1):-0.524471-0.60904-0.3871481特征向量(3x3):-0.0959844  -0.877313    0.4702210.946544    0.0657084   0.315809-0.307961    0.475398    0.824109

2、Matlab的计算方法

feature = [
-0.376005, -0.541869, -0.342539;
-0.184247, -0.617787, -0.348916;
-0.672017, -0.49449, 0.0356387;
-0.556014, -0.604463, -0.575986;
-0.834069, -0.786591, -0.703937;
];
[coeff, score, latent, tsquared, explained, mu] = pca(feature)

计算结果是:

coeff =0.4702    0.8773   -0.09600.3158   -0.0657    0.94650.8241   -0.4754   -0.3080score =0.1278    0.1046    0.03560.1887    0.2809   -0.05270.3152   -0.3380   -0.0076-0.1690    0.0618    0.0655-0.4627   -0.1093   -0.0408latent =0.09850.05500.0025tsquared =0.86872.90203.11012.06643.0528explained =63.150735.23711.6123mu =-0.5245   -0.6090   -0.3871

3、Matlab的计算方法和PCL计算结果的对比

1、COEFF,返回N×P数据矩阵X的主成分系数。X的行对应于观测值,列对应于变量。每列系数包含一个主成分的系数。各列按主成分方差(latent)降序排列。默认情况下,PCA将数据居中并使用奇异值分解算法。对于非默认选项,请使用名称/值对参数。--------------------------------------------------------------------------------------
coeff =                                            特征向量(3x3):0.4702    0.8773   -0.0960                            -0.0959844  -0.877313    0.4702210.3158   -0.0657    0.9465                          0.946544    0.0657084   0.3158090.8241   -0.4754   -0.3080                         -0.307961    0.475398    0.824109--------------------------------------------------------------------------------------
其实是一样的,只是PCA里面对轴的方向做出了调整。
=========================================================================================  2、SCORE,返回主成分得分,它是X在主成分空间中的表示。score的行对应观察值,列对应主成分。中心数据可以用SCORE*COEFF'重建。--------------------------------------------------------------------------------------
score =0.1278    0.1046    0.03560.1887    0.2809   -0.05270.3152   -0.3380   -0.0076-0.1690    0.0618    0.0655-0.4627   -0.1093   -0.0408--------------------------------------------------------------------------------------
PCL没有算这个
=========================================================================================  3、LATENT,返回每个主成分方差,即X的协方差矩阵的特征值,特征值从大到小进行排序。--------------------------------------------------------------------------------------
latent =0.09850.05500.0025--------------------------------------------------------------------------------------
PCL没有算这个
=========================================================================================  4、TSQUARED,返回X中每个观测值的Hotelling T平方统计值。   --------------------------------------------------------------------------------------
tsquared =0.86872.90203.11012.06643.0528--------------------------------------------------------------------------------------
PCL没有算这个
========================================================================================= 5、EXPLAINED,返回一个向量,其中包含每个主成分方差占总方差的百分比。 --------------------------------------------------------------------------------------
explained =                                    PCL手算的结果63.1507                                     0.0161226892953174735.2371                                      0.352370517709568841.6123                                       0.6315067929951137--------------------------------------------------------------------------------------
PCL这个得自己算:sum = 0.00201173 + 0.0439675 + 0.0787971print(0.00201173 / sum)print(0.0439675 / sum)print(0.0787971 / sum)
========================================================================================= 6、MU,“Centered”设置为true时返回估计的平均值MU;设置为false时返回所有零。--------------------------------------------------------------------------------------
mu =-0.5245   -0.6090   -0.3871质心(3x1):-0.524471-0.60904-0.3871481--------------------------------------------------------------------------------------
PCL第四个值不要就可以了。
=========================================================================================

PCA相关 PCL库和Matlab对比相关推荐

  1. [转载] PCL库相关资源的查找和使用Tip

    前言 学习PCL库的两个月左右时间里,从刚开始的无从下手到慢慢地摸清一些门道,走了很多弯路,也遇到过很多困惑,逐渐有了一些如何查找与利用PCL库学习资源的心得.所以把这些心得记录下来,一是为了给自己以 ...

  2. 人脸识别 pca matlab,基于PCA的人脸识别的Matlab实现代码

    基于PCA的人脸识别算法 --Matlab Face recognition Based on PCA 目录 人脸识别技术是基于人的脸部特征,对输入的人脸图象或者视频流 . 首先判断其是否存在人脸 , ...

  3. 基于PCA的人脸识别的Matlab实现代码

    基于PCA的人脸识别算法 --Matlab Face recognition Based on PCA 目录 一.人脸识别简介...3 二.主元分析...3 三.原理说明...3 四.算法流程图... ...

  4. 随笔:送给初次使用PCL库的小伙伴

    写在前面: PCL库,之前在使用他的时候,只是各种掉库,觉得自己会调库了,根据案例可以跑出来自己想要的结果(比如计算一个点云的边界,使用RANSAC拟合三维直线等)觉得自己就是掌握了,其实并不然,这样 ...

  5. 学习PCL库你应该知道的C++特性

    要学会PCL首先要对C++进行学习,所以这里我们首先对PCL库的代码中常见的C++的技巧进行整理和概述,并且对其中的难点进行细化讲解.首先我们搞清楚PCL库的文件形式.是一个以CMake构建的项目,库 ...

  6. CMake结合PCL库学习(1)

    经常会有有人问到CMake的学习的问题,而且网上也有很多博客是介绍学习CMake 的用法,但是我觉的学习不用这样死板,用到了就顺便学习一下,也就是边做边学,由浅入深,慢慢的就会熟悉了,这个学习的过程中 ...

  7. MAC 如何配置 PCL 库并在 VS Code 中使用

    首先,让我们简单介绍一下.PCL(英语:Point Cloud Library)是一个开源的算法库,用于处理点云和计算机视觉中的三维几何过程.PCL包含点云滤波.特征估计.三维重建.点云配准.模型拟合 ...

  8. 3D视觉学习计划之PCL库的基础知识

    3D视觉学习计划之PCL库的基础知识 一.PCL库的概述 PCL是一个大型跨平台开源C++编程库,它在吸收了前人点云相关研究基础上建立起来,实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取. ...

  9. 学习PCL库需要知道哪些知识?

    公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com.未经作者允许请勿转载,欢迎各位同学积极分享和交流. 学习P ...

  10. ROS下使用PCL库教程

    ros下使用PCL教程 ROS下使用PCL步骤 1. 创建工作空间 2. 创建ROS包 3. 创建代码ROS代码框架 4. 配置CMakeLists.txt文件 5. 从PCL教程中下载pcl处理代码 ...

最新文章

  1. 基于VC++的GDI常用坐标系统及应用
  2. python 实现队列功能 queue insert() pop()
  3. pyspark模块介绍
  4. java让线程空转_Java锁:悲观/乐观/阻塞/自旋/公平锁/闭锁,锁消除CAS及synchronized的三种锁级别...
  5. PHP中封装mysql数据库链接(简单版)
  6. Find the Difference(leetcode389)
  7. Android的listview滚动时背景不让变黑解决办法
  8. Qt creator5.7 OpenCV249之形态学处理(含源码下载)
  9. Linux 如何通过命令仅获取IP地址
  10. ORACLE新增DATABASE LINK
  11. C语言第五次作业--数据类型
  12. 代理商为何要卖增值业务?
  13. 软考云题库Web版正式上线了
  14. 计算机技术了解(基础)
  15. 3. lambda 方法引用
  16. 1022 - 快手短视频广告主接入实践笔记
  17. CUDA11.7安装-C盘杀手(含卸载和安装教程)
  18. Gem5模拟器,详解官网教程Debugging gem5(四)
  19. 深入浅出依赖注入及其在抖音直播中的应用
  20. php微博互粉网站源代码,PHP联合【新浪微博】实现第三方登陆

热门文章

  1. 缓存穿透,缓存击穿,缓存雪崩以及解决方案
  2. 从文本中随机选择百万行
  3. mysql如何更改文件所有者sa_Mssql Server2005中更改sa的用户名的多种方法
  4. 编程的一些小知识点总结
  5. docker版本包 乌班图_在Ubuntu 18.04系统中安装指定docker版本的简单方法
  6. 用wxpython编写登录界面_wxpython+pymysql实现用户登陆功能
  7. oracle 11.2 awr,oracle 11g database获取AWR报告
  8. kettle使用数据库来生成序列_kettle 生成 ktr
  9. centos7配置php-fpm,centos7 配置php-fpm
  10. java匹配uri_使用查询字符串中的:在Java中创建URI