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

1 view (last 30 days)
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 Comments
Jan
Jan on 15 Feb 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 on 15 Feb 2013
Edited: Jack on 15 Feb 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*

Sign in to comment.

Accepted Answer

Jan
Jan on 15 Feb 2013
Edited: Jan on 15 Feb 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 Comments
Mahima Goyen
Mahima Goyen on 9 Nov 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 on 9 Nov 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.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!