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 の最大値に関係なく、total を 255 として出力します。説明してください

4

2 に答える 2

10

matlab は整数をオーバーフローせず、データ型が uint8 であるため、255 が出力されます。

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

Matlab はラップアラウンドではなく最大値で出力をクランプするため、出力は 200 と 255 になります。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 に答える