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))

Другие вопросы по тегам