How to read and store greyscaleimage into single matrix?

1 Ansicht (letzte 30 Tage)
subha
subha am 21 Nov. 2014
Kommentiert: subha am 24 Nov. 2014
i have 2429 images in pgm format. each is in 19*19 size. Now i need to read all the images one by one and store in single matrix. With the help of previous mathworks available examples i read my file. now how to store in single matrix.
myFolder = 'C:\Users\smanohar\Documents\MATLAB\RBMimplementation\Gaussian RBM\gdrbm\greyscsalegdrbm\face';
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
filePattern = fullfile(myFolder, '*.pgm');
jpegFiles = dir(filePattern);
for k = 1:length(jpegFiles)
baseFileName = jpegFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray = imread(fullFileName);
end

Akzeptierte Antwort

Geoff Hayes
Geoff Hayes am 21 Nov. 2014
Subha - if all images are of the same dimension, 19x19, then you can save all of them to a single array of size 19x19x2429. Try something like the following
% pre-size the image array
imageArray = zeros(19,19,2429);
filePattern = fullfile(myFolder, '*.pgm');
pgmFiles = dir(filePattern);
for k = 1:length(pgmFiles)
baseFileName = pgmFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray(:,:,k) = imread(fullFileName);
end
Note how the kth image is stored in the imageArray. You may want to cast the imageArray to the appropriate data type before or after you have copied the images into it. (The appropriate data type being that of the pgm images.)
  4 Kommentare
Geoff Hayes
Geoff Hayes am 22 Nov. 2014
Subha - why are you doing the following
imageArray= reshape(imageArray,19*19,k);
so that it is dependent upon k? Is this during each iteration or once finished and so outside the for loop?
If you want a matrix that is 2429x361, then why not do the following
% pre-size the image array
imageArray = zeros(2429,19*19);
filePattern = fullfile(myFolder, '*.pgm');
pgmFiles = dir(filePattern);
for k = 1:length(pgmFiles)
baseFileName = pgmFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray(k,:) = reshape(imread(fullFileName),1,361);
end
The above does the reshape on the image as it is read from the file, converting it from the 19x19 matrix to one that is 1x361.
subha
subha am 24 Nov. 2014
thanks Geoff.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Image Analyst
Image Analyst am 22 Nov. 2014
Why not try the montage() function?

Kategorien

Mehr zu Images finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by