0

我需要使用 PCA 显示第 10 个特征面作为图像特征向量矩阵。

我正在使用下面的 matlab 代码来创建第一个特征脸,但我变得很黑,而且特征脸也不那么正确。eFea 是一个 240x4096 的矩阵,其中每一行代表一个 64x64 的图像

 newData = eFea';
data  = newData;
[M,N] = size(data); 

mn = mean(data,2); 
data = double(data) - repmat(mn,1,N); 
% construct the matrix Y 
Y = data' / sqrt(N-1); 
% SVD 
[u,S,PC] = svd(Y,0); 


imshow(reshape(PC(1,:),64,64))

有关代码错误的任何提示都会有所帮助。

4

2 回答 2

5

IMSHOW不会自动缩放图像。因此,如果您在特征面上只有 0 到 0.3 的值,那么一切都会很暗。试试imshow(reshape(PC(1,:),64,64),[])吧。

于 2011-10-29T17:12:29.380 回答
2

这是一个非常古老的话题,但无论如何我想回答一些问题。

老实说,我认为错误在其他地方,尽管乔纳斯所说的可能会产生好看的结果。

最后,您需要再次添加数据的平均值。我对暗主成分也有同样的问题,这就是我发现这个问题的原因。但后来我意识到,当你做 PCA 时,你首先减去平均值。这意味着最后,您需要再次添加它。

于 2014-03-29T10:22:45.873 回答