Как функция matlab imwrite () масштабирует данные при записи вывода - PullRequest
0 голосов
/ 08 марта 2011

Я использую Matlab для обработки изображений. Так что в этом контексте У меня есть вопрос о функции Matlab / Octave imwrite ().

Когда я звоню imwrite как:

imwrite(img,'file.bmp');

где img - данные класса / типа double в Matlab и имеют как отрицательные, так и положительные значения.

Как функция Matlab imwrite () масштабирует эти данные, чтобы записать изображение BMP, которое будет иметь значения между [0,255]. Я не мог понять код imwrite.m

Какой тип регулировки масштаба / диапазона он выполняет, это: -

1]

img = img - min(min(img));  

img = img .* ((255)/max(max(img)));

или любой другой тип масштабирования.

Спасибо.

-AD.

1 Ответ

2 голосов
/ 08 марта 2011

Похоже, вы пишете 2D-матрицу.Эта матрица будет записана как индексированное изображение.Если цветовая карта не указана, изображение будет в градациях серого.

Если матрица img относится к классу uint8, IMWRITE записывает фактические значения в файл изображения.

Если матрица double, IMWRITE предполагает, что все значения находятся в диапазоне от 0 до 1. Все отрицательные значения будут усечены до 0, а все значения больше 1 будут равны 1. Затем они масштабируются до 255 и преобразуются вuint8.

См. Поддержка классов в IMWRITE документации.

РЕДАКТИРОВАТЬ

Вот как выможет воспроизвести преобразование:

img = (rand(10)-0.5)*3;
imwrite(img,'test.bmp');
IMG = imread('test.bmp');

img2 = img;
img2(img2<0)=0;
img2(img2>1)=1;
img2 = uint8(img2*255);

%# compare imwrite vs. manual conversion
isequal(IMG,img2)

ans =

     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...