2016-12-06 5 views
1

主成分分析(PCA)を実行するために必要な約2000枚の顔があります。次に、2つの最大固有値を破棄し、残りの固有値のグラフを降順でソートします。画像はすべて19×19ピクセルです。複数の画像を読み込んで主成分分析を適用する

私はそれを正しく得ることができるかどうかを調べるために、私はちょうど普通のものをイメージしているMatlabの1イメージにPCAを取ろうとしました。最初はうまく動作しませんでしたが、その後、私は私がこれを行うだけでとても本質的にMatlabのPrincomp機能を使用する前に、画像のimgradientを取るように言われた:

a = imread('face1.pmg'); 

b = imgradient(a); 

[COEFF,SCORE,latent] = princomp(b); 

これはちょうどダンディ働いたが、私は多くを持っているが多くの画像がこのように1つ1つずつするのは楽しいことではありません。したがって、私は私のディレクトリから画像をロードし、各画像ファイル名を読み込み、imgradientでヒットした後、princomp関数に渡すforループを作成しようとしました。しかし、それは最後のイメージのためだけにこれを行うようだ。

私の考えは、配列やマトリックスに保存されているように各画像をインデックスすることでしたが、私はオンラインで探していましたが、何かを見つけることができませんでした。これはこれまで私がこれまで行ってきたことですが、その実行はうまくいきますが、私はすべての画像を保存していないと言いました。

filePattern = 'C:\Users\Morgan Weiss\Documents\MATLAB\STA5635_HW12\faces\*.pgm'; 
fileList = dir(filePattern); % Will not contain any directories, only .pgm files. 
for k = 1:length(fileList) 
    thisFileName = fileList(k).name; 
    thisImage(k) = imread(thisFileName); 
    % Get the gradient of this image. 
    A = imgradient(thisImage); 
    % Principle Component Analysis 
    [COEFF,SCORE,latent] = princomp(A); 
end 

誰でも私がこれを理解するのを手伝ったり、何か提案があれば、私はそれを高く評価します。

答えて

0

各繰り返しの潜在値を保存する必要があるようです。何かのように

... 
latents = zeros(19*19, length(fileList)); % store each image latent as a column 
for k = 1:length(fileList) 
    ... 
    [COEFF,SCORE,latent] = princomp(A); 
    latents(:,k) = latent; 
end 

あなたはそれを適切に修正することができます。 latentを並べ替えてからlatentsなどに保存することができます。

関連する問題