OpenCV 4.11.0
开源计算机视觉
|
主成分分析。更多...
#include <opencv2/core.hpp>
公共类型 | |
枚举 | 标志 { 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 |
将向量投影到主成分子空间。 | |
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 类还可以将向量转换到/从由基定义的新坐标空间。通常,在这个新的坐标系中,每个原始向量(以及此类向量的任何线性组合)都可以通过采用其前几个分量来相当精确地近似,这些分量对应于协方差矩阵的最大特征值的特征向量。从几何上讲,这意味着您计算向量到由协方差矩阵的主特征值对应的几个特征向量形成的子空间的投影。通常,这种投影非常接近原始向量。因此,您可以用一个由投影向量在子空间中的坐标组成的更短的向量来表示来自高维空间的原始向量。这种变换也称为 Karhunen-Loeve 变换或 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 ) |
Mat cv::PCA::project | ( | InputArray | vec | ) | const |
将向量投影到主成分子空间。
该方法将一个或多个向量投影到主成分子空间,其中每个向量投影由主成分基中的系数表示。该方法的第一种形式返回第二种形式写入结果的矩阵。因此,第一种形式可以用作表达式的部分,而第二种形式在处理循环中效率更高。
vec | 输入向量;必须与 PCA 阶段使用的输入数据具有相同的维度和相同的布局,也就是说,如果指定了 DATA_AS_ROW,则 vec.cols==data.cols (向量维度)并且 vec.rows 是要投影的向量数,PCA::DATA_AS_COL 的情况也是如此。 |
void cv::PCA::project | ( | InputArray | vec, |
OutputArray | result ) const |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
vec | 输入向量;必须与 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::write | ( | FileStorage & | fs | ) | const |
写入 PCA 对象
将 特征值、特征向量 和 均值 写入指定的 FileStorage
Mat cv::PCA::eigenvalues |
协方差矩阵的特征值
Mat cv::PCA::eigenvectors |
协方差矩阵的特征向量
Mat cv::PCA::mean |
投影前减去,投影后加上的平均值