【发布时间】:2014-02-21 00:47:33
【问题描述】:
我使用以下方法计算了 PCA:
function [signals,V] = pca2(data)
[M,N] = size(data);
data = reshape(data, M*N,1);
% subtract off the mean for each dimension
mn = mean(data,2);
data = bsxfun(@minus, data, mean(data,1));
% construct the matrix Y
Y = data'*data / (M*N-1);
[V D] = eigs(Y, 10); % reduce to 10 dimension
% project the original data
signals = data * V;
我的问题是:
“信号”是训练集到特征空间的投影吗?
我在“Amir Hossein”代码中看到,上述代码中的“数据”“居中图像向量”需要通过乘以特征空间基来投影到“面部空间”中。我真的不明白为什么使用居中的图像向量进行投影? “信号”还不够分类吗?
【问题讨论】:
-
您的每个人脸是在“数据”矩阵中存储为行还是列?在任何一种情况下,您在第 3 行的重塑都出现错误。也许向我们展示“pca2”的代码。我怀疑“信号”是您的代码的预计版本,但我不确定。回到我身边,我可以更好地帮助你。仅供参考,您可能会发现此 tutorial 对于理解 PCA 以及间接地了解 eigenfaces 技术的工作原理很有用。
-
@lightalchemist:上面的代码是针对“pca2”的,它是我用来查找 PCA 的函数的名称。我正在这样使用它-stackoverflow.com/questions/21474331/…
-
@lightalchemist :您提供的教程链接显示 404 错误!既然你告诉我我必须只有一个特征空间,我该如何标记面 1(+1 类)和其他面(-1 类)的投影?stackoverflow.com/questions/21426842/…
-
这个链接应该可以工作:tutorial
-
看,你从所有样本的协方差矩阵的前导特征向量中计算出一个单一的投影矩阵。然后将每个样本(在减去平均向量之后)与这个投影矩阵相乘以获得它的新表示。您的样本的这些投影版本现在将代表您的面孔。如果人脸具有标签/类别)1,则其投影样本将采用相同的标签/类别。有关为什么需要均值中心以及 PCA 为何有效的详细信息,请查看我在上面提供的教程。
标签: matlab computer-vision svm face-recognition pca