循环中的循环只返回第一次迭代的结果

3次查看(最近30天)
保罗Costache
保罗Costache 2021年8月14日
评论道: 保罗Costache2021年8月15日
你好,
我使用这些循环从多张照片中获得粒子的体积。'f'的每次迭代都是一个单独的照片。表格'results'获取每个照片的属性,'results_total'组合结果。表格'results'在每次迭代中也有不同的行数。
我想对第二个循环做同样的事情,其中'j'给出每幅图中识别的粒子数量,而Vol(j)则得到每个粒子的体积。正如我上面所做的,我想在'Vol_total'保存所有照片的结果,但我从第一张照片的值,所以f=1加2次。例如,在第一张照片中有141个粒子,而在第二张111中,Vol_total返回一个双数组282x1而不是252x1。
我如何更改代码以获得正确的结果?谢谢你!
Vol_total =表;
f = 1:2
从一个文件夹的每一张照片的%粒子被分析和一些特性测量
%来简化一下,照片的数量= 2
%代码的计算结果
结果= regionprops (“表”lm2,“区域”“周长”“MinFeretProperties”“MaxFeretProperties”);
results_total = vertcat(结果,results_total);
j = 1:高度(结果)
卷(j) =总和(V (lm2 = = j));% V为每个像素的体积,lm2为标签矩阵,表示属于同一粒子的像素
结束
Vol_total = [Vol_total;卷的);
结束

接受的答案

darova
darova 2021年8月14日
尝试preallocate 变量之前 循环。 第一次迭代后的大小是141,这就是为什么你有282个元素
卷=表(大小(结果));
j = 1:高度(结果)
卷(j) =总和(V (lm2 = = j));% V为每个像素的体积,lm2为标签矩阵,表示属于同一粒子的像素
结束
你应该在两个方向上求和。不知道为什么这一行没有错误
% Vol(j) = sum(V(lm2==j));% V为每个像素的体积,lm2为标签矩阵,表示属于同一粒子的像素
v1 = V (lm2 = = j);
卷(j) =总和(v1 (:));所有元素的总和
1评论
保罗Costache
保罗Costache 2021年8月15日
卷=双(高度(结果));
j = 1:高度(结果)
v1 = V (lm2 = = j);
卷(j) = (v1)总和;
结束
Vol_total = [Vol_total;卷的);
谢谢你的提示。它是有效的,但是我必须去掉v1的下标因为我得到了一个错误。

登录评论。

更多的答案(0)

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!