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-битных значений
EDIT
Если вы хотите придерживаться ручного преобразования, вам нужно ввести cast как
uint8
b = uint8(floor(255 * a))