一次迭代后变量变为零,matlab

Variable becomes zero after one iteration,matlab

function complexity2imgloop_90(filename)
j=imread(filename); 

m=max(j(:))

x=m-1
u=-x

当我 运行 上述代码时,'x' 的结果正确为 255,但 'u' 的结果为零。无论我做什么,我都无法让 'u' 变为负数 'x'。这仅在使用图像而不是矩阵作为输入时发生。

这是因为 j 是最有可能属于 unsigned 数据类型的图像。这意味着不支持负值并被截断为零。如果您需要负数支持,请将变量转换为可以处理此问题的受支持类型...例如 double,或者 int8。但是,我假设您希望将其用于浮点应用程序,因此 double 应该没问题:

function complexity2imgloop_90(filename)
j=imread(filename); 
j = double(j); %// Change here
m=max(j(:));

x=m-1;
u=-x;

....

小注

使用 ij 作为变量是非常糟糕的做法。这些是为 复杂变量 i = sqrt(-1);, j = sqrt(-1); 保留的。不建议隐藏 ij,因为这会使创建复数变得更加困难。您基本上必须输入 sqrt(-1) 才能实现相同的行为。这样做还有其他缺点。

看看 Shai Bagon for more details: Using i and j as variables in Matlab

的 Stack Overflow post

这是因为当您读入图像时,它很可能被读入为 8 位无符号整数 (uint8)。要检查这一点,请输入 this

class(j)

    uint8

这意味着对此的任何操作也将被强制转换为无符号整数。因此,当您尝试将 x 设置为 -254 时,它无法完成,因为 x 是一个无符号整数。您首先需要将 x 转换为浮点数 (double or single) or a signed integer (int8)

u = -int8(x);

    -254

u = -double(x);

    -254