我正在尝试读取图像的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
答案 0 :(得分:0)
A
的类型为uint8
。 MATLAB使用带整数的饱和算术。在饱和算术中,144 * -1 = -144 = 0
。
解决方案是使用im2double
:
A=im2double(A)
请注意,MATLAB将类别double
的图像保留在[0,1]范围内,并将类别uint8
的图像保留在[0,255]范围内。使用imshow
和imsave
时,您会注意到这种差异。 im2double
将正确转换范围。