OpenCV中使用C ++的特征脸

时间:2015-06-10 20:46:58

标签: c++ opencv pca

我编写了一个代码来创建特征脸。我拍摄了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的样子: Output image final2

另外两个看起来像这样:Output image final1

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你的代码看起来很好,所以出了什么问题?

DataDataData,在执行这样的计算机视觉任务时非常重要。为了给自己一个优势,可以使用具有相应测试数据的易于使用的数据集 - This would work

此外,正如berak所说,对图像进行标准化会有所帮助。在Turk & Pentland中(如果您还没有读过,那么)他们会说:

  

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

     

(重要的是:将ui标准化,使|| ui || = 1)

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