Ваш код в том виде, в котором он написан, предназначен для работы с 3-D RGB-изображениями .Однако на снимке экрана рабочей области показано, что не все ваши изображения соответствуют этим критериям.Когда k
равен 3, img
представляет собой двумерную матрицу, что означает, что изображение в файле "33-0000.jpg" уже является изображением в оттенках серого или индексированным изображением , для которого вы не загрузили связанную карту.
Чтобы решить эту проблему, вам потребуется добавить дополнительную логику в цикл при загрузке изображения, чтобы вы могли определить, какой это тип изображения и какчтобы правильно преобразовать его.В частности, вам нужно проверить количество измерений данных изображения и узнать, возвращает ли imread
соответствующую цветовую карту.Затем вы можете применить rgb2gray
или ind2gray
по мере необходимости.Например:
for k = 1:8
[img, cmap] = imread(sprintf('%d-0000.jpg', k + 30));
if ~isempty(cmap) % There is a colormap, so it's indexed
img = ind2gray(img, cmap);
elseif (ndims(img) == 3) % 3 dimensions, so it's RGB
img = rgb2gray(img);
end
M(:, :, k) = imresize(im2double(img), [25 50]); % Convert to double and resize
end