2016-12-06 1 views
1

주 성분 분석 (PCA)을 수행하는 데 필요한 약 2000 개의 얼굴 이미지가 있습니다. 그런 다음 두 개의 가장 큰 고유 값을 무시하고 나머지 고유 값의 그래프를 내림차순으로 정렬합니다. 이미지는 모두 19 x 19 픽셀입니다.여러 이미지로드 및 주성분 분석 적용

내가 제대로 할 수 있는지 알아보기 위해 Matlab의 1 이미지에서 PCA를 가져 와서 이미지를로드하는 일반적인 작업을 수행했습니다.

a = imread('face1.pmg'); 

b = imgradient(a); 

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

이 그냥 멋쟁이했다,하지만 난 많은이 : 처음에는 matlab에에 Princomp 기능을 사용하기 전에 단순히 이미지의 imgradient을 들었다 후 잘 작동하지 않았지만 그래서 기본적으로 나는이 작업을 수행 그렇게 많은 이미지가 이렇게 하나씩하는 것은 그렇게 재미 있지 않을 것입니다. 따라서 나는 for 루프를 작성하여 내 디렉토리에서 이미지를로드하고 각 이미지 파일 이름을 읽고 imgradient와 충돌시킨 다음 princomp 함수로 전달합니다. 그러나 그것은 마지막 이미지에 대해서만 이것을 수행하는 것으로 보입니다.

내 생각은 배열이나 매트릭스에 저장되도록 각 이미지의 인덱스를 지정했지만 온라인으로 볼 때 나는 아무 것도 찾지 못했습니다. 이것은 내가 지금까지 가지고있는 것인데, 그것의 실행은 잘되지만, 모든 이미지를 저장하는 것처럼 보이지 않는다고 말했다.

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 

적합하다고 생각되는대로 수정할 수 있습니다. latentlatents 등에 저장하기 전에 정렬 할 수 있습니다.