从我打过交道,从文件中读取多个图像的唯一方法是连续做,并通过for
循环。你目前拥有的确是一种很好的方法,但是你需要确定你想如何在MATLAB中存储所有这些图像。两个最简单的选项是创建一个3D矩阵,其中每个切片是从文件读取的50 x 50图像或单元阵列,其中每个单元格是50 x 50图像。
如果你想要做的第一选择,你会做这样的事情:
%// Your code
myFolder = 'C:\Users\X';
filePattern = fullfile(myFolder, '*.jpg');
jpegFiles = dir(filePattern);
%// New - 3D matrix to store images
imageMatrix = uint8(zeros(50,50,numel(jpegFiles)));
%// Your code
for k = 1:length(jpegFiles)
baseFileName = jpegFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray50x50 = imread(fullFileName);
imageArray50x50New = imresize(imageArray50x50, [50 50]);
%// New
imageMatrix(:,:,k) = imageArray50x50New;
end
要访问第k 个图像,你会怎么做:
img = imageMatrix(:,:,k);
上面的代码假设您的所有图像都是uint8
类型。如果这不是你的图像是不同类型的情况下,单元格阵列的方法将是首选....所以这将是第二种方法。如果是这样的话,那么这样做,而不是:
%// Your code
myFolder = 'C:\Users\X';
filePattern = fullfile(myFolder, '*.jpg');
jpegFiles = dir(filePattern);
%// New - 3D matrix to store images
imageMatrix = cell(1,numel(jpegFiles));
%// Your code
for k = 1:length(jpegFiles)
baseFileName = jpegFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray50x50 = imread(fullFileName);
imageArray50x50New = imresize(imageArray50x50, [50 50]);
%// New
imageMatrix{k} = imageArray50x50New;
end
要访问第k 个图像,你会怎么做:
img = imageMatrix{k};
但是,如果你正在处理PCA,那么我建议你做的,而不是创建一个二维矩阵其中每个行是展开版本的图像和d您将拥有与图像一样多的行。因此,每行将是一个1×250的强度向量。之所以要这样做,是因为如果要在MATLAB中使用pca
函数,则每个行是是数据点,而每个列是是一个变量。因此,您可以这样做:
%// Your code
myFolder = 'C:\Users\X';
filePattern = fullfile(myFolder, '*.jpg');
jpegFiles = dir(filePattern);
%// New - 3D matrix to store images
imageMatrix = zeros(numel(jpegFiles), 250);
%// Your code
for k = 1:length(jpegFiles)
baseFileName = jpegFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray50x50 = imread(fullFileName);
imageArray50x50New = imresize(imageArray50x50, [50 50]);
%// New
imageMatrix(k,:) = double(imageArray50x50New(:).');
end
因此,每一行都会是一个图像,表示为单个向量。此声明:imageArray50x50New(:).'
首先将50 x 50图像转换为列向量,然后对其进行转置以使其成为行向量。另外,请注意,我制作了图像矩阵双精度。我这样做是因为pca
最适合用于浮点数据,所以当我将每个图像转换成一个行向量时,我已经将数据转换为double
以便于实现。