Matlab 加载多幅图像并应用主成分分析

Matlab 加载多幅图像并应用主成分分析,matlab,image-processing,machine-learning,Matlab,Image Processing,Machine Learning,我有大约2000张需要进行主成分分析(PCA)的人脸图像。然后我丢弃两个最大的特征值,并绘制按降序排序的剩余特征值的图。这些图像都是19×19像素 作为一个尝试,看看我是否能得到正确的结果,我试着在Matlab中对一幅图像进行PCA,我只是做了一些平常的事情,加载图像。起初效果不好,但后来我被告知在使用Matlab上的Princomp函数之前,只需获取图像的imgradient,因此本质上我是这样做的: a = imread('face1.pmg'); b = imgradient(a);

我有大约2000张需要进行主成分分析(PCA)的人脸图像。然后我丢弃两个最大的特征值,并绘制按降序排序的剩余特征值的图。这些图像都是19×19像素

作为一个尝试,看看我是否能得到正确的结果,我试着在Matlab中对一幅图像进行PCA,我只是做了一些平常的事情,加载图像。起初效果不好,但后来我被告知在使用Matlab上的Princomp函数之前,只需获取图像的imgradient,因此本质上我是这样做的:

a = imread('face1.pmg');

b = imgradient(a);

[COEFF,SCORE,latent] = princomp(b);
这真是太棒了,但我有很多照片,所以一张一张的做这件事并没有那么有趣。因此,我尝试编写一个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

如果有人能帮我解决这个问题或有任何建议,我将不胜感激

听起来您需要为每个迭代存储潜在值。差不多

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

您可以根据需要对其进行修改。在将其存储在
最新版本中之前,您可以对其进行排序。

听起来您需要为每个迭代存储潜在值。差不多

...
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
您可以根据需要对其进行修改。您可以在将其存储在
最新版本
中之前对其进行排序