CIELAB values from TIFF image
显示 更早的评论
hello,
I'm trying to read CIELAB values from TIFF image in Matlab with:
A_lab= imread ('A', 'tiff');
what I get is A_lab<1x33x3 unit8> with values [0,255] which are not CIELAB values that I want (positive & negative integer and non-integer).
Have any idea?
thanks
采纳的回答
更多回答(4 个)
Thomas
2012-5-30
1 个投票
this page might help
Here is what I used on a 16-bit CIELab TIFF file based on the 16-bit ICCLAB documentation here. Or there are conversions within encode_color.m which comes with the Image Processing toolbox, though some coefficients are different,
aUint16 = imread(fileData);
% Warning: Converting CIELab-encoded TIFF image to ICCLab encoding.
aDouble = double(aUint16); % Converting to double so can have decimals
Lab(:,:,1) = aDouble(:,:,1)*100/65280; % L
Lab(:,:,2) = aDouble(:,:,2)/256 - 32768; % a
Lab(:,:,3) = aDouble(:,:,3)/256 - 32768 ; % b
% Values are integers in the range [0, 65280]. L* values are multiplied by 65280/100.
% 32768 is added to both the a* and b* values,
% which are represented as integers in the range [0,65535].
2 个评论
And substitute these 3 lines for 8-bit CIELab TIFF,
Lab(:,:,1) = aDouble(:,:,1)*100/65280; % L
Lab(:,:,2) = aDouble(:,:,2)/256 - 128; % a
Lab(:,:,3) = aDouble(:,:,3)/256 - 128 ; % b
By the way all these constants are powers of 2, for example 65280 = 2^16 - 2^8.
Roger Breton
2022-3-11
Thanks! Will experiment with this code...
John
2012-5-30
0 个投票
IMREAD converts CIELAB to ICCLAB (it should also warn you that it is doing this). If you want the raw CIELAB values as stored in the TIFF, try the Tiff class instead.
5 个评论
Opiuz
2012-5-30
Opiuz
2012-5-30
John
2012-5-30
I'm not really a colorspace expert, so I'd suggest looking at the "Adobe Photoshop TIFF Technical Notes" dated March 22, 2002, which goes into a bit of explanation as to the interpretation of the different channels as retrieved from a CIELab TIFF.
KAE
2018-8-15
I had trouble with trying to do this with the tiff class, possibly because the CIELab tiff files are a mix of signed and unsigned integers, and had to use imread instead.
% The a* and b* values seemed wrong with this approach
t = Tiff(fileScan, 'r');
aUint = read(t);
% This seemed to work better, though Matlab warns:
% "Converting CIELab-encoded TIFF image to ICCLab encoding"
aUint = imread(fileData);
Roger Breton
2022-3-12
编辑:Walter Roberson
2022-3-12
This code works for me :
aUint8 = imread('LabImage.tif')
aDouble = double(aUint8);
cielab(:,:,1) = aDouble(:,:,1) ./ (255/100);
cielab(:,:,2) = aDouble(:,:,2)-128;
cielab(:,:,3) = aDouble(:,:,3)-128;
The only 'problem', as noted by opiuz, is that, a* and b* lose their fractional values...
seackone
2018-3-26
0 个投票
Hi, I want exactly the same! I've got a tiff file and looking for their lab values? Any ideas?
1 个评论
Image Analyst
2022-3-12
Try rgb2lab() for arbitrary "book" values. Those will not be the same as the true LAB values you'd get from measuring your sample on a spectrophotometer. If you need that, start a new discussion thread (it's complicated) after reading the attached tutorial.
类别
在 帮助中心 和 File Exchange 中查找有关 Images 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!