2011-10-29 30 views
0

我需要使用PCA顯示圖像特徵向量矩陣的前10個特徵臉。特徵臉不能正確顯示並且非常暗

我正在使用下面的matlab代碼來創建第一個特徵臉,但我變得非常黑暗,不太正確的特徵臉。 eFea是240x4096一個矩陣,其中每一行代表64×64

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)) 

任何提示關於在代碼中的錯誤將是有幫助的圖像。

回答

5

IMSHOW不會自動縮放圖像。因此,如果在特徵臉中只有0到0.3的值,那麼一切都將非常黑暗。改爲嘗試imshow(reshape(PC(1,:),64,64),[])

+0

那麼這是否意味着添加[]會將圖像重新縮放到0-255? – rinku

+3

imshow(I,[lo,hi])設置I的顯示範圍,所以lo和任何低於lo的值都顯示爲黑色,hi和高於hi的任何值都顯示爲白色。使用[]代替[lo,hi]設置lo = min(I(:))和hi = max(I(:))。 –

2

這是一個非常古老的話題,但我仍然想回答一些問題。

老實說,我認爲這個錯誤在別的地方,儘管喬納斯說的話可能會給出好看的結果。

您需要在最後再次添加數據的平均值。我對黑暗的主要組件也有同樣的問題,這就是爲什麼我發現這個問題。但後來我意識到,當你做PCA時,你先減去平均值。這意味着最終你需要重新添加它。

+0

你是正確的,這個答案是我的情況的解決方案,謝謝! – Yiannis