OpenCV  4.10.0
开源计算机视觉库
正在加载...
正在搜索...
没有匹配项
公共类型 | 公共成员函数 | 公共属性 | 所有成员列表
cv::PCA 类参考

主成分分析。 更多...

#include <opencv2/core.hpp>

cv::PCA 的协作图

公共类型

枚举  Flags {
  DATA_AS_ROW = 0 ,
  DATA_AS_COL = 1 ,
  USE_AVG = 2
}
 

公共成员函数

 PCA ()
 默认构造函数
 
 PCA (InputArray data, InputArray mean, int flags, double retainedVariance)
 
 PCA (InputArray data, InputArray mean, int flags, int maxComponents=0)
 
Mat backProject (InputArray vec) const
 从它们的 PC 投影中重建向量。
 
void backProject (InputArray vec, OutputArray result) const
 
PCAoperator() (InputArray data, InputArray mean, int flags, double retainedVariance)
 
PCAoperator() (InputArray data, InputArray mean, int flags, int maxComponents=0)
 执行 PCA
 
Mat project (InputArray vec) const
 将向量(s) 投影到主成分子空间。
 
void project (InputArray vec, OutputArray result) const
 
void read (const FileNode &fn)
 加载 PCA 对象
 
void write (FileStorage &fs) const
 写入 PCA 对象
 

公共属性

Mat eigenvalues
 协方差矩阵的特征值
 
Mat eigenvectors
 协方差矩阵的特征向量
 
Mat mean
 投影前减去的平均值,投影后加上的平均值
 

详细描述

主成分分析。

该类用于为一组向量计算一个特殊的基。该基将由从输入向量集计算出的协方差矩阵的特征向量组成。PCA 类还可以将向量变换到由基定义的新坐标空间或从新坐标空间变换。通常,在这个新的坐标系中,来自原始集合中的每个向量(以及这些向量的任何线性组合)都可以通过取其前几个分量来相当精确地近似,这些分量对应于协方差矩阵的最大特征值的特征向量。从几何角度来看,这意味着您计算了向量到由对应于协方差矩阵的主特征值的几个特征向量形成的子空间的投影。并且通常这样的投影非常接近原始向量。因此,您可以用一个更短的向量来表示来自高维空间的原始向量,该向量由投影向量在子空间中的坐标组成。这种变换也称为卡尔胡宁-洛厄变换或 KLT。请参阅 http://en.wikipedia.org/wiki/Principal_component_analysis

下面的示例是一个函数,它接受两个矩阵。第一个函数存储一组向量(每行一个向量),这些向量用于计算 PCA。第二个函数存储另一个“测试”向量集(每行一个向量)。首先,这些向量用 PCA 压缩,然后重建回来,然后计算重建误差范数并为每个向量打印出来。

using namespace cv;
PCA compressPCA(const Mat& pcaset, int maxComponents,
const Mat& testset, Mat& compressed)
{
PCA pca(pcaset, // 传递数据
Mat(), // 我们没有预先计算的平均向量,
// 所以让 PCA 引擎来计算它
PCA::DATA_AS_ROW, // 指示向量
// 存储为矩阵行
// (如果向量是,则使用 PCA::DATA_AS_COL)
// 矩阵列)
maxComponents // 指定要保留多少个主成分
);
// 如果没有测试数据,只需返回已计算的基,随时可以使用
if( !testset.data )
return pca;
CV_Assert( testset.cols == pcaset.cols );
compressed.create(testset.rows, maxComponents, testset.type());
Mat reconstructed;
for( int i = 0; i < testset.rows; i++ )
{
Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed;
// 压缩向量,结果将存储
// 在输出矩阵的第 i 行
pca.project(vec, coeffs);
// 然后重建它
pca.backProject(coeffs, reconstructed);
// 并测量误差
printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2));
}
return pca;
}
n 维密集数组类
定义 mat.hpp:812
Mat row(int y) const
为指定的矩阵行创建矩阵头。
uchar * data
指向数据的指针
定义 mat.hpp:2140
void create(int rows, int cols, int type)
如果需要,分配新的数组数据。
int cols
定义 mat.hpp:2138
int rows
行和列的数量,或当矩阵具有超过 2 维时为 (-1, -1)
定义 mat.hpp:2138
int type() const
返回矩阵元素的类型。
主成分分析。
定义 core.hpp:2513
@ DATA_AS_ROW
指示输入样本存储为矩阵行
定义 core.hpp:2515
double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray())
计算数组的绝对范数。
@ NORM_L2
定义 base.hpp:185
#define CV_Assert(expr)
在运行时检查条件,如果失败则抛出异常。
定义 base.hpp:342
与磁盘上的文件关联的文件存储的“黑盒”表示。
定义 core.hpp:102
另请参阅
calcCovarMatrix, mulTransposed, SVD, dft, dct
示例
samples/cpp/pca.cppsamples/cpp/tutorial_code/ml/introduction_to_pca/introduction_to_pca.cpp.

成员枚举文档

◆ Flags

枚举器
DATA_AS_ROW 

指示输入样本存储为矩阵行

DATA_AS_COL 

指示输入样本存储为矩阵列

USE_AVG 

构造函数和析构函数文档

◆ PCA() [1/3]

cv::PCA::PCA ( )

默认构造函数

默认构造函数初始化一个空的 PCA 结构。其他构造函数初始化结构并调用 PCA::operator()()

◆ PCA() [2/3]

cv::PCA::PCA ( InputArray  data,
InputArray  mean,
int  flags,
int  maxComponents = 0 
)

这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。

参数
data存储为矩阵行或矩阵列的输入样本。
mean可选的平均值;如果矩阵为空 (noArray()),则从数据中计算平均值。
flags操作标志;当前,该参数仅用于指定数据布局 (PCA::Flags)
maxComponentsPCA 应保留的组件的最大数量;默认情况下,将保留所有组件。

◆ PCA() [3/3]

cv::PCA::PCA ( InputArray  data,
InputArray  mean,
int  flags,
double  retainedVariance 
)

这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。

参数
data存储为矩阵行或矩阵列的输入样本。
mean可选的平均值;如果矩阵为空 (noArray()),则从数据中计算平均值。
flags操作标志;当前,该参数仅用于指定数据布局 (PCA::Flags)
retainedVariancePCA 应保留的方差百分比。使用此参数将使 PCA 决定保留多少个组件,但它始终至少保留 2 个组件。

成员函数文档

◆ backProject() [1/2]

Mat cv::PCA::backProject ( InputArray  vec) const

从它们的 PC 投影中重建向量。

这些方法是 PCA::project 的逆运算。它们获取投影向量的 PC 坐标并重建原始向量。除非保留了所有主成分,否则重建的向量与原始向量不同。但通常,如果组件数量足够大(但仍远小于原始向量维数),则差异很小。因此,使用 PCA

参数
vec主成分子空间中向量的坐标,布局和大小与 PCA::project 输出向量的布局和大小相同。

◆ backProject() [2/2]

void cv::PCA::backProject ( InputArray  vec,
OutputArray  result 
) const

这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。

参数
vec主成分子空间中向量的坐标,布局和大小与 PCA::project 输出向量的布局和大小相同。
result重建的向量;布局和大小与 PCA::project 输入向量的布局和大小相同。

◆ operator()() [1/2]

PCA & cv::PCA::operator() ( InputArray  data,
InputArray  mean,
int  flags,
double  retainedVariance 
)

这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。

参数
data作为矩阵行或矩阵列存储的输入样本。
mean可选的平均值;如果矩阵为空 (noArray()),则从数据中计算平均值。
flags操作标志;目前参数仅用于指定数据布局。(PCA::Flags)
retainedVariancePCA 应保留的方差百分比。使用此参数将使 PCA 决定保留多少个组件,但它始终至少保留 2 个组件。

◆ operator()() [2/2]

PCA & cv::PCA::operator() ( InputArray  data,
InputArray  mean,
int  flags,
int  maxComponents = 0 
)

执行 PCA

该运算符对提供的 dataset 执行 PCA。对多个 dataset 重用相同的 PCA 结构是安全的。也就是说,如果该结构以前已与其他 dataset 一起使用,则会回收现有的内部数据,并分配和计算新的 eigenvalueseigenvectorsmean

计算的 eigenvalues 按从大到小的顺序排序,相应的 eigenvectors 存储为 eigenvectors 行。

参数
data作为矩阵行或矩阵列存储的输入样本。
mean可选的平均值;如果矩阵为空 (noArray()),则从数据中计算平均值。
flags操作标志;目前参数仅用于指定数据布局。(Flags)
maxComponentsPCA 应保留的组件的最大数量;默认情况下,将保留所有组件。

◆ project() [1/2]

Mat cv::PCA::project ( InputArray  vec) const

将向量(s) 投影到主成分子空间。

这些方法将一个或多个向量投影到主成分子空间,其中每个向量投影由主成分基中的系数表示。方法的第一种形式返回第二种形式写入 result 的矩阵。因此,第一种形式可以用作表达式的一部分,而第二种形式在处理循环中可能更有效。

参数
vec输入向量(s);必须与 PCA 阶段使用的输入数据具有相同的维数和相同的布局,也就是说,如果指定了 DATA_AS_ROW,则 vec.cols==data.cols(向量维数)并且 vec.rows 是要投影的向量数量,PCA::DATA_AS_COL 情况也是如此。

◆ project() [2/2]

void cv::PCA::project ( InputArray  vec,
OutputArray  result 
) const

这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。

参数
vec输入向量(s);必须与 PCA 阶段使用的输入数据具有相同的维数和相同的布局,也就是说,如果指定了 DATA_AS_ROW,则 vec.cols==data.cols(向量维数)并且 vec.rows 是要投影的向量数量,PCA::DATA_AS_COL 情况也是如此。
result输出向量;在 PCA::DATA_AS_COL 情况下,输出矩阵的列数与输入向量的数量相同,这意味着 result.cols==vec.cols 并且行数与主成分的数量相匹配(例如,传递给构造函数的 maxComponents 参数)。

◆ read()

void cv::PCA::read ( const FileNode fn)

加载 PCA 对象

从指定的 FileNode 加载 eigenvalues eigenvectorsmean

◆ write()

void cv::PCA::write ( FileStorage fs) const

写入 PCA 对象

eigenvalues eigenvectorsmean 写入指定的 FileStorage

成员数据文档

◆ eigenvalues

Mat cv::PCA::eigenvalues

协方差矩阵的特征值

◆ eigenvectors

Mat cv::PCA::eigenvectors

协方差矩阵的特征向量

◆ mean

Mat cv::PCA::mean

投影前减去的平均值,投影后加上的平均值


此类的文档是从以下文件生成的