How to perform automatic conversion of matrix dimensions of images in a way that it works for both rgb and grayscale ??

1 visualización (últimos 30 días)
To perform face recognition, i have a train database with some images. The images in train database need to be pre-processed before they are used for comparison with the test image, which is the input image.
This is what i have done :
T = [];
for i = 1 : Train_Number
str = int2str(i);
str = strcat('\',str,'.jpg');
str = strcat(TrainDatabasePath,str);
img = imread(str);
img = rgb2gray(img);
img = imresize(img, [200 180]);
[irow icol] = size(img);
temp = reshape(img',irow*icol,1);
% temp = reshape(permute(double(img), [2,1,3]), irow*icol, 1);
T = [T temp]; % 'T' grows after each turn
end
This works fine when the train database contains only rgb images. But for grayscale images, it gives error related to dimensions.
How can i make it work for both rgb and grayscale ??
  2 comentarios
Jan
Jan el 15 de Feb. de 2013
Please do not only claim, that there is an error, but post the message and mention the line also. The less we have to guess, the more efficient is an answer. Thanks.
Jack
Jack el 15 de Feb. de 2013
Editada: Jack el 15 de Feb. de 2013
Ok.. When i include a grayscale image in the database, i get an error.
This is my code :
T = [];
for i = 1 : Train_Number
str = int2str(i);
str = strcat('\',str,'.jpg');
str = strcat(TrainDatabasePath,str);
img = imread(str);
% img = rgb2gray(img);
img = imresize(img, [200 180]);
[irow icol] = size(img);
temp = reshape(permute(double(img), [2,1,3]), irow*icol, 1);
T = [T temp]; % 'T' grows after each turn
end
This is the error i get :
*??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
Error in ==> CreateDatabase at 50
T = [T temp]; % 'T' grows after each turn*

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 15 de Feb. de 2013
Editada: Jan el 15 de Feb. de 2013
Some cleanup and an implicit conversion of grayscale images to pseudo-RGB:
nCol = 200;
nRow = 180;
% BUG?! T = nan(nCol * nRow, Train_Number); % Pre-allocate!!!
T = nan(nCol * nRow * 3, Train_Number); % Pre-allocate!!! [EDITED]
for i = 1 : Train_Number
filename = fullfile(TrainDatabasePath, sprintf('%d.jpg', i));
img = imread(filename);
if ndims(img) == 2 % Gray scale image:
img = double(cat(3, img, img, img)); % Pseudo RGB image
end
img = imresize(img, [nCol, nRow]);
temp = permute(img, [2,1,3]);
T(:, i) = temp(:);
end
But, I do not expect that the training of a face recognition system is efficient, when you feed it with RGB and gray-scale images. I'd prefer converting the RGB to gray scale instead.
img = rgb2gray(img);
  8 comentarios
Mahima Goyen
Mahima Goyen el 9 de Nov. de 2017
Matrix dimensions must agree.
Error in recog (line 18) Difference = double(InImage)-m; % Centered test image
Error in main (line 115) OutputName=recog(TestImage,m,A,Eigenfaces);
HELP????
Jan
Jan el 9 de Nov. de 2017
@Mahima Goyen: All you provide is a line of code and the partial error message. It seems like "double(InImage)" and "m" do not have the same dimensions. Without further information, there is no chance to guess, why this happens or what the problem is.
Please open a new thread for a new question and add more information.

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by