0
x=imread('test.jpg');
imshow(x);
total = 0;
for i=1:2
  for j=1:2
      for k=1:2
        total = total + abs(x(i,j,k));
      end
  end
end
total

无论 i、j、k 的最大值是多少,上面的代码都打印为 255。请解释

4

2 回答 2

10

它打印出 255 因为 matlab 不会溢出整数,并且数据类型是 uint8

 a = repmat(uint8(100),5, 1)
 a(1)+a(2)
 a(1)+a(2)+a(3)

输出将是 200 和 255,因为 Matlab 将输出钳制在最大值,而不是环绕。如果您使用 Dennis 给出的 sum 函数,那么您会得到正确的值,因为 Matlab 首先转换为 double

sum(a)

应该给出 500 作为输出。

于 2013-01-24T11:28:55.420 回答
3

不确定您的代码片段是什么,但是如果您想对数组的绝对值求和,这真的很容易:

sum(abs(x(:)))

如果您只想要包含角落的前 2 个值的子矩阵:

subM= x(1:2,1:2,1:2)
sum(abs(subM(:)))
于 2013-01-24T11:07:06.340 回答