xicc/xicclu
Summary
Lookup individual color values forward or inverted though an ICC
profile table or CAL file. xicclu is the analogue of the
icclib tool icclu, but expands the
capability to reverse lookup the Lut tables, and displaying PCS
values in CIECAM02 Jab space. xicclu can also be used to
plot the device value composition down the neutral axis for device
profiles, or CAL file contents.
Few of the options that apply to ICC profiles apply to CAL files,
although device value options such as -e or -E will
work. To lookup inverted CAL values, use -f b.
Usage Summary
xicclu [-options] profile_or_cal
-v level
Verbosity level 0 - 2 (default = 1)
-g
Plot slice instead of looking colors up. (Default
white to black)
-G s:L:a:b
Override plot slice start with Lab or Jab co-ordinate
-G e:L:a:b
Override plot slice end with Lab or Jab co-ordinate
-V
Lookup or plot the 'vcgt' calibration tag from profile
-f function f = forward, b
= backwards, g = gamut, p = preview
if
=
inverted forward, ib = inverted backwards
-i intent a =
absolute, r = relative colorimetric,
p = perceptual, s = saturation, A = disp. abs.
measurements
-o order
n = normal (priority: lut > matrix > monochrome)
r
=
reverse (priority: monochrome > matrix > lut)
-p oride
x = XYZ_PCS, X = XYZ * 100, l = Lab_PCS, L = LCh, y = Yxy, u =
Yu'v'
j =
CIECAM02 Appearance Jab, J = CIECAM02 Appearance JCh
-s scale
Scale
device range 0.0 - scale rather than 0.0 - 1.0
-e flag
Video encode device input as:
-E flag
Video decode device output as:
n
normal 0..1 full range RGB levels (default)
t
(16-235)/255 "TV" RGB levels
6
Rec601 YCbCr SD (16-235,240)/255 "TV" levels
7
Rec709 1125/60Hz YCbCr HD (16-235,240)/255 "TV" levels
5
Rec709 1250/50Hz YCbCr HD (16-235,240)/255 "TV" levels
2
Rec2020 YCbCr UHD (16-235,240)/255 "TV" levels
C
Rec2020 Constant Luminance YCbCr UHD (16-235,240)/255 "TV" lev
-k [zhxrlv] Black
generation: z = zero K,
h
= 0.5 K, x = max K, r = ramp K (def.)
l
= extra PCS input is portion of K locus
v
= extra PCS input is K target value
-k p stle stpo enpo
enle shape
stle:
K level at White 0.0 - 1.0
stpo:
start point of transition Wh 0.0 - Bk 1.0
enpo:
End point of transition Wh 0.0 - Bk 1.0
enle:
K level at Black 0.0 - 1.0
shape:
1.0 = straight, 0.0-1.0 concave, 1.0-2.0 convex
-k q stle0 stpo0 enpo0
enle0 shape0 stle2 stpo2 enpo2 enle2 shape2
Transfer
extra
PCS input to dual curve limits
-K parameters Same as -k, but target is K
locus rather than K value itself
-l tlimit set
total ink limit, 0 - 400% (estimate by default)
-L klimit set
black ink limit, 0 - 100% (estimate by default)
-a
show
actual
target values if clipped
-b
use
CAM
Jab for clipping
-m
merge output processing into clut
-c viewcond set viewing
conditions for CIECAM02,
either
an enumerated choice, or a parameter:value change
pc - Critical print
evaluation environment (ISO-3664 P1)
pp
- Practical Reflection Print (ISO-3664 P2)
pe - Print evaluation
environment (CIE 116-1995)
pm - Print
evaluation with partial Mid-tone adaptation
mt - Monitor in typical work environment
mb - Monitor in bright work environment
md - Monitor in darkened work
environment
jm - Projector in dim environment
jd - Projector in dark environment
pcd - Photo CD - original scene outdoors
ob - Original scene - Bright Outdoors
cx - Cut Sheet Transparencies on a
viewing box
s:surround
n
= auto, a = average, m = dim, d = dark,
c = transparency (default average)
w:X:Y:Z
Adapted
white point as XYZ (default media white, Abs: D50)
w:x:y
Adapted
white point as x, y
a:adaptation
Adaptation
luminance in cd.m^2 (default 50.0)
b:background Background % of image
luminance (default 20)
f:flare
Flare
light
% of image luminance (default 1)
g:glare Glare light % of ambient
(default 2)
g:X:Y:Z Glare color as
XYZ (default media white, Abs: D50)
g:x:y FGare color as x,
y
h:hkscale Helmholtz-Kohlrausch effect
scale factor (default 1.0)
m:mtaf Mid-tone partial
adaptation factor (default 0.0)
m:X:Y:Z Mid-tone Adaptation
white as XYZ (default D50)
m:x:y Mid-tone
Adaptation white as x, y
inoutfile The
input ICC profile or CAL file.
The colors
to be translated should be fed into standard in,
one input
color per line, white space separated.
A line
starting with a # will be ignored.
A line not
starting with a number will terminate the program.
Flags and Parameters
The -v parameter sets the level of
verbosity. Default is level 1, which repeats each input value, the
colorspaces of input and output, the type of conversion algorithm
used, and if the result was clipped. Level 2 adds prints extra
information about the profile before doing the conversions. Level 0
turns off all verbosity, just outputting the results of each
conversion. Use the latter to capture batch output ready for further
processing.
The -g flag causes a plot of the device
values along a slice through the Lab or Jab colorspace, rather than
allowing the interactive looking up of color values. By default this
will be the neutral axis from the white point to the black point,
but the start and end can be overridden using the -G parameters. This is useful in
determining the existing black generation in a CMYK profile, or
exploring the behavior of various black generation options using the
-k parameters. The profile must be a device profile, and the
PCS must be either Lab or Jab. The default plot is up the neutral
axis is from the white to the black point (scale 0 to 100%), and
shows the percentage of each device colorant. To examine a profiles
B2A table black generation, use the flag -fb to select the
B2A table, or to invert the A2B table, and be able to explore black
generation behavior, use the -fif flag. The appropriate
intent can be selected with the -i flag, as can other
flags appropriate to the function selected. See example.
If a CAL file is used, then -g will simply plot the each
channels calibration curve. It will also plot the invers curve for -f
b.
The -G s:L:a:b
parameter overrides the plot slice start point of white, with some
other point specified in Lab or Jab Profile Connection Space. The
parameter must be a single string that combines s: with the three numbers
separated by the ':'
character (no spaces).
The -G e:L:a:b
parameter overrides the plot slice end point of black, with some
other point specified in Lab or Jab Profile Connection Space. The
parameter must be a single string that combines s: with the three numbers
separated by the ':'
character (no spaces).
The -V flag tells xicclu to load the given
ICC profile, and the extract the 'vcgt' display calibration curves
from the profile. The calibration curves can then be looked up in
the normal way, or plotted using -g.
The -f flag selects which type of table or
conversion is to be used. In addition to the usual four tables that
can be accessed in a fully populated Lut based profile, two
additional options are available in xicclu. One is to invert
the forward table, and the other is to invert the backward table.
For non Lut based profiles, -fif is equivalent to -fb, and -fib is
equivalent to -ff. Note that the -fib combination may not be fully
supported.
The -i flag selects the intent table used
for a lut based profile. It also selects between relative and
absolute colorimetric for non-lut base profiles.
The -A flag selects Display absolute measurement mode, where the
Luminance tag value is used restore absolute measurement XYZ values.
The PCS will be force to be XYZ with this selection.
A profile is allowed to contain more than the
minimum number of elements or table needed to describe a certain
transform, and may contain redundant descriptions. By default,
Lut based table information will be used first if present, followed
by matrix/shaper information, and only using monochrome information
if it is all that is present. The -o flag, reverses this
order.
Normally the native PCS (Profile Connection Space)
of a device or abstract profile is used, but the -p flag
allows this to be overridden: -px:
XYZ (scaled to 1.0), -pX:
XYZ scaled to 100, -pl:
L*a*b*, -pL: LCh, -py: Yxy space, -pu:
Yu'v' perceptual CIE 1976 UCS diagram Yu'v' space, -pj: CIECAM02 appearance space
Jab, or -pJ: CIECAM02
appearance space JCh.
Note that the CIECAM02 output space selection by default uses
the colorimetric table of the profile, but that the perceptual or
saturation tables may be used by selecting them using the -i parameter. If the absolute
colorimetric intent is chosen using -ia in combinations with -pj, then Jab with a fixed white reference is
used, which emulates an absolute CIECAM02 Jab appearance space.
Usually device values are processed and displayed
using a normalized value range between 0.0 and 1.0 Sometimes other
systems scale them to some other range (such as 100 or 255) due to
an underlying binary representation. The -s flag lets you input and display such data in its
normal range. For instance, if your device values have a range
between 0 and 255, use -s 255.
The -e flag applies a Video encoding
to the input. See -E for the
list of encodings.
The -E flag applies a Video
encoding to the output. The possible encoding are:
n
normal RGB 0..1 full range levels (default)
t
RGB (16-235)/255 "TV" levels
6
Rec601 YCbCr SD (16-235,240)/255 "TV" levels
7
Rec709 1125/60Hz YCbCr HD (16-235,240)/255 "TV" levels
5
Rec709 1250/50Hz YCbCr HD (16-235,240)/255 "TV" levels
2
Rec2020 YCbCr UHD (16-235,240)/255 "TV" levels
C
Rec2020 Constant Luminance YCbCr UHD (16-235,240)/255 "TV"
levels
When inverting a CMYK profile, (ie. using the -fif
flag), an input PCS value can have many possible CMYK solutions. To
be able to return a unique solution, a black level (or black inking
rule) should be chosen. The choice here reflect similar choices in
black generation available in other tools (eg. colprof, collink),
with the addition of two extra options.
Possible arguments to the -k option are:
-kz selects minimum black (0.0)
-kh selects a black value of 0.5
-kx selects the maximum possible black (1.0)
-kr selects a linear black ramp, starting at minimum black
for highlight, and maximum black for shadow (equivalent to -kp 0 0 1
1 1). This is the default.
-kl uses an extra (fourth) value entered after the input PCS
value, to select a black locus target between 0.0 and 1.0.
-kv uses an extra (fourth) value entered after the input PCS
value, to select a black value target value between 0.0 and 1.0.
-k p stle stpo enpo enle shape allows
an arbitrary black value ramp to be defined, consisting of a
starting value (stle) for highlights, a breakpoint L value (stpo)
where it starts to transition to the shadow level, an end breakpoint
L (enpo) where it flattens out again, and the finishing black level
(enle) for the shadows. There is also a curve parameter, that
modifies the transition from stle to enle to either be concave
(ie. the transition starts gradually and and finished more
abruptly) using values 0.0-1.0, with 0.0 being most concave, or
convex (the transition starts more abruptly but finishes gradually),
using values 1.0-2.0, with 2.0 being the most convex.
Typical black value generation curve with parameters something like:
-kp 0 .05 1 .9 .8
1.0 K |
enpo
|
_______ enle
|
/
|
/
|
/
|
/
stle | ------/
+-------------------
0.0 K
0.0
stpo 1.0
White
Black
-k q stle0 stpo0 enpo0 enle0 shape0 stle2 stpo2
enpo2 enle2 shape2 is a combination of the -kv and -kp
functionality, with the black being preserved in CMYK to CMYK
linking, with the output black constrained to be between the first
and second set of curve parameters.
-K parameters.
Any of the -k options above
can use the -K version, in
which rather than an absolute black value target being defined by
the inking rule, the black proportion out of the maximum possible
for each color is defined. This makes the inking curve scale
proportionally over the gamut, rather than clipping in dark
chromatic regions where not much black can be added.
The -g flag can be used together with the -fif
flag, to plot out the resulting black channel behaviour for various
-k or -K parameter
values.
-l tlimit Sets the
total ink limit (TAC, Total Area Coverage) for the CMYK inverse
forward lookup, as a total percentage from 0% to 400%. If none is
provided, it will be estimated from the profile relcolor B2A table.
The ink limit will be in final calibrated device values if the
profile includes calibration information.
-L klimit Sets the black
ink limit for the CMYK inverse forward lookup, as a total percentage
from 0% to 100%. If none is provided, it will be estimated from the
profile relcolor B2A table. The ink limit will be in final
calibrated device values if the profile includes calibration
information.
If the -a flag is used for inverse forward
lookups, then if the target PCS value cannot be reproduced by the
device (ie. it clips), then the achievable, clipped PCS value is
displayed.
If the -b flag is used for inverse forward
lookups, then out of gamut clipping will be performed in the
CIECAM02 Jab appearance colorspace, rather than L*a*b* colorspace.
The -m flag turns on an internal processing
option, in which the per device curve lookup table processing is
merged into the main multi-dimensional interpolation lut lookup.
Whenever PCS values are to be specified or displayed
in Jab/CIECAM02 colorspace, a set of viewing conditions will be used
to determine the details of the conversion. The -c parameter
allows the specification of the viewing conditions. Viewing
conditions can be specified in two basic ways. One is to select from
the list of "pre canned", enumerated viewing conditions, choosing
one that is closest to the conditions that are appropriate for the
media type and situation. Alternatively, the viewing conditions
parameters can be specified in detail individually. If both methods
are used, them the chosen enumerated condition will be used as a
base, and its parameters will then be individually overridden.
The final parameter is the name of the ICC profile to be used. On the
MSWindows platform a .icm extension is generally used, and on Apple
or Unix/Linux platforms a .icc extension is often used.
Usage and Discussion
Typical usage for an output profile might be:
xicclu -ff -ip profile.icm
Normally the program is interactive, allowing the user to type in
input color values, each number separated by a space, and the
resulting output color being looked up and displayed after pressing
return. To batch process a group of color values, prepare a text
file containing each input value on a separate line, and use the
input indirection facilities of your command line shell to redirect
this input file into the standard input of xicclu. The output can be
captured to a file by redirecting standard output to a file. In most
shells this would be done something like this:
xicclu -ff -ip profile.icm < inputvalues.txt
> outputvalues.txt
When plotting the neutral axis behavior, plotting
the existing B2A table behavior would typically be done something
like this:
xicclu -g -fb profile.icm
Exploring possible black generation and ink limiting behavior might
be done like this:
xicclu -g -fif -kp 0 .1 .9 1 .5 -l230 -L95
profile.icm