diff options
Diffstat (limited to 'gamut/gammap.txt')
-rw-r--r-- | gamut/gammap.txt | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/gamut/gammap.txt b/gamut/gammap.txt new file mode 100644 index 0000000..f751248 --- /dev/null +++ b/gamut/gammap.txt @@ -0,0 +1,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. + + + + + |