我想让这段代码正常工作,但我找不出问题.
img = imread('cameraman.tif');
for i = 1:8
a{i}=bitget(img,i);
subplot(2,4,i), imshow(logical(a{i})), title('Bit plane');
end
输出错误是
Unable to perform assignment because brace indexing is not supported for variables of this type.
Error in (line 15)
a{i}=bitget(img,i);
你看到问题出在哪里了吗?谢谢
发布于 2019-07-03 13:56:00
错误消息表明a
不支持大括号索引。这意味着,在运行代码之前,已经定义了a
。
要编写健壮的代码,您应该始终初始化所有变量。在本例中,在循环之前编写a = {};
。这将确保a
的类型是正确的。
更好的方法是预先分配a
,使其具有适当的大小,这样就不会调整每个循环迭代的大小:
a = cell(8,1);
发布于 2020-09-24 16:42:19
我使用MATLAB开发了8位平面,下面是我的代码供您参考:)
row=512; col=512;
file_raw = 'tif.raw';
fin=fopen(file_raw,'r');
I=fread(fin,row*col,'uint8=>uint8');
Z=reshape(I,row,col);
Z=Z';
fclose(fin);
figure('Name',file_raw,'NumberTitle','off');
subplot(3,3,1);
imshow(Z);
title(file_raw)
B=zeros(size(I));
B1=bitset(B,1,bitget(I,1));
B2=bitset(B,2,bitget(I,2));
B3=bitset(B,3,bitget(I,3));
B4=bitset(B,4,bitget(I,4));
B5=bitset(B,5,bitget(I,5));
B6=bitset(B,6,bitget(I,6));
B7=bitset(B,7,bitget(I,7));
B8=bitset(B,8,bitget(I,8));
B = B1+B2+B3+B4+B5+B6+B7+B8;
B=uint8(B);
Br=reshape(B,row,col);
Br=Br';
subplot(3,3,2);
imshow(Br);
title('reconstruct');
C=255*bitget(I,5);
C=uint8(C);
Cr=reshape(C,row,col);
Cr=Cr';
subplot(3,3,3);
imshow(Cr);
title('bitget 5');
D=255*bitget(I, 8);
D=uint8(D);
Dr=reshape(D,row,col);
Dr=Dr';
subplot(3,3,4);
imshow(Dr);
title('bitget 8');
file_bprint = 'bprint7.raw';
fin=fopen(file_bprint,'r');
I=fread(fin,row*col,'uint8=>uint8');
E=reshape(I,row,col);
E=E';
fclose(fin);
subplot(3,3,5);
imshow(E);
title(file_bprint);
https://stackoverflow.com/questions/56866484
复制相似问题