Matlab умножить на отрицательное число показывает мне 0 - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь прочитать rgb-ы изображения и умножить их на -1.Проблема в том, что каждый результат этого скрипта равен 0. А (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 голосов
/ 02 декабря 2018

A относится к типу uint8.MATLAB использует насыщенную арифметику с целыми числами.В насыщенной арифметике 144 * -1 = -144 = 0.

Решением является использование im2double:

A=im2double(A)

Обратите внимание, что MATLAB хранит изображения класса double вдиапазон [0,1] и класса uint8 в диапазоне [0,255].Вы заметите эту разницу при использовании imshow и imsave.im2double будет правильно преобразовывать диапазоны.

...