Matlab 乘以负数显示 0

Matlab multiply with a negativ number shows me 0

我正在尝试读取图像的 rgb 并将它们与 -1 相乘。问题是这个脚本的每个输出都是 0。例如 A(1,1) 是 144 而 144 * -1 不是 0。那么我在这里缺少什么?

A = imread('image.ppm');
[M,N] = size(A);
blocksize = 8;

for i=1:1:blocksize
   for j=1:1:blocksize
         disp(A(i,j) * - 1);
   end
end

Auint8 类型。 MATLAB 使用整数饱和算术。在饱和算术中,144 * -1 = -144 = 0.

解决方法是使用im2double:

A=im2double(A)

请注意,MATLAB 将 class double 的图像保存在 [0,1] 范围内,而 class uint8 的图像保存在 [0,255] 范围内。使用 imshowimsave 时您会注意到这种差异。 im2double 将正确转换范围。