Matlab - 索引超出矩阵尺寸误差

时间:2017-11-23 09:49:12

标签: matlab image-processing

我正在尝试将图片拆分为3个频道

img = imread('canoe.tif'); % Read image
red = img(:,:,1); % Red channel
green = img(:,:,2); % Green channel
blue = img(:,:,3); % Blue channel
a = zeros(size(img, 1), size(img, 2));
just_red = cat(3, red, a, a);
just_green = cat(3, a, green, a);
just_blue = cat(3, a, a, blue);
back_to_original_img = cat(3, red, green, blue);
figure, imshow(img), title('Original image')
figure, imshow(just_red), title('Red channel')
figure, imshow(just_green), title('Green channel')
figure, imshow(just_blue), title('Blue channel')
figure, imshow(back_to_original_img), title('Back to original image')

错误出现在第三行。 通常这种异常会发生在类似数组的事情上,对吗?为什么会发生在这里? 为什么第二行没有得到错误?

1 个答案:

答案 0 :(得分:1)

这可能是因为您正在阅读的TIFF图像是以灰度格式或带索引颜色编码的。在这些情况下,图像像素数据仅包含一个通道:灰度格式的灰度梯度和索引颜色格式的调色板索引。有关后者的更多信息,请阅读此问题:Single channel png displayed with colors,它也提供了解决方案。

这就是为什么在尝试访问图像的第二个通道时出现错误的原因...因为它不存在。打开图像阵列并验证。