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

1 次查看(过去 30 天)
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 个评论
Jan
Jan 2013-2-15
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 2013-2-15
编辑:Jack 2013-2-15
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*

请先登录,再进行评论。

采纳的回答

Jan
Jan 2013-2-15
编辑:Jan 2013-2-15
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 个评论
Mahima Goyen
Mahima Goyen 2017-11-9
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 2017-11-9
@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.

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by