File: MonoImageToSRGB.m

package info (click to toggle)
psychtoolbox-3 3.0.19.14.dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 86,796 kB
  • sloc: ansic: 176,245; cpp: 20,103; objc: 5,393; sh: 2,753; python: 1,397; php: 384; makefile: 193; java: 113
file content (44 lines) | stat: -rw-r--r-- 1,510 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function rgbImage = MonoImageToSRGB(monoImage,xy,SCALE)
% rgbImage = MonoImageToSRGB(monoImage,xy,[SCALE])
%
% Take a single plane image in and convert to an sRGB standard
% color image out.  The chromaticity of the output image will
% be at the specify CIE x,y chromaticity value.
%
% Result is a uint8 image scaled into range [0,255].
%
% The value of SCALE is passed on to SRGBGammaCorrect, and
% there determines whether autoscaling is applied to the image.
%
% See MonoImageToSRGBTest.
%
% 6/15/11  dhb, ms  Wrote it.

% Set default
if (nargin < 3 || isempty(SCALE))
    SCALE = 1;
end

% First step.  Project input plane to CIE XYZ tristimulus image
% at specified chromaticity.
XYZ0 = xyYToXYZ([xy ; 1]);

% String out monochrome image values as a single row.
[monoImageCalFormat,nX,nY] = ImageToCalFormat(monoImage);

% Now convert to a 3 by n matrix, where each column is a scaled
% version of the target XYZ0 values
xyzImageUnscaledCalFormat = XYZ0*monoImageCalFormat;

% Convert to sRGB
rgbImagePrimaryCalFormat = XYZToSRGBPrimary(xyzImageUnscaledCalFormat);

% Gamma correct.  This scales the result so that the maximum of the
% RGB values comes out at 255.  Thus it is not so good for calibrated
% image processing, where we might want to preserve overall intensity
% differences.  But for just looking at stuff, it seems about right.
RGBImageCalFormat = uint8(SRGBGammaCorrect(rgbImagePrimaryCalFormat,SCALE));

% Turn it back into an image
rgbImage = CalFormatToImage(RGBImageCalFormat,nX,nY);