使用matlab将16位图像转换为8位,并使用自定义伽马级别

时间:2012-03-22 09:48:41

标签: image matlab tiff

我有16位格式的tif图像。 现在我想将此数据集转换为8位rgb图像,以便导出为jpg。

如果我使用

RGB8 = im2uint8(imageData);

然后我有一个只有255个值的矩阵,这是错误的,因为直方图只有0到16000左右的值,最大值为700(最大值16位大​​约是65500)

此外,我想将伽玛级别调整为0.45,这意味着我不希望将值的线性映射到每种颜色的亮度。

我如何用matlab做到这一点?

2 个答案:

答案 0 :(得分:2)

基本gamma correction遵循幂律。您可以在Matlab中执行此操作:

img_out = img_in .^ gamma;

答案 1 :(得分:0)

我现在用以下代码解决了它:

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

生成的图像与使用我想要的特殊软件查看的原始相机图像具有相同的颜色和亮度。