我需要使用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))
有关代码中错误的任何提示都会有所帮助。
答案 0 :(得分:5)
IMSHOW不会自动缩放图像。因此,如果在特征脸中只有0到0.3之间的值,那么一切都会非常暗。请改为imshow(reshape(PC(1,:),64,64),[])
。
答案 1 :(得分:2)
这是一个非常古老的话题,但无论如何我想回答一些问题。
老实说,我认为错误在其他地方,尽管乔纳斯所说的可能会给出好看的结果。
您需要在最后再次添加数据的平均值。我只是遇到了与黑暗主成分相同的问题,这就是我发现这个问题的原因。但后来我意识到,当你做PCA时,你首先减去平均值。这意味着最后,您需要再次添加它。