конвертировать 16-битные изображения в 8-битные с пользовательским уровнем гаммы, используя Matlab - PullRequest
0 голосов
/ 22 марта 2012

У меня есть изображение TIF в 16-битном формате. Теперь я хочу преобразовать этот набор данных в 8-битное изображение RGB для экспорта в формате JPG.

Если я использую

RGB8 = im2uint8(imageData);

тогда у меня есть матрица только с 255 значениями, что неверно, поскольку гистограмма имеет только значения от 0 до 16000 с максимальным значением 700 (максимальное значение 16 бит составляет около 65500)

Также я хочу настроить уровень гаммы на 0,45, что означает, что я не хочу линейного отображения значений яркости в каждом цвете.

Как бы я сделал это с Matlab?

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Basic гамма-коррекция следует степенному закону.Вы можете сделать это в Matlab как:

img_out = img_in .^ gamma;
0 голосов
/ 22 марта 2012

Я решил это сейчас с помощью следующего кода:

% reads 16 bit tif image
imageRGB16 = imread(importName);
% convert to 14 bit 
imageRGB14 = imageRGB16 * 4;
% apply gamma correction
imageRGBGamma = imadjust(imageRGB14,[],[], 0.45);
% convert to 8 bit
imageRGB8 = im2uint8(imageRGBGamma);
% imshow(imageRGB8);
% export to jpg
imwrite(imageRGB8,exportImportName,'jpg', 'Quality', 90)

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

...