我正在尝试创建比例尺图像。我收到此代码的错误。有什么问题?
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);
答案 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]);