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

时间:2016-01-15 17:54:29

标签: image matlab variables zero

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

m=max(j(:))

x=m-1
u=-x

当我运行上面的代码时,' x'结果正确地在255,但' u'结果为零。无论我做什么,我都无法得到“你”。消极的' x'。这仅在使用图像而不是矩阵作为输入时发生。

2 个答案:

答案 0 :(得分:1)

这是因为j是最有可能属于无符号的数据类型的图片。这意味着不支持负值并将其截断为零。如果您需要负数支持,请将变量强制转换为可以处理此类型的受支持类型...例如doubleint8。但是,我假设你想将它用于浮点应用程序,所以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查看此Stack Overflow帖子:Using i and j as variables in Matlab

答案 1 :(得分:1)

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

class(j)

    uint8

这意味着对此的任何操作也将被强制为无符号整数。因此,当您尝试将x设置为-254时,无法执行此操作,因为x是无符号整数。您首先需要将x转换为浮点数(doublesingle)或有符号整数(int8

u = -int8(x);

    -254

u = -double(x);

    -254