Matlab与负数相乘显示0

时间:2018-12-02 18:30:34

标签: matlab dct

我正在尝试读取图像的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

1 个答案:

答案 0 :(得分:0)

A的类型为uint8。 MATLAB使用带整数的饱和算术。在饱和算术中,144 * -1 = -144 = 0

解决方案是使用im2double

A=im2double(A)

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