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   2  

2 ответа:

Что происходит? почему matlab не сохраняет мои ценности? это проблема конверсии?

Да, это вопрос преобразования и не требуется. MatLab автоматически выполняет конвертацию за вас.

Поэтому попробуйте хранить a вместо b

imwrite(a, 'test.pgm'); 

Цитирование из документации imwrite

imwrite(A,filename)

Если A-цветное изображение в оттенках серого или RGB типа данных double или single , тогда imwrite предполагает, что динамический диапазон равен [0,1] и автоматически масштабирование данных на 255 перед записью в файл в виде 8-битных значений


EDIT

Если вы хотите придерживаться ручного преобразования, вам нужно ввести cast как uint8

b = uint8(floor(255 * a))

Я думаю, что значения, которые вы пишете, должны быть целыми числами.

Попробуйте b = uint16(floor(255 * a))