此代码如何解决“此类型的变量不支持括号索引”?万博1manbetx

29意见(过去30天)
tawsif mostafiz
tawsif mostafiz 2021年5月25日在0:52
编辑: 图像分析师 2021年5月25日12:17
我的代码摘录如下:
s = 0;
为了k = 1:长度(thefiles)
为了Q = 0.1:0.01:0.3
histgrm = im2bw(maskedrgbimage,q);
num {k} = sum(histgrm(:) == 0);
如果(num {k}> 400)
number {s} = num {k};
s = s + 1;
结尾
结尾
结尾
为了s = 0:19
fprintf(“%d \ n”,数字{s})
结尾
长度(thefiles),histgrm在原始代码中定义。但它显示错误是:
无法执行分配,因为此类型的变量不支持支撑索引。万博1manbetx
我怎样才能解决这个问题?
3评论

登录评论。

接受答案

图像分析师
图像分析师 2021年5月25日在2:46
不需要使用括号的单元格阵列。使用括号的常规双阵列:
num(k)= sum(histgrm(:) == 0);
如果(num(k)> 400)
数量= num(k);
我认为命名二进制图像“histgrm”也是欺骗性,这导致读者认为它是直方图而不是从IM2BW()输出的二进制图像。
接下来,您需要将S初始化为1而不是零,因为MATLAB中没有Zeroth元素。
2评论
图像分析师
图像分析师 2021年5月25日11:55
我的代码中无处可以将单元格转换为双重。IM2BW()的输出是一个逻辑图像 - 尽管您悄悄地称为直方图。我甚至使用括号来解决它是一个双重的。请参阅常见问题解答中的第一个项目,以了解Cell阵列是什么以及何时使用括号,括号和括号:
您的代码有很多错误,我不想解释一下我修复的每件事,只需查看以下固定代码:
thefiles = dir('* .png');
allqs = 0.1:0.01:0.3;
numqs = length(allqs);
numfiles = length(thefiles);
number = zeros(numqs,numfiles);
为了k = 1:numfiles
fullfilename = fullfile(thefiles(k).folder,thefiles(k).name);
灰度纲= imread(fullfilename);
子图(2,1,1);
imshow(灰度);
标题= Sprintf('#%d%d:“%s”',k,numfiles,thefiles(k).name);
标题(标题,'口译员''没有任何');
[行,列,numberofcolorChannels] =大小(灰度);
如果numberofcolorchannels> 1
%转换为灰度。
灰度= rgb2gray(灰度);
结尾
为了K2 = 1:NUMQS
q = allqs(k2);
BinaryImage = Imbinarize(灰度,Q);
子图(2,1,2);
imshow(BinaryImage);
标题= Sprintf('q =%.2f',q);
标题(标题,'口译员''没有任何');
粗暴;
Nulzeros = NNZ(〜BinaryImage);
%如果在阈值上方有超过400像素,则会记录它。
如果(Numzeros> 400)
数字(K2,k)= Numzeros;
结尾
结尾
%打印出此图像的值。
fprintf('为%s,number = \ n',thefiles(k).name);
为了K2 = 1:NUMQS
fprintf(“%d”,数字(:,k))
结尾
fprintf('\ n');
结尾
数字
imshow(号码,[]);

登录评论。

更多答案(1)

vbbv.
vbbv. 2021年5月25日在2:37
编辑:vbbv. 2021年5月25日在2:40
%如果属实
为了s = 1:19%更改循环索引
fprintf(“%d \ n”,号码)
结尾
改变 对于循环 指数如图所示

标签

s manbetx 845


释放

R2018A

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!

被某某人翻译