一次迭代后变量变为零,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;
....
小注
使用 i
和 j
作为变量是非常糟糕的做法。这些是为 复杂变量 i = sqrt(-1);, j = sqrt(-1);
保留的。不建议隐藏 i
或 j
,因为这会使创建复数变得更加困难。您基本上必须输入 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
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;
....
小注
使用 i
和 j
作为变量是非常糟糕的做法。这些是为 复杂变量 i = sqrt(-1);, j = sqrt(-1);
保留的。不建议隐藏 i
或 j
,因为这会使创建复数变得更加困难。您基本上必须输入 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