由于数字MATLAB,索引超出界限

时间:2014-01-29 16:05:41

标签: matlab indexoutofboundsexception

我正在尝试创建比例尺图像。我收到此代码的错误。有什么问题?

clc
clear all
a=imread('image.tif');%read file


[row col]=size(a);%row of image and column of image
b=zeros(row,col,8);%3D 0 matrix

for k=1:8%position of bit
    for i=1:row%for every row
        for j=1:col%for every column
            bits = de2bi(a(i,j));
            b(i,j,k)=bits(k);
        end%endFor
    end%endFor
end%endFor

for k=1:8
    subplot(3,3,k);
    imshow(b(:,:,k));
    title(strcat(num2str(k),'. bit'));
end%endFor

错误: ???试图访问位(2); index超出界限因为numel(bits)= 1。

==>中的错误soru1 at 13                 B(1,J,K)=位(K);

1 个答案:

答案 0 :(得分:2)

在这行代码中:

bits = de2bi(a(i,j));

您在“i,j”处的像素值上调用de2bi。假设您打开的图像是uint8类型,a(i,j)的值可以是介于0到255之间的任何值。如果这些值为0或1,则de2bi的输出为您称它只是“0”或“1” - 也就是说,它只有一个元素,你不能访问第二个不存在的元素。

要纠正此问题,您需要强制de2bi输出的大小为您需要的大小,这可以使用第二个输入来完成,如下所示:

bits = de2bi(a(i,j),8)

实际上不需要循环,因为de2bi与大多数MATLAB函数一样,可以将矢量或矩阵作为输入处理,而不仅仅是单个数字:

a=imread('image.tif');
b=de2bi(a);
b = reshape(de2bi,[size(a),8]);