我正在尝试堆叠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)); %转换为双格式
答案 0 :(得分:0)
您编写的代码旨在与3-D RGB images一起使用。但是,工作区的屏幕快照表明并非所有图像都符合该标准。当k
为3时,img
是2维矩阵,这意味着文件“ 33-0000.jpg”中的图像已经是grayscale image或indexed image您尚未为其加载关联的地图。
要解决此问题,在加载图像时,您需要在循环中添加一些其他逻辑,以便您可以识别图像类型以及如何正确转换图像。具体来说,您需要检查图像数据的number of dimensions,以及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