Effacer les filtres
Effacer les filtres

How to read and store greyscaleimage into single matrix?

2 vues (au cours des 30 derniers jours)
subha
subha le 21 Nov 2014
Commenté : subha le 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

Réponse acceptée

Geoff Hayes
Geoff Hayes le 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 commentaires
Geoff Hayes
Geoff Hayes le 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 le 24 Nov 2014
thanks Geoff.

Connectez-vous pour commenter.

Plus de réponses (1)

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

Catégories

En savoir plus sur Startup and Shutdown dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by