【问题标题】:Eigenfaces in OpenCV using C++使用 C++ 的 OpenCV 中的特征脸
【发布时间】:2015-06-10 20:46:57
【问题描述】:

我已经编写了一个代码来创建特征脸。我已经拍摄了 3 张不同人的图像作为输入。我已经计算了特征向量和特征值。由于只拍摄了 3 张图像,因此我选择所有三个特征向量,每个大小为 36000x1,作为主成分。当我重塑特征向量以查看图像时,我只得到一个人的特征脸。其他图像几乎完全空白。

我从 covevec(协方差矩阵的特征向量矩阵)中提取每个特征向量

col1=covevec.col(0);
col2=covevec.col(1);
col3=covevec.col(2);

我将它们重塑如下:

if (!col1.isContinuous() && !col2.isContinuous() && !col3.isContinuous())
{
    col1=col1.clone();
    col2=col2.clone();
    col3=col3.clone();
}
Mat final1,final2,final3;
final1=col1.reshape(0,200);
final2=col2.reshape(0,200);
final3=col3.reshape(0,200);

这是 final2 的样子:

另外两个看起来像这样:

我做错了什么?

【问题讨论】:

  • 您需要更多数据,还必须在 pca 步骤之前对图像进行归一化()
  • 是的....增加数据有效!

标签: c++ opencv pca


【解决方案1】:

您的代码看起来不错,那么有什么问题?

DataDataData,在执行此类计算机视觉任务时非常重要。为了给自己带来优势,请使用带有相应测试数据的现成数据集 - This would work

此外,正如 berak 所说,标准化图像会有所帮助。在Turk & Pentland(如果你没有读过你应该读)他们说:

步骤 6.3:计算 AAT 的 M 个最佳特征向量:ui = Avi

(重要:标准化 ui 使得 ||ui|| = 1)

这意味着您的所有训练数据都将具有相同的特征,并为您的算法提供更大的成功机会

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 2012-04-29
    • 1970-01-01
    • 2017-08-08
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    相关资源
    最近更新 更多