Вы должны знать формат изображения, которое вы пытаетесь прочитать. Чтобы сделать это, конечно, я всегда использую следующий фрагмент кода в своих программах, когда я хочу, чтобы преобразовать определенные пользователем изображения из неизвестного формата в оттенках серого Uint8:
% load image
[filename, pathname] = uigetfile({'*.*'},'image file');
fullFilename = [pathname filename];
% Get image info, read it accordingly
info = imfinfo(fullFilename);
if(strcmp('truecolor',info.ColorType))
I = imread(fullFilename);
Igray = uint8(rgb2gray(I));
clear I
elseif(strcmp('grayscale',info.ColorType))
Igray = uint8(imread(fullFilename));
elseif(strcmp('indexed',info.ColorType))
[I,map] = imread(fullFilename);
Igray = uint8(ind2gray(I,map));
clear I map
else
error('statPart:FormatImage','Image format error');
end
clear info
Кроме того, это: testImage = double(imread(testfile));
не будет работать, если вы предполагаете testfile - uint8 и хочет преобразовать его в двойное (в двойной интенсивности - от 0 до 1). Вы должны сделать testImage = double(imread(testfile))/255;
Надеюсь, что эта помощь.
Приветствия
Что такое формат тестового файла? – CTZStef