【问题标题】:MATLAB - Data is lost when closing the FOR loopMATLAB - 关闭 FOR 循环时数据丢失
【发布时间】:2017-06-27 18:11:19
【问题描述】:

我遇到了一个循环计算白色像素的问题 图像的一部分,并存储总的白色像素以及 y 和 x 该部分在图像中的位置,每个都在自己的数组中。

当我打印循环内的值时,它工作得很好,但是正确 循环结束后,3 个数组用零填充。

谁能帮忙?

鳕鱼:

y = zeros(altura*largura);
x = zeros(altura*largura);
v = zeros(altura*largura);


for j=0:altura-1
    for k=0:largura-1

        pedaco = f8(j*40+1 : j*40+40, k*40+1 : k*40+40); %binary piece
        pedac = im2uint8(pedaco);
        totalBrancos = sum(sum(pedac)); %sum white pixels

        pos = altura*j+k+1;

        y(pos) = j;
        x(pos) = k;
        v(pos) = totalBrancos;

        disp(y(pos)); %works
        disp(x(pos)); %works
        disp(v(pos)); %works

    end
end  

disp(y); %all zeros
disp(x); %all zeros
disp(v); %all zeros

【问题讨论】:

  • 确定都是零吗?如果矩阵很大,您可能只会在命令行窗口中看到其中的一部分。请为每个矩阵尝试 imagesc(y);
  • 这应该可以按预期工作,请提供minimal reproducible example,即定义所有变量。
  • 在真正的 matlab 样式中可能应该从 1 而不是 0 开始索引。您似乎来自另一种编程语言。
  • 您使用的是什么版本的 Matlab?我将其复制并粘贴到 R2012b 中,更改了一些函数并将值分配给未知数,并且一切都按预期工作 - 它看起来很奇怪,因为所有值都在最终矩阵的左侧列中您已经创建了它们并为它们编制了索引。

标签: matlab for-loop


【解决方案1】:

您的 zeros 调用正在创建一个 (alturalargura) by (alturalargura) 矩阵,我认为这不是您想要通过计算位置来保存数据的意图

如果是这种情况,请尝试

y = zeros(1, altura*largura);
x = zeros(1, altura*largura);
v = zeros(1, altura*largura);

可以在多索引矩阵中使用单个索引,但是您的 pos 计算不适合这样做。

【讨论】:

  • 请注意,可以使用线性索引访问多维数组中的元素元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 2022-11-30
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2019-01-29
相关资源
最近更新 更多