從我打過交道,從文件中讀取多個圖像的唯一方法是連續做,並通過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
以便於實現。