如何在我的Matlab代码中解决这些错误?

时间:2019-03-29 00:59:40

标签: matlab image-processing

我正在尝试堆叠2D图像以获得3D,就像 How can I plot several 2D image in a stack style in 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);

这是预期的结果 How can I plot several 2D image in a stack style in Matlab?

这是我得到的错误

  

使用rgb2gray> parse_inputs时出错(第81行)
    MAP必须是m x 3的阵列。

     

rgb2gray错误(第35行)
  X = parse_inputs(varargin {:});

     

stack2中的错误(第9行)
        img = im2double(rgb2gray(img)); %转换为双格式

enter image description here

1 个答案:

答案 0 :(得分:0)

您编写的代码旨在与3-D RGB images一起使用。但是,工作区的屏幕快照表明并非所有图像都符合该标准。当k为3时,img是2维矩阵,这意味着文件“ 33-0000.jpg”中的图像已经是grayscale imageindexed image您尚未为其加载关联的地图。

要解决此问题,在加载图像时,您需要在循环中添加一些其他逻辑,以便您可以识别图像类型以及如何正确转换图像。具体来说,您需要检查图像数据的number of dimensions,以及imread是否返回关联的色彩图。然后,您可以根据需要应用rgb2grayind2gray。例如:

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