【问题标题】:eigenfaces are not showing correctly and are very dark特征面显示不正确并且非常暗
【发布时间】:2011-12-17 22:10:15
【问题描述】:

我需要使用 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))

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

【问题讨论】:

    标签: matlab computer-vision face-recognition eigenvector


    【解决方案1】:

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

    【讨论】:

    • 那么这是否意味着添加 [] 会将图像重新缩放到 0-255??
    • imshow(I, [lo, hi]) 设置I的显示范围,所以lo和低于lo的值显示黑色,hi和高于hi的值显示白色。使用 [] 而不是 [lo, hi] 设置 lo = min(I(:)) 和 hi = max(I(:))。
    【解决方案2】:

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

    老实说,我认为错误出在其他地方,尽管 Jonas 所说的结果可能看起来不错。

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

    【讨论】:

    • 你是对的,这个答案是我的解决方案,谢谢!!
    猜你喜欢
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多