2012-03-22 167 views
0

我有16位格式的tif圖像。 現在我想將這個數據集轉換爲一個8位RGB圖像導出爲JPG格式。使用matlab將16位圖像轉換爲8位自定義gamma級別

如果我使用

RGB8 = im2uint8(imageData); 

然後我有僅255個值的矩陣,這是錯誤的,因爲直方圖具有圍繞0與最大值在700(最大值僅值16000的16位爲大約65500)

此外,我想調整伽馬級別爲0.45,這意味着我不希望在每種顏色中將值線性映射到亮度。

我該怎麼用matlab做到這一點?

+0

我不確定我是否理解。你已經轉換爲8位顏色深度,但是你描述了只有255個值爲「錯誤」的事實?另外,你的意思是「從0到16000的值,最大值是700」? – 2012-03-22 10:18:24

+0

tif是16位,因此可能的取值範圍從0到65500。相機是14位,因此他的實際值只有從0到〜16000。相機拍攝的照片有一個最大值爲700的直方圖。 – 2012-03-23 09:04:33

回答

0

我解決了這個問題:你可以在Matlab這樣做,因爲

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

所產生的圖像具有相同的顏色和亮度,因爲他原來的攝像機圖像與一個特殊的軟件查看這是我想要的。

2

基本gamma correction遵循冪定律。現在用下面的代碼

img_out = img_in .^ gamma;