c++ - 使用 C++ 的 OpenCV 中的特征脸

标签 c++ opencv pca

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

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

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

我按如下方式 reshape 它们:

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

我做错了什么?

最佳答案

你的代码看起来没问题,那有什么问题吗?

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

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

Step 6.3: compute the M best eigenvectors of AAT : ui = Avi

(important: normalize ui such that ||ui|| = 1)

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

关于c++ - 使用 C++ 的 OpenCV 中的特征脸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767017/

相关文章:

algorithm - 您如何使用为加权综合评分中的特征分配权重?

python - 在 Python 中将回归线和椭圆添加到 3D 散点图

c++ - 对类的成员函数的调用如何导致该对象不再是 "delete-able"?

c++ - 如何使用 QDatastream 在 QT 中正确序列化和反序列化 QList 类?

python - 等效于 Python 的 OpenCV 中的 FileNotFoundError

c++ - 如何从 OpenCL 访问 OpenCV UMat (gpu) 缓冲区?

c++ - 如何判断两个多态对象是否相等?

c++ - 用 C++ 迭代二维 vector

java - Java OpenCv 中的相机标定

python - 使用 scikit-learn PCA.score() 时出错