OpenCV 4.10.0
开源计算机视觉库
|
主成分分析。 更多...
#include <opencv2/core.hpp>
公共类型 | |
枚举 | 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 |
PCA & | operator() (InputArray data, InputArray mean, int flags, double retainedVariance) |
PCA & | operator() (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 压缩,然后重建回来,然后计算重建误差范数并为每个向量打印出来。
cv::PCA::PCA | ( | ) |
默认构造函数
默认构造函数初始化一个空的 PCA 结构。其他构造函数初始化结构并调用 PCA::operator()()。
cv::PCA::PCA | ( | InputArray | data, |
InputArray | mean, | ||
int | flags, | ||
int | maxComponents = 0 |
||
) |
这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。
data | 存储为矩阵行或矩阵列的输入样本。 |
mean | 可选的平均值;如果矩阵为空 (noArray() ),则从数据中计算平均值。 |
flags | 操作标志;当前,该参数仅用于指定数据布局 (PCA::Flags) |
maxComponents | PCA 应保留的组件的最大数量;默认情况下,将保留所有组件。 |
cv::PCA::PCA | ( | InputArray | data, |
InputArray | mean, | ||
int | flags, | ||
double | retainedVariance | ||
) |
这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。
data | 存储为矩阵行或矩阵列的输入样本。 |
mean | 可选的平均值;如果矩阵为空 (noArray()),则从数据中计算平均值。 |
flags | 操作标志;当前,该参数仅用于指定数据布局 (PCA::Flags) |
retainedVariance | PCA 应保留的方差百分比。使用此参数将使 PCA 决定保留多少个组件,但它始终至少保留 2 个组件。 |
Mat cv::PCA::backProject | ( | InputArray | vec | ) | const |
从它们的 PC 投影中重建向量。
这些方法是 PCA::project 的逆运算。它们获取投影向量的 PC 坐标并重建原始向量。除非保留了所有主成分,否则重建的向量与原始向量不同。但通常,如果组件数量足够大(但仍远小于原始向量维数),则差异很小。因此,使用 PCA。
vec | 主成分子空间中向量的坐标,布局和大小与 PCA::project 输出向量的布局和大小相同。 |
void cv::PCA::backProject | ( | InputArray | vec, |
OutputArray | result | ||
) | const |
这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。
vec | 主成分子空间中向量的坐标,布局和大小与 PCA::project 输出向量的布局和大小相同。 |
result | 重建的向量;布局和大小与 PCA::project 输入向量的布局和大小相同。 |
PCA & cv::PCA::operator() | ( | InputArray | data, |
InputArray | mean, | ||
int | flags, | ||
double | retainedVariance | ||
) |
这是一个重载的成员函数,为了方便起见提供。它只在它接受的参数上与上述函数不同。
data | 作为矩阵行或矩阵列存储的输入样本。 |
mean | 可选的平均值;如果矩阵为空 (noArray()),则从数据中计算平均值。 |
flags | 操作标志;目前参数仅用于指定数据布局。(PCA::Flags) |
retainedVariance | PCA 应保留的方差百分比。使用此参数将使 PCA 决定保留多少个组件,但它始终至少保留 2 个组件。 |
PCA & cv::PCA::operator() | ( | InputArray | data, |
InputArray | mean, | ||
int | flags, | ||
int | maxComponents = 0 |
||
) |
执行 PCA
该运算符对提供的 dataset 执行 PCA。对多个 dataset 重用相同的 PCA 结构是安全的。也就是说,如果该结构以前已与其他 dataset 一起使用,则会回收现有的内部数据,并分配和计算新的 eigenvalues、eigenvectors 和 mean。
计算的 eigenvalues 按从大到小的顺序排序,相应的 eigenvectors 存储为 eigenvectors 行。
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 情况也是如此。 |
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 参数)。 |
void cv::PCA::read | ( | const FileNode & | fn | ) |
加载 PCA 对象
从指定的 FileNode 加载 eigenvalues eigenvectors 和 mean。
void cv::PCA::write | ( | FileStorage & | fs | ) | const |
写入 PCA 对象
将 eigenvalues eigenvectors 和 mean 写入指定的 FileStorage。
Mat cv::PCA::eigenvalues |
协方差矩阵的特征值
Mat cv::PCA::eigenvectors |
协方差矩阵的特征向量
Mat cv::PCA::mean |
投影前减去的平均值,投影后加上的平均值