как исправить эти ошибки в моем коде Matlab? - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь сложить 2D-изображения, чтобы получить 3D так же, как Как мне построить несколько 2D-изображений в стиле стека в Matlab?

в моем исходном коде были некоторые ошибки, и кто-то предложил использовать приведенный ниже код

M = zeros(25, 50, 8);
for k = 1:8
    img = imread(sprintf('%d-0000.jpg', k + 30));
    img = imresize(img, [25 50]);
    img = im2double(rgb2gray(img));  % Convert to double format
    M(:, :, k) = img;
end
hf2 = figure ;
hs = slice(M,[],[],1:8) ;
shading interp
set(hs,'FaceAlpha',0.8);

это ожидаемый результат Как мне построить несколько 2D-изображений в стиле стека в Matlab?

это ошибка, которую я получаю

Ошибка при использовании rgb2gray> parse_inputs (строка 81)
КАРТА должна быть массивом x 3.

Ошибка в rgb2gray (строка 35)
X = parse_inputs (varargin {:});

Ошибка в стеке 2 (строка 9)
img = im2double (rgb2gray (img)); % Конвертировать в двойной формат

enter image description here

1 Ответ

0 голосов
/ 01 апреля 2019

Ваш код в том виде, в котором он написан, предназначен для работы с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...