Matlab сохраняет матрицу как изображение с разными значениями
У меня есть набор значений от 0 до 1. После того, как я поместил эти значения между 0 и 255, я хочу сохранить их как изображение в градациях серого в формате pgm. Проблема заключается в том, что после того, как я сохраняю его как изображение, значения, которые я получаю при чтении изображения, отличаются от предыдущей матрицы со значениями от 0 до 255.
Вот простой пример:
>> a=[0.5,1,0.3]
a =
0.5000 1.0000 0.3000
>> b=single(floor(255 * a))
%these are the values I want in the image
b =
127 255 76
imwrite(b, 'test.pgm');
% i don't want these values!!!
c=imread('test.pgm')
c =
255 255 255
что происходит? почему Matlab не сохраняет мои значения? это проблема конверсии?
2 ответа
что происходит? почему Matlab не сохраняет мои значения? это проблема конверсии?
Да, это проблема конверсии и не нужна. MatLab автоматически делает преобразование для вас.
Следовательно, попробуйте сохранить a
вместо b
imwrite(a, 'test.pgm');
Цитирование из документации imwrite
imwrite(A,filename)
Если A - это цветное изображение в градациях серого или RGB типа данных double или single, то imwrite предполагает, что динамический диапазон равен [0,1], и автоматически масштабирует данные на 255, прежде чем записать их в файл как 8-битные значения.
РЕДАКТИРОВАТЬ
Если вы хотите придерживаться ручного преобразования, вам нужно набрать приведение как uint8
b = uint8(floor(255 * a))
Я думаю, что значения, которые вы пишете, должны быть целыми числами.
Пытаться b = uint16(floor(255 * a))