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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
|
Author: Graeme W. Gill
Date: 2000/10/28
Updated: 2006/1/17
Discussion of the gamut mapping algorithm used in Argyll:
Jam Morovic provides an extensive summary of previous Gamut Mapping Algoriths
(GMA) in his thesis "To Develop a Universal Gamut Mapping Algorithm".
Mark Fairchild and Gustav Braun also discuss some interesting aspects of
gamut mapping in "General-Purpose Gamut-Mapping Algorithms: Evaluation
of Contrast-Preserving Rescaling Functions for Color Gamut Mapping".
One thing that is striking in reading the current Gamut Mapping
literature, is the schism between gamut mapping, and gammut clipping.
A number of studies have indicated the satisfactory results from performing
gamut clipping by mapping out of gamut points to the closest point
within gamut, using a minumim delta E criteria. Ideally this would be
in a perceptually uniform space, and in practical spaces (ie L*a*b* space),
it appears a mapping that weightes luminance errors twice as much as
hue and saturation errors is the most satisfactory
(ie. Katoh & Ito 1996, Ebner & Fairchild 1997).
This approach makes perfect sense if the perceptually linear
delta E spaces is working as its should :- providing a means of
computing the minimal perceptual error between two colors.
Almost all the gamut mapping algorithms on the other hand, take a
completely different approach. They are dominated by algorithms with
appeal for their mathematical and algorithmic simplicity, rather than
any objective sense. Clipping along a line of constant hue, in a
particular direction, with some sort of compression along line
length curve seems to be a favourite.
My own experience with such an approach used for gamut clipping
shows up the logical flaws in this approach. In printed media, for
instance, the yellow dye tends to have a very sharp cusp in (say) Lab
space. When mapping along a line towards the neutral axis, it is almost
impossible to come up with a choice of line direction that
doesn't severly distort the clipped color. It is often extremely
de-saturated at the point the line hits the gamut boundary. Line
directions that take some account of the equivalent yellow cusp
in the target gamut improve the situation, but it seems highly
illogical to choosing an algorithm that gives a result with such
high delta E's, measured in any colorspace !
My conclusion is this: If we are working in a good perceptually
uniform space (ie. L*a*b*, Luv or CIECAM02), then we want to minimise
the delta E of the gamut mapped points at all times (this is the point
of using a perceptually uniform space !). This means that points
on the source gamut surface, should map to the target surface in
a very similar way to which they would be mapped using gamut clipping,
ie. minimum delta E. The distinction between gamut mapping and clipping
only becomes evident then, when we consider points that fall within
both gamuts. For pure gamut clipping, these points should not be
modified. For gamut mapping they should be modified in a way that
trades off increased absolute delta E, for reduced delta E relative
to surrounding colors.
[ Saturation intent brings some factors other than minimum
delta E into the picture, but minumum delta E is a good
starting point. ]
Gamut clipping should not be something separate to gamut mapping,
but should just be one extreme in a continuum of gamut mapping
choices.
A consideration revealed by Jam Morovic's work, is that it may be
desirable to treat colors on and close to the neutral axis a little
differently that those saturated colors near the gamut surface.
It seems desirable to align and compress the neutral axis to
give a good gray-scale mapping, as well as preserving the
relative colorimetry of low saturation colors.
Mark fairchild's work also indicates the desirablility of
trying to maintain the relative contrast of image data after
compression. This can be achieved by using a sigmoidal
mapping during compression (often called a soft knee compression
characteristic), rather than linear compression. Gamut
clipping can be considered to be an extreme example of
knee compression, where the knee is "hard".
A final consideration is how the various user intents are going
to be accomodated. One of the nice features of a consistent
clipping/compression approach is that many of the distinctions
between different intents seems to disappear.
Description of algorithms used:
The algorithm chosen here is (as far as I am aware) a new one,
that tries to combine all the considerations made above.
The gamut mapping is divided into two parts, mapping the luminance
axis orthogonally to other considerations, and then dealling
with any remaining gamut compression or expansion.
The basic transform mechanism is broken down into three part;
Aligning the neutral axes, mapping the luminence coordinate,
performing an overall 3D -> 3D mapping to compress and/or
expand the gamut surface. The rotation uses a matrix, the 1D -> 1D
luminence mapping uses a RSPL regular spline that is available
in Argyll, and the 3D -> 3D mapping also uses a RSPL.
By controlling the number, extent and strength of the sample
point mapping used to create the RSPL, it is possible to arrive
at a smooth mapping that has (controllable) areas of influence
between different regions, and can achieve sigmoid like "soft"
clipping curves.
Aligning the neutral axes.
The first step is to align the neutral axes. If the
colorspace used is an appearance space (Such as CIECAM02 Jab),
then the white points will already be close together, but may not
exactly cooincide. The black points will also probably differ.
There are a number of options for dealing with this. One
option would be to assume that people adapt to black points
the same way they adapt to the white points of a colorspace
or image. Research and experiemnce indicates that this
may not be the case though. If we assume that people
do not in general adapt to the black points of a colorspace,
then a consequence is that it is difficult to fully exploit
the full dynamic range of the colorspace, since an
source black that is misaligned with the destination black
will probably not be able to achieve as low a J value,
and this can noticably affect the percieved quality of
an image.
The compromise deemed the best in Argyll, is to
assume that people do not adapt to black points,
and that therefore only the white points should be
aligned by rotating the source space around 0,0,0
to line them up. The minimum J value on the other hand,
is mapped as if the black points were being fully
adapted to, and at the point that the source
neutral axis would leave the destination gamut,
it is clipped to the destination.
This gives a neutral axis in the destination that looks
the same as that of the source, while fully exploiting the
dynamic range of the destination colorspace. Since
the departure of the mapped neutral axis from neutral
only occurs in very dark colors, its deviation is not
usually visible.
[ The code allows for 4 possible black point/neutral
axis mapping algorithm, set by the value of bph:
Adapt source black point to destination, giving full black range.
Don't adapt black point to destination, giving compromised black range.
Don't adapt black point, bend it to dest. at end, giving full black range.
Don't adapt black point, clip it to dest. at end, giving full black range.
]
Note that the black point mapping is performed by manipulating
J independently of the color components (a & b). In adapting
color from one space to another, this proves to be the correct
approach, maintaining the appearance of an image when
transformed to different device colorspaces.
This should not be confused with the situation where
optical flare or haze is being removed or simulated,
in which case the black point mapping should be done in a
linear light colorspace (such as XYZ), and will have an
effect simulaniously on lightness and saturation.
Mapping the luminence range.
The luminence mapping is acheived by created a small number of
mapping points, and then created a detailed RSPL (Regular Spline)
based on the points. The end points (which are heavily weighted
to ensure the overall range mapping is useful) are created
simply from the known J values of the source and destination
white and black points (taking into consuideration what
J values will result from possible gamut boundary clipping).
Middle points are introduced to either give a linear mapping (in J),
or to introduce a slight range compression aimed at preserving
the contrast ratio of the image.
Maping 3D gamut points.
The mapping points created for determinining the 3D compression or
expansioin are created from the source gamut surface verticies
that lie outside the destinatio gamut. The raw mapping for the
outside of the gamut is created by itterative optimisation,
that strikes a weighted balance between three different
factors: Mapping to the closest point on the destination surface,
Mapping in a way that is smoothly consistent with neighbour
mapping rays, and Mapping radially to the center of the colorspace.
By manipulating the weighting factors (held in a gammapweights
structure), it is possible to control to some degree the
nature of the gamut mapping.
Some compensation is applied to the vectors to try and counteract
the effects of the vector and (subsequent) RSPL smoothing.
This smoothing may cause the mapping to end up outside the
destination gamut, so we try and make sure that such smoothing
effects over rather than under-compress.
In addition to the suface mapping points, the 1D neutral axis
mapping is maintained by introducing a string of points
down the 3D neutral axis, to ensure that the 3D surface mappings
do not alter it.
Closer to the surface, optional "knee" mapping points
are also added, in an attempt to cause the inner
3D mapping to be more linear, with the compression (or
expansion) being concentrated near the surface of the
gamuts ("Sigma" compression).
Limitations and future challenges:
After re-working the gamut mapping in December 2005/January 2006,
the following challenges remain:
1) For saturation mapping in particular, the handling of hue
mapping using the "nearest" weighting isn't very flexible.
It's not possible to map RGB Cyan to CMYK Cyan without
introducing unacceptable side effects.
To solve this, I would have to add some extra mapping controls
and gamut information. For each gamut the 6 major "cusps" would
have to be identified (either directly from the colorant
combinations, or indrectly by locating the point on the gamut
surface with the largest C (?) in each hextant), and
then a means of warping the hue angle (and Luminence ??)
in each hextant.
The gammapweights structure would be expanded to add a weight
as to how much the source hue cusps would be distorted.
[Done by Feb '06]
2) There is not much flexibility in what the gammapweights
weightings can achive. Some controls simply don't work
very well. Often increases in saturation in one area (at
the transitions between major colors) are bought at the
expense of the middle of the major colors becomming
very "flat" and desaturated. This is generally when we
are in a region in which the source gamut is within the
destination gamut.
3) Geting smoothness and saturation is very difficult
for some reason. The "relative error" weights do spread
things out, but at the cost of obvious banding (why ? -
possible answer - reflects the roughness of the gamut surface.
Solution is to use better algorithm for gamut surface extraction ?? ).
Increasing the 3D RSPL smoothness seems to have no
effect (why ?). Reducing absolute chroma weight improves
smoothness, but at the cost of reduced saturation and increased
lightness.
|