Matlab 特征面显示不正确且非常暗

Matlab 特征面显示不正确且非常暗,matlab,computer-vision,face-recognition,eigenvector,Matlab,Computer Vision,Face Recognition,Eigenvector,我需要使用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

我需要使用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到0.3之间的值,那么一切都将非常黑暗。尝试
imshow(重塑(PC(1,:),64,64),[])

这是一个非常古老的话题,但我还是想回答一些问题

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


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

这是否意味着添加[]会将图像重新缩放到0-255??imshow(I[lo,hi])设置I的显示范围,因此lo和任何低于lo的值显示黑色,hi和任何高于hi的值显示白色。使用[]而不是[lo,hi]设置lo=min(I(:)和hi=max(I(:)。您是对的,这个答案就是我的解决方案,谢谢!!