Patent Publication Number: US-7916938-B2

Title: Computer-implemented gamut mapping

Description:
BACKGROUND OF THE INVENTION 
     The present invention relates to color processing performed by a computer, and more particularly to gamut mapping. 
     An image may include a color outside of the gamut of a display device on which the image is to be displayed. In this case, gamut mapping is performed to replace the color with another color in the device&#39;s gamut. For example, a digital photographic camera may generate an image with colors outside of the gamut of a computer monitor on which the image must be displayed, i.e. the source gamut  110  ( FIG. 1 ) provided by the camera may contain a color S which is not in the monitor&#39;s gamut (“target gamut”)  120 . The color S is mapped into a color S′ which is within the target gamut. The gamut mapping should preferably avoid large image distortion and be computationally inexpensive. See e.g. U.S. Pat. No. 6,560,356 B1 issued May 6, 2003 to Takahashi et al., describing gamut mapping for a color coordinate system L*a*b*. 
     PCT application published as WO 2005/043887 A1 on 12 May 2005, incorporated herein by reference, describes gamut mapping for a linear RGB color coordinate system. The target gamut  120  consists of all colors whose RGB coordinates are between 0 and 255 inclusive. The gamut mapping from S=(R,G,B) to S′=(R′,G′,B′) is performed in two steps as follows: 
     1. If at least one of the R, G, B coordinates is negative, the smallest of the negative coordinates (i.e. the negative coordinate of the largest magnitude) is subtracted from each of the R, G, B coordinates. Thus, the vector S=(R,G,B) is replaced with
 
 S   1   =S− min( R,G,B )×(1,1,1)   (1)
 
Clearly, all the coordinates of S 1  are non-negative. Let us denote them as R 1 , G 1 , B 1 .
 
     2. If any of R 1 , G 1 , B 1  is greater than 255, then S 1  is scaled to within the target gamut:
 
 S′=S   1 *255/max( R   1   ,G   1   ,B   1 )   (2)
 
     SUMMARY 
     This section summarizes some features of the invention. Other features are described in the subsequent sections. The invention is defined by the appended claims which are incorporated into this section by reference. 
     The inventors have observed that if a color is generated by very bright light, the color looks white or almost white. More particularly, suppose a color is produced by light of radiance kP(λ), where k is some multiplier independent of wavelength λ. (Radiance is defined as the energy per unit of time per unit of wavelength.) As k increases, the corresponding color appears closer and closer to white and less and less dependent on P(λ). 
     Therefore, in some embodiments of the present invention, the gamut mapping S→S′ is performed so that when S becomes brighter and brighter, S′ gradually converges to a white color regardless of the hue and saturation of S. 
     The invention is not limited to the features and advantages described above. Other features are described below. The invention is defined by the appended claims. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  explains gamut mapping. 
         FIGS. 2 ,  3 A,  3 B illustrate gamut mappings according to some embodiments of the present invention. 
         FIG. 4  is a flowchart of gamut mapping according to some embodiments of the present invention. 
         FIG. 5  illustrates a color coordinate system suitable for gamut mapping according to some embodiments of the present invention. 
         FIG. 6  illustrates a visible gamut and a target gamut in the color coordinate system of  FIG. 5 . 
         FIGS. 7-9  illustrate gamut mapping according to some embodiments of the present invention. 
     
    
    
     DESCRIPTION OF SOME EMBODIMENTS 
     The embodiments described in this section illustrate but do not limit the invention. The invention is defined by the appended claims. 
       FIG. 2  illustrates some embodiments of the present invention. Gamut mapping is performed by a computer system  210  (possibly a distributed system) having one or more computer processors  220  executing computer instructions stored in a computer storage  230  and/or received over a network (not shown). The colors are represented by digital data stored in a storage  230  and/or received over a network. The images obtained using the gamut mapping are displayed on a display device  240 , e.g. a computer monitor, a television monitor, a printer, a holographic display device, and/or other types of devices. Device  240  may incorporate all or part of system  210 , and in particular some or all of the gamut mapping can be performed within device  240 . In other embodiments, additional gamut mapping is performed by device  240  before and/or after the processing illustrated in  FIG. 2 . 
     Colors S 1  through S 4  ( FIG. 2 ) are outside of target gamut  120 , and are mapped into respective colors S 1 ′ through S 4 ′ which are inside gamut  120 . Colors are represented as vectors which are denoted by the same symbols as the corresponding colors. W is a white color. Colors S 1 , S 2  are “colinear” in the sense that they can be produced by light sources whose respective radiance functions P 1 (λ), P 2 (λ) are multiples of each other, i.e.
 
 P   2 (λ)= kP   1 (λ)   (3)
 
for some positive number k independent of λ. In this case, we will say that
 
S 2 =kS 1    (4)
 
for colors S 1  and S 2 . Intuitively, two colors are colinear if they differ in brightness but have the same hue and saturation (this statement is imprecise, is not tied to any particular definition of hue and saturation, and does not limit the invention). It is easy to see that two colors are colinear if they are represented by colinear vectors in a linear color coordinate system. Also, if condition (4) holds for the colors, it also holds for the corresponding vectors in any linear color coordinate system. (Thus, k is well defined even though a color can be generated by different radiance functions.) For convenience of illustration, we will assume that  FIG. 2  represents colors in a linear color coordinate system. The invention is not limited to such color representations however.
 
     In  FIG. 2 , color S 3  is colinear to S 4 . 
     White color W is on the boundary of target gamut  120 . Thus, if W is produced by a radiance P W (λ), then a color produced by radiance kP W (λ) is outside of gamut  120  for any k&gt;1. Colors S 1 ′, . . . , S 4 ′ are also on the boundary of gamut  120 . 
     In some embodiments, the gamut mapping satisfies the following condition “GM1”: 
     Condition GM1: When color S is stretched out more and more (i.e. multiplied by greater and greater constants k&gt;1), the corresponding vector S′ in the target gamut approaches Win some sense. For example, in a linear color coordinate system, the angle between S′ and W may decrease as k increases. In another example, each coordinate of S′ approaches the respective coordinate of W. 
     In  FIG. 2 , each vector S′ (i.e. S 1 ′ through S 4 ′) is in the same plane as the corresponding vector S and W. For a linear color coordinate system, this means that S′ is a linear combination of S and W:
 
 S ′=α( S ) S +β( S ) W    (5)
 
for some numerical α(S) and β(S). See  FIG. 3A . The invention is not limited to S′ being in the same plane as S and W however. Of note, in  FIG. 3A , the vector W is not on the gamut boundary. Vector β 0 W is on the gamut boundary for some positive β 0 . If W is inside gamut  120  (as in  FIGS. 2 and 3A ), then β 0 ≧1. If W is outside of gamut  120 , then β 0 &lt;1. (It is assumed in this section that the target gamut is convex in the sense that if S is outside gamut  120  then kS is also outside gamut  120  for any k&gt;1; this is not generally necessary however.)
 
     Combining the equation (5) and condition GM1, we obtain for some embodiments that if S is held constant and k approaches infinity, then:
 
α(kS)kS+β(kS)W→β 0 W   (6)
 
Hence, at least if S is not colinear to W, then
 
α(kS)k→0   (7A)
 
β(kS)→β 0    (7B)
 
In some embodiments, if S is colinear to W and is outside of target gamut  120 , then S′=β 0 W, so the conditions (7A), (8A) continue to hold.
 
     The invention is not limited to gamut mappings satisfying the conditions (6), (7A), (7B). Of note, source gamut  110  can be a bounded set, so the functions α(kS), β(kS) can be undefined for large k. In some embodiments, regardless of whether or not α(kS), β(kS) are defined for arbitrarily large k, the following conditions hold for each fixed S and all positive k such that kS is in source gamut  110  but outside of target gamut  120 :
 
α(kS)k is a non-negative decreasing function of k   (8A)
 
β(kS) is a bounded increasing function of k   (8B)
 
As used herein, the terms “increasing” and “decreasing” do not necessarily mean strictly increasing or decreasing. However, in some embodiments, the functions α(ks)k and β(kS) are respectively strictly decreasing and strictly increasing for at least some k. In other words, for all ordered pairs (k 1 ,k 2 ), k 1 &lt;k 2 , of positive numbers such that k 1 S and k 2 S are in the source gamut but outside of the target gamut, the following conditions hold true:
 
α( k   1   S ) k   1 ≧α( k   2   S ) k   2 , and
 
α( k   1   S ) k   1 &gt;α( k   2   S ) k   2  for at least one pair ( k   1   ,k   2 );   (9A)
 
β( k   1   S )≦β( k   2   S ), and
 
β( k   1   S ) k   1 &lt;β( k   2   S ) for at least one pair ( k   1   ,k   2 ).   (9B)
 
In some embodiments, conditions (9A), (9B) hold for all ordered pairs (k 1 ,k 2 ), k 1 &lt;k 2 , of positive numbers such k 2 S is in the source gamut but outside of the target gamut (i.e. k 1 S can be inside the target gamut). If the gamut mapping is clipping, i.e. the colors inside the target gamut are mapped into themselves, then we can set β(S)=0 and α(S)=1 when S is in the target gamut.
 
     In some embodiments, the functions α and β are defined as follows. Let S Bmax (S) denote the largest vector colinear to S in target gamut  120 .  FIG. 2  illustrates S Bmax (S) for vectors S=S 1  and S=S 3 . Clearly, S Bmax (S 2 )=S Bmax (S 1 ), and S Bmax (S 4 )=S Bmax (S 3 ) Intuitively, S Bmax (S) is the brightest color having the same hue and saturation as S in gamut  120 . S Bmax  is on the gamut boundary. If S is not zero and S Bmax (S) is not zero, then the following condition holds for some k&gt;1:
 
 S=kS   Bmax ( S )   (10)
 
where k is a function of S. The number k can be thought of as |S|/|S Bmax | where |•| represents a vector&#39;s length. The vector length can be thought of as a measure of brightness. Replacing S with S Bmax  in equations (7A), (7B), we obtain for k→∞:
 
α(kS Bmax )k→0   (11A)
 
β(kS Bmax )→β 0    (11B)
 
In some embodiments, the values α(S) and β(S) are entirely defined by k. In this case, we can define α(k) and β(k) as follows:
 
α( k )=α( kS   Bmax ), β( k )=β( kS   Bmax )   (12)
 
Then (11A), (11B) can be re-written as (13A), (13B) below. In some embodiments, α(k) and β(k) are continuous functions. If the gamut mapping is clipping, i.e. S′=S for all S in gamut  120 , then (13C) and (13D) below hold true.
 
α(k)k→0 as k→∞  (13A)
 
β(k)→β 0  as k→∞  (13B)
 
α(1)=1   (13C)
 
β(1)=0   (13D)
 
Possible choices for α(k) and β(k) include:
 
α( k )=1 /k    1+p  
 
β( k )=β 0 (1−1 /k   q )   (14)
 
where p&gt;0 and q&gt;0 are constant with respect to k for a given hue and saturation, i.e. a given S Bmax . The numbers p and q may or may not depend on S Bmax .
 
     The equations (14) define α(k) and β(k) for k≧1 and for S Bmax (S) being non-colinear to W. Different functions α(k) and β(k) (e.g. different p and q values) can be used for different S Bmax  values. In some embodiments,
 
q=p   (15)
 
Good practical results (i.e. little image distortion) have been achieved for (14), (15) when p was independent of S Bmax  and was in the range:
 
⅓≦p≦½  (16)
 
e.g. p=½ for all S Bmax  values. Of note, p=½ allows computationally inexpensive implementations on many computers due to efficient computation of square roots.
 
     In (10), it was assumed that:
 
 S   Bmax ( S )≠0   (17)
 
However, in the RGB example described above in connection with expressions (1) and (2), the condition (17) does not hold if S has a negative RGB coordinate. In some embodiments of the present invention, the gamut mapping is performed in two stages. At stage  410  ( FIG. 4 ), the image is transformed to map the source gamut into a region in which (17) holds for any vector S outside of the target gamut, e.g. the region R≧0, G≧0, B≧0 in the case of equation (1). Step  410  can be accomplished via equation (1) or by other techniques some of which are described below. At stage  420 , further gamut mapping (e.g. clipping) is performed as described above in connection with equations (5) -(17).
 
     For illustration, let us apply the techniques (14), (15) to a linear RGB system. Suppose the target gamut consists of all the colors whose R, G, B coordinates are between 0 and 1 inclusive. Color W=(1,1,1) is a white color. Clearly, W is on the target gamut&#39;s boundary (β 0 =1). First, step  410  is performed using the equation (1) or some other technique. The colors at the output of step  410  have only non-negative RGB coordinates, but some coordinates may be greater than 1. If a color S=(R,G,B) output by step  410  has max(R,G,B)&gt;1, then S Bmax (S)=S/max(R,G,B), and k=max(R,G,B). Therefore, setting q=p in equation (14), we obtain 
                     S   ′     =       S   +       (     1   ⁢     ,     ⁢   1   ⁢     ,     ⁢   1     )     ⁢     k   ⁡     (       k   p     -   1     )             k     1   +   p                 (   18   )               
Good practical results have been achieved for p as in (16), but the invention is not limited to such p values. Of note, (18) is computationally inexpensive, especially if p=½. See Appendix A below for one computer implementation.
 
     In some embodiments, the functions α(k), β(k) may or may not satisfy (14) but satisfy the following conditions for any S Bmax  non-colinear to W:
 
0&lt;α( k )≦1/ k   1+p  
 
1&gt;β( k )/β 0 ≧1−1/ k   q    (19)
 
These functions may or may not be defined for all values of k.
 
     As noted above in the statement of condition GM1, the gamut mapping can be defined in terms of the angle between S and W. If W represents a white color, then this angle can be thought of as chroma (saturation). Denoting the angle between S and W as C and the angle between S′ and W as C′, we can write
 
 C ′=φ( S )   (20)
 
where φ is a suitable function. The color S′ can be defined by the angle C′ and some additional conditions. In some embodiments, S′ is defined by the following condition (21):
 
S′ satisfies (20) and lies on the gamut boundary and in the same plane as S and W   (21)
 
     In some embodiments, for any fixed non-zero S in the source gamut,
 
φ(kS)→0 as k→∞  (22)
 
In addition, or alternatively, φ(kS) can be a decreasing function of k, possibly strictly decreasing for at least some k. In other words, for all ordered pairs (k 1 ,k 2 ), k 1 &lt;k 2 , of positive numbers such that k 1 S and k 2 S are in the source gamut but outside of the target gamut, the following condition holds true:
 
φ( k   2   S )≦φ( k   1   S ), and
 
φ( k   2   S )&lt;φ( k   1   S ) for at least one pair ( k   1   ,k   2 )   (23)
 
In some embodiments, (23) holds for all ordered pairs (k 1 ,k 2 ), k 1 &lt;k 2 , of positive numbers such k 2 S is in the source gamut but outside of the target gamut (i.e. k 1 S can be inside the target gamut). If the gamut mapping is clipping, i.e. the colors in the target gamut are mapped into themselves, then we can set φ(S)=C when S is in the target gamut.
 
     For k as in (10), condition (22) becomes:
 
φ(kS BMax )→0 as k→∞  (24)
 
and (23) becomes:
 
φ( k   2   S   BMax )≦φ( k   1   S   BMax ), and
 
φ( k   2   S )&lt;φ( k   1   S ) for at least one pair ( k   1   ,k   2 )   (25)
 
In some embodiments, the values φ(S) are entirely defined by k and C, where k is as in (10) and C is the angle between S and W (and hence between S Bmax  and W). In this case, we can write φ(kS Bmax ) as φ(k,C). Then (24) can be re-written as (26A) below. Further, in some embodiments, φ(k,C) is continuous in k, and satisfies some boundary conditions on the target gamut&#39;s boundary. For example, if the gamut mapping is clipping, then (26B) below holds true.
 
φ(k,C)→0 as k→∞  (26A)
 
φ(1, C )= C    (26B)
 
Possible choices for φ(k,C) include:
 
φ( k,C )= C/k   p    (27)
 
where p&gt;0 is constant with respect to k for a given hue and a given saturation C, i.e. for a given S Bmax . The number p may or may not be constant with respect to C or other S Bmax  parameters.
 
     The equation (27) defines φ(k) for k≧1 and for S Bmax (S) being non -colinear to W. Different functions φ(k) (e.g. different p values) can be used for different S Bmax  values. In some embodiments,p satisfies (16). In some embodiments,
 
0&lt;φ( k,C )≦ C/k   p    (28)
 
The function φ(k,C) may or may not be defined for arbitrarily large k.
 
       FIG. 3B  illustrates another embodiment. A function φ is chosen as in any of the embodiments described above in connection with formulae (20)-(28), and is applied to a color vector S to obtain a new angle C′ 1 =φ(S). C′ 1  is the chroma of a color vector S′ 1  having the same hue and length as S. In the particular example of  FIG. 3B , the length of S is chosen so that S is outside of gamut  120  but S′ 1  is inside the gamut. This may happen, for example, if the gamut&#39;s cross section by the plane passing through vectors S and W is other than a circle centered at the origin O. Such gamuts are not uncommon. Of course, the gamut&#39;s shape depends on the color coordinate system. Many display devices, including many computer monitors, have “non-circular” gamut representations in linear color coordinate systems (i.e. the gamuts&#39; planar cross sections passing through the origin are not circles centered at the origin). Further, in many computer monitors and some other display devices, given a fixed hue H (the hue can be defined so as to be constant in a planar cross section passing through the origin), the maximum brightness increases as the color becomes closer to white (i.e. as the chroma C decreases). Defining the brightness as the color vector&#39;s length (the invention is not limited to this definition however), in many display devices the maximum possible brightness B max (C,H)=|S Bmax (S)| is a decreasing function of C, and is strictly decreasing throughout the range of all the possible C values or at least in a sub-range of the possible C values. Therefore, S might be such that |S|&gt;B max (C,H) but |S′ 1 |≦B max (C′,H), i.e. S is outside of the gamut  120  but S′, is inside the gamut as in  FIG. 3B . 
     In some gamut mapping embodiments, S is mapped into S′ 1  even if S′ 1  is not on the gamut boundary. In other embodiments, S is mapped into a vector S′ 2  which has the same length as S and lies on the gamut boundary. The chroma C′ 2  of S′ 2  is less than C but greater than C′ 1 . More particularly,  FIG. 3B  shows a circular arc  310  with the center at the origin O and the radius equal to the length of S. The arc lies in the same plane as S and W. Arc  310  intersects the gamut boundary somewhere between the vectors S and W, and the point of intersection defines the vector S′ 2 . Thus, the gamut mapping is defined as follows: vector S outside of the target gamut is mapped into a vector S′ which lies on the gamut boundary and in the same plane as S and W and has a chroma C′ defined as follows:
 
 C′=C′   1  if  B   max ( C′   1   ,H )≦| S| 
 
 C′=C′   2  if  B   max ( C′   1   ,H )&gt;| S|   (28.1)
 
     A portion of arc  310  to the right of W corresponds to colors having different chroma values C but having the same brightness B and the hue H as the color S. Clearly, C′ 2  is the maximum chroma value for such colors. Denote C′ 2 =C max (B,H). Then the mapping (28.1) can be represented as follows:
 
 C′ =max( C′   1   , C′   2 )   (28.2A)
 
or, equivalently,
 
 C′ =max(φ( S ),  C   max ( B,H ))   (28.2B)
 
     C max (B,H) may be undefined for some B values, e.g if B is larger than the maximum brightness in gamut  120 . In such cases, we can set C′=C′ 1 . For example, we can define:
 
φ 1 ( S )=max(φ( S ),  C   max ( B,H )) if  C   max ( B,H ) is defined,
 
φ 1 ( S )=φ( S ) if  C   max ( B,H ) is undefined.   (28.3)
 
Then,
 
 C′=φ   1 ( S )   (28.4)
 
     If gamut  120  is bounded, and φ(S) satisfies (22), then φ 1 ( S ) also satisfies (22) since φ 1 (S)=φ(S) for large k. Further, in some display devices (including many computer monitors), C max (B,H) is a decreasing function of B, and is strictly decreasing in the range of all the possible B values or at least in some sub-range of the possible B values. (Of note, if B max (C,H) is a decreasing or strictly decreasing function of C, and the target gamut is convex, then C max (B,H) will also be respectively a decreasing or strictly decreasing function of B.) For such gamuts, if φ(S) decreases in |S|, then φ 1 (S) also decreases in |S|. If φ(S) satisfies one or more of (23)-(26B), then φ 1 (S) also satisfies the same one or more of (23)-(26B) at least if C max (B,H) is strictly decreasing throughout the range of possible B values (and possibly even if C max (B,H) is not strictly decreasing throughout). 
     We will now discuss some appropriate ways to define an angle between two colors. In a linear coordinate system, the angle between colors S and W can be defined as: 
               cos     -   1       ⁢       (     S   ,   W     )            S        ⁢        W                  
where (S,W) is the dot product of S and W, and |•| denotes a vector&#39;s length. The dot product can be defined in different ways, for example:
 
( S,W )= s   1   w   1   +s   2   w   2   +s   3   w   3    (29)
 
where (s 1 ,s 2 ,s 3 ) and (w 1 ,w 2 ,w 3 ) are coordinates of S and W respectively. The equation (29) is the usual dot product definition when the coordinate system is orthonormal, i.e. the coordinate axes are mutually orthogonal and the unit vector along each coordinate has a unit length. Orthonormality can be defined as in U.S. patent application Ser. No. 11/432,221 filed May 10, 2006 by S. N. Bezryadin et al., entitled “EDITING OF DIGITAL IMAGES, INCLUDING (BUT NOT LIMITED TO) HIGHLIGHTING AND SHADOWING OF IMAGE AREAS”, published as no. 2007/0146831 A1 on Jun. 28, 2007, incorporated herein by reference. More particularly, a linear color coordinate system is called orthonormal if its color matching functions (CMF&#39;s)  t   1 ,  t   2 ,  t   3  form an orthonormal system in L 2  on [0,∞) (or on any interval containing the visible range of the λ values if the color matching functions are zero outside of this range). In other words:
 
∫    t   1   (λ)    t   2   (λ) d λ=∫    t   1   (λ)    t   3   (λ) d λ=∫    t   2   (λ)    t   3   (λ) dλ= 0
 
∫[    t   1   (λ)] 2   d λ=∫[    t   2   (λ)] 2   d λ=∫[    t   3   (λ)] 2   dλ=K    (30)
 
where the integration is over the entire L 2  interval (e.g. [0,∞) or the visible range), and K is a positive constant dependent on the measurement units chosen for the wavelength λ and the radiance P(λ). The units can be chosen so that K=1.
 
     The integrals in (30) can be replaced with sums if the CMF&#39;s are defined at discrete λ values, i.e.: 
                         ∑   λ     ⁢         t   1     _     ⁢           ⁢     (   λ   )     ⁢         t   2     _     ⁡     (   λ   )           =         ∑   λ     ⁢           t   2     _     ⁡     (   λ   )       ⁢         t   3     _     ⁡     (   λ   )           =         ∑   λ     ⁢           t   1     _     ⁡     (   λ   )       ⁢         t   3     _     ⁡     (   λ   )           =   0         ⁢     
     ⁢         ∑   λ     ⁢       [         t   1     _     ⁡     (   λ   )       ]     2       =         ∑   λ     ⁢       [         t   2     _     ⁡     (   λ   )       ]     2       =         ∑   λ     ⁢       [         t   3     _     ⁡     (   λ   )       ]     2       =   K                 (   31   )               
where the sums are taken over a discrete set of the λ values. The constant K can be different than in (30).
 
     One orthonormal system, DEF, is described in the aforementioned U.S. patent application Ser. No. 11/432,221. DEF can be defined as a linear transformation of the 1931 CIE XYZ color coordinate system for a 2 o  field as follows: 
                     [         D           E           F         ]     =       A     XYZ   -   DEF       ⁡     [         X           Y           Z         ]               (   32   )               
where:
 
                     A     XYZ   -   DEF       =     [         0.205306       0.712507       0.467031           1.853667         -   1.279659           -   0.442859               -   0.365451         1.011998         -   0.610425           ]             (   33   )               
The DEF system&#39;s CMF&#39;s  d (λ), ē(λ),  ƒ (λ) corresponding to the respective coordinates D, E, F can therefore be obtained from the XYZ CMF&#39;s  x (λ),  y (λ),  z (λ) corresponding to the respective coordinates X, Y, Z using the matrix A XYZ-DEF :
 
     
       
         
           
             
               [ 
               
                 
                   
                     
                       
                         d 
                         _ 
                       
                       ⁡ 
                       
                         ( 
                         λ 
                         ) 
                       
                     
                   
                 
                 
                   
                     
                       
                         e 
                         _ 
                       
                       ⁡ 
                       
                         ( 
                         λ 
                         ) 
                       
                     
                   
                 
                 
                   
                     
                       
                         f 
                         _ 
                       
                       ⁡ 
                       
                         ( 
                         λ 
                         ) 
                       
                     
                   
                 
               
               ] 
             
             = 
             
               
                 A 
                 
                   XYZ 
                   - 
                   DEF 
                 
               
               ⁡ 
               
                 [ 
                 
                   
                     
                       
                         
                           x 
                           _ 
                         
                         ⁡ 
                         
                           ( 
                           λ 
                           ) 
                         
                       
                     
                   
                   
                     
                       
                         
                           y 
                           _ 
                         
                         ⁡ 
                         
                           ( 
                           λ 
                           ) 
                         
                       
                     
                   
                   
                     
                       
                         
                           z 
                           _ 
                         
                         ⁢ 
                         
                           ( 
                           λ 
                           ) 
                         
                       
                     
                   
                 
                 ] 
               
             
           
         
       
     
     The D axis ( FIG. 5 ) of the DEF system represents multiples of the CIE D 65  white color standard. Thus, W can be chosen as parallel to the D axis. The F axis represents the monochromatic red color with λ=700 nm. The visible gamut is a non-circular cone with the vertex at the origin O, extending upward from the origin. The source gamut  110  ( FIG. 6 ) can be the entire visible gamut or some other gamut. For example, the source gamut may include infrared, ultraviolet, X-ray, or other colors detectable by a suitable camera. 
     Also described in the aforementioned U.S. patent application Ser. No. 11/432,221 and illustrated in  FIG. 5  is a spherical coordinate system BCH (Brightness, Chroma, Hue) based on DEF. For any color S=(D,E,F), its BCH coordinates are:
 
 B=√ {square root over ( D   2   +E   2   +F   2 )}=| S| 
 
     C (“chroma”) is the angle between the vector S and the D axis (and hence between S and W); 
     H (“hue”) is the angle between (i) the orthogonal projection S EF  of the vector S on the EF plane and (ii) the E axis. 
     The BCH coordinate system is convenient for some embodiments of (20)-(28.4). 
     In some embodiments ( FIG. 7 ), for each color S outside of gamut  120  and such that S Bmax (S) is not zero (as in (17)), S′ is obtained according to one or more of formulae (20)-(28.4). Hence, the hue H is unchanged. 
     This mapping can also be performed using suitable α and β functions as in  FIG. 3A  and equation (5). It is clear from the geometry of  FIG. 7  that:
 
|α( S ) S|=|S ′|sin  C′ /sin  C    (34)
 
and hence
 
                     α   ⁡     (   S   )       =              S   ′          ⁢           ⁢   sin   ⁢           ⁢     C   ′              S        ⁢           ⁢   sin   ⁢           ⁢   C               (   35   )               
Using the sine theorem for the triangle formed by the D axis, the S′ vector, and the line parallel to S and passing through the end of S′, we obtain:
 
                        β   ⁡     (   S   )       ⁢   W            sin   ⁡     (     C   -     C   ′       )         =            S   ′            sin   ⁢           ⁢   C             
and therefore
 
               β   ⁡     (   S   )       =              S   ′          ⁢           ⁢     sin   ⁡     (     C   -     C   ′       )                W        ⁢           ⁢   sin   ⁢           ⁢   C             
Denoting now α(k)=α(kS Bmax ) and β(k)=β(kS Bmax ) as in (12), and assuming that B′=|S′| changes slowly with respect to B=|S| and hence with respect to k=|S|/|S Bmax (S)|, and further noting that S Bmax (S) and sin C are independent of k, we see from (35) that
 
α( k ) k≈c   1 ×sin  C′ 
 
where c 1  is a positive constant. For small C′, sin C′≈C′, so
 
 C′≈c   2 ×α( k ) k  
 
where c 2  is a positive constant. If k=1, then S′=S in the gamut clipping case, and hence C′=C. Further (see (13C)), α(1)=1. Therefore, c 2 =1 for small C. If α(k) is as in (14) for example, then C′ is roughly as in (27) at least for small C.
 
     Turning now to step  410  ( FIG. 4 ), let us denote the input colors as S in , the colors output by step  410  as S out , and the output of step  420  as S′. The subscript “in” will be used for the S in  coordinates, e.g. S in =(B in ,C in ,H in ). The subscript “out” will be used for the S out  coordinates. The apostrophe will be used for the S′ coordinates, e.g. S′=(B′,C′,H′). 
     In some embodiments, step  410  involves rotating each vector S in  that does not satisfy (17), without changing the hue H and without changing the brightness B. See  FIG. 8 . The rotation is therefore performed in the plane containing S in  and its projection S EF . If target gamut  120  contains vectors with a non-zero chroma (C) for this hue value, let C t-max (H) denote the maximum chroma. In  FIG. 8 , the target gamut is a circular cone symmetric with respect to the D axis, so C t-max (H) is constant (i.e. independent of H). Other embodiments have non-constant C t-max (R). In  FIG. 8 , for each hue H, the target gamut  120  contains a non-zero vector with chroma equal to C t-max (R). If such a vector does not exist for some H, i.e. if the maximum chroma is reached only for the zero vector, then we can set C t-max (H) to a slightly smaller positive value for which a non-zero vector exists in the target gamut. 
     Step  410  maps C in  into C out  according to some function ƒ:
 
 C   out =ƒ( C   in   ,H ) such that  C   out   &lt;C   t-max ( H )   (36)
 
S out  satisfies (17).  FIG. 9  illustrates some possible mappings ƒ. Three mappings are illustrated. The mapping ƒ 1  is clipping:
 
 C   out   =C   in  if  C   in   &lt;C   t-max ( H )
 
 C   out   =C   t-max ( H ) if  C   in   ≧C   t-max ( H )   (37)
 
The mapping ƒ 2  is linear compression:
 
 C   out   =C   in   ×C   t-max ( H )/ C   in-max ( H )   (38)
 
where C in-max (H) is the maximum saturation for the hue H in the source gamut. C in-max (H)≦C t-max (R). The mapping ƒ 3  is some function between ƒ 2  and ƒ 1 . Other mappings are also possible.
 
     Combining (36) with (20)-(28.4), i.e. combining the steps  410  and  420 , we obtain for some embodiments:
 
 C ′=φ 2 ( B   in   ,C   in   ,H   in )   (39)
 
where for fixed C in  and H in :
 
φ 2 (B in ,C in ,H in )→0 as B in →∞  (40)
 
and/or
 
     φ 2 (B in ,C in ,H in ) is a decreasing function of B in  at least when B in  is sufficiently large, i.e. larger than the maximum brightness B max (ƒ(C in ,H in ),H in ) in the target gamut for hue H in  and saturation ƒ(C in ,H in ). The function φ 2 (B in ,C in ,H in ) is possibly strictly decreasing in B in  for at least some values of B in &gt;
 
B max (ƒ(C in ,H in ),H in )   (41)
 
The function φ 2  can be equal to either φ or φ 1 . In some embodiments, φ 2 (B in ,C in ,H in ) is constant in B in  if C in  and H in  are fixed and B in &lt;B max (ƒ(C in ,H in ),H in ) because step  410  maps the color (B in ,C in ,H in ) into the target gamut in this case and step  420  makes no further changes to the color.
 
     In some embodiments, S′ is obtained as follows for each S in  outside of target gamut  420 : 
     H′=H in    
     C′ as in (39)-(41) 
     B′=min(B in ,B max (C′,H in )) where B max (C′,H in ) is the maximum brightness in the target gamut for the chroma C′ and saturation H in . 
     Combining (36) with (27), we obtain for some embodiments:
 
 C ′=ƒ( C   in   ,H   in )/ B   in   p   *B   max (ƒ( C   in   ,H   in ), H   in ) p    (42)
 
or, denoting ƒ(C in ,H in )*B max (ƒ(C in ,H in ),H in ) p  as simply g(C in ,H in ):
 
 C′=g ( C   in,   H   in )/ B   in   p    (43)
 
where p is independent of B in . In some embodiments, p is also independent of C in  and/or H in . In some embodiments, p satisfies (16). S′ is then obtained by setting H′=H in  and B′=min(B in ,B max (C′,H in )).
 
     Combining (36) with (5), (6), (7A), (7B), we obtain for some embodiments:
 
 S ′=α( S   in ) S   in +β( S   in ) W  
 
where for a fixed S in  and k→∞:
 
α(kS in )kS in +β(kS in )W→β 0 W   (44)
 
i.e.
 
α(kS in )k→0   (45A)
 
β(kS in )→β 0    (45B)
 
     Combining (36) with (9A), (9B), we obtain for some embodiments that for all ordered pairs (k 1 ,k 2 ), k 1 &lt;k 2 , of positive numbers such that k 1 S in  and k 2 S in  are in the source gamut but outside of the target gamut, the following conditions hold true:
 
α( k   1   S   in ) k   1 ≧α( k   2   S   in ) k   2 , and
 
α( k   1   S   in ) k   1 &gt;α( k   2   S   in ) k   2  for at least one pair ( k   1   ,k   2 );   (46A)
 
β( k   1   S   in )≦β( k   2   S   in ), and
 
β( k   1   S   in ) k   1 &lt;β( k   2   S   in ) for at least one pair ( k   1   ,k   2 ).   (46B)
 
In some embodiments, conditions (46A), (46B) hold for all ordered pairs (k 1 ,k 2 ), k 1 &lt;k 2 , of positive numbers such k 2 S in  is in the source gamut but outside of the target gamut (i.e. k 1 S in  can be inside the target gamut).
 
     In some embodiments, the orthonormality conditions (30) or (31) are replaced with quasi-orthonormality conditions, i.e. the equations (30) or (31) hold only approximately. More particularly, CMF&#39;s  t 1   (λ),  t 2   (λ),  t 3   (λ) will be called herein quasi-orthonormal with an error at most ε if they satisfy the following conditions:
     1. each of ∫  t 1   (λ)  t 2   (λ)dλ, ∫  t 1   (λ)  t 3   (λ)dλ, ∫  t 2   (λ)  t 3   (λ)dλ is in the interval [−ε,ε], and   2. each of ∫[  t 1   (λ)] 2  dλ, ∫[  t 2   (λ)] 2 dλ, ∫[  t 3   (λ)] 2 dλ is in the interval [K−ε,K+ε],
 
for positive constants K and ε. In some embodiments, ε is 0.3K, or 0.1K, or some other value at most 0.3K, or some other value. Alternatively, the CMF&#39;s will be called quasi-orthonormal with an error at most ε if they satisfy the following conditions:
   

               1.   ⁢           ⁢   each   ⁢           ⁢   of   ⁢           ⁢       ∑   λ     ⁢         t   1     _     ⁢           ⁢     (   λ   )     ⁢         t   2     _     ⁡     (   λ   )             ,       ∑   λ     ⁢           t   1     _     ⁡     (   λ   )       ⁢         t   3     _     ⁡     (   λ   )           ,     
     ⁢           ⁢       ∑   λ     ⁢           t   2     _     ⁡     (   λ   )       ⁢         t   3     _     ⁡     (   λ   )       ⁢           ⁢   is   ⁢           ⁢   in   ⁢           ⁢   the   ⁢           ⁢     interval   ⁢           [       -   ɛ     ,   ɛ     ]         ,     
     ⁢   and                   2.   ⁢           ⁢   each   ⁢           ⁢   of   ⁢           ⁢       ∑   λ     ⁢       [         t   1     _     ⁢           ⁢     (   λ   )       ]     2         ,       ∑   λ     ⁢       [         t   2     _     ⁡     (   λ   )       ]     2       ,     
     ⁢           ⁢       ∑   λ     ⁢         [         t   3     _     ⁡     (   λ   )       ]     2     ⁢           ⁢   is   ⁢           ⁢   in   ⁢           ⁢   the   ⁢           ⁢     interval   ⁢           [       K   -   ɛ     ,     K   +   ɛ       ]           ⁢                 
for positive constants K and ε. In some embodiments, ε is 0.3K, or 0.1K, or some other value at most 0.3K, or some other value. Orthonormal functions are quasi-orthonormal, but the reverse is not always true. If ε=0.1K, the functions will be called 90%-orthonormal. More generally, the functions will be called n%-orthonormal if ε is (100−n)% of K. For example, for 70%-orthonormality, ε=0.3K.
 
     The invention is not limited to the embodiments described above. Some embodiments include a computer-implemented method for mapping image data into a target gamut, the image data representing an image which comprises one or more colors S each of which satisfies a condition (G1) which is as follows: 
     (G1) S is outside of the target gamut but a color cS is inside the target gamut for at least one positive c. 
     The method comprises at least the following operation (and may include additional operations not recited below, the term “comprises” being synonymous to “includes”): for each color S satisfying the condition (G1), a color S′ is generated to map the color S into the color S′, wherein
 
 S ′=α( S ) S +β( S ) W  
 
wherein the plus operation “+” denotes addition of colors in the sense that the color S′ can be produced by combining light sources producing the individual colors α(S)S, β(S)W (equivalently, the “+” operation is addition in a linear color coordinate system). In this equation:
 
     (i) S′ is in the target gamut, or at least in some neighborhood of the target gamut, i.e. in an “ε G -neighborhood” of the target gamut. In other words, a color
 
(1−ε G )S′
 
is in the target gamut, where ε G  is a predefined non-negative constant independent of S and not exceeding 1/10, or 1/20, or even a smaller bound. Further:
 
     (ii) W is a predefined color independent of S, where W is not zero in a linear color coordinate system, and where uW is inside the target gamut for at least one u&gt;0. W can be a white color. Further, 
     (iii) α(S) and β(S) are non-negative, and satisfy one or both of conditions (A) and (B), the conditions (A) and (B) being as follows: 
     (A) when k&gt;0 and k→∞, then 
     α(kS)k→0 and 
     β(kS)→β 0 , 
     where β 0  is a positive number independent of S; 
     (B) for all pairs (k 1 ,k 2 ) of positive numbers which satisfy both conditions (B1) and (B2) below, α(•) and β(•) satisfy (B3) and (B4) below: 
     (B1) pair (k 1 ,k 2 ) is ordered, such that k 1 &lt;k 2 . Alternatively, (k 1 ,k 2 ) may or may not be ordered but is “ε M -ordered”, i.e. k 2 &gt;k 1 (1+ε M ) for some predefined non-negative number ε M  independent of S. In some embodiments, ε M  does not exceed 1/10, or 1/20, or even a smaller bound. 
     (B2) k 1 S and k 2 S are outside of the target gamut. 
     (B3) β(k 2 S)≧β(k 1 S), and 
     β(k 2 S)&gt;β(k 1 S) for at least one pair (k 1 ,k 2 ) satisfying (B1) and (B2). 
     (B4) α(k 2 S)k 2 ≦α(k 1 S)k 1 , and 
     α(k 2 S)k 2 &lt;α(k 1 S)k 1  for at least one pair (k 1 ,k 2 ) satisfying (B1) and (B2). 
     In some embodiments, the mapping operation is also performed for each color S which is represented by the image data but does not satisfy the condition (G1). 
     In some embodiments, the mapping operation corresponds to just step  420  or to a combination of steps  410 ,  420 . Thus, in some embodiments, the mapping operation is step  420  and is preceded by another operation in which for each color S in  which is outside of the target gamut and does not satisfy the condition (G1), is replaced with a color S which satisfies the condition (G1). 
     In some embodiments, S′ is on the target boundary, or at least in an ε G -neighborhood of the target gamut&#39;s boundary, i.e. kS′ is outside of the target gamut for each k&gt;1+ε G . 
     In some embodiments, 0&lt;α(k)≦1/k 1+p  and 1&gt;β(k)/β 0 ≧1−1/k q  when k≧1, wherein α(k) and β(k) are functions such that for each said color S satisfying the condition (G1),
 
α( k )=α( kS   Bmax ( S )) and β( k )=β( kS   Bmax ( S ))
 
where S Bmax (S) is colinear to S and is on the target gamut&#39;s boundary, where p and q are numbers which are constant with respect to k.
 
     Some embodiments include a computer-implemented method for mapping image data into a target gamut, the image data representing an image which comprises one or more colors S each of which satisfies the condition (G1), the method comprising, for each color S satisfying the condition (G1), generating a color S′ to map the color S into the color S′, wherein
 
 S ′=α( S ) S +β( S ) W  
 
wherein:
 
     (i) S′ is in an ε G -neighborhood of the target gamut&#39;s boundary, where ε G  is a predefined non-negative constant independent of S and not exceeding 1/10 or 1/20 or some other bound; 
     (ii) W is a predefined color independent of S, where W is not zero in a linear color coordinate system, and where uW is inside the target gamut for at least one u&gt;0; 
     (iii) α(S) and β(S) are non-negative, and β(•) satisfies one or both of conditions (A) and (B), the conditions (A) and (B) being as follows: 
     (A) when k&gt;0 and k→∞ 
     β(kS)→β 0 , where β 0  is a positive number independent of S; 
     (B) for all pairs (k 1 ,k 2 ) of positive numbers which satisfy both conditions (B1) and (B2) below β(•) satisfies (B3) below, wherein the condition (B1) is specified for a predefined non-negative number ε M  independent of S and not exceeding 1/10 or 1/20 or some other bound: 
     (B1) pair (k 1 ,k 2 ) is ε M -ordered, i.e. k 2 &gt;k 1 (1+ε M ); 
     (B2) k 1 S and k 2 S are outside of the target gamut; 
     (B3) β(k 2 S)≧β(k 1 S), and 
     β(k 2 S)&gt;β(k 1 S) for at least one pair (k 1 ,k 2 ) satisfying (B1) and (B 2 ). 
     In some embodiments, the mapping operation is also performed for each color S which is represented by the image data but does not satisfy the condition (G1). 
     Some embodiments include a computer-implemented method for mapping input image data representing an image into a target gamut, the image data representing an image which comprises one or more colors S each of which satisfies the condition (G1), the method comprising: for each color vector S specifying a color satisfying the condition (G1), performing a mapping operation generating a color vector S′ to map S into S′, wherein the vector S′ forms an angle C′ with a predefined non-zero color vector W in an ε-orthonormal linear color coordinate system where ε is at least 70%, or at least 90%, or at least some other number, the color vector W being independent of S and such that uW is inside the target gamut for at least one u&gt;0, wherein
 
 C ′=Φ( S )
 
wherein:
 
     (i) S′ is in an ε G -neighborhood of the target gamut, where ε G  is a predefined non-negative constant independent of S and not exceeding 1/10 or 1/20 or some other bound; 
     (ii) Φ(•) is a predefined function satisfying one or both of conditions (A) and (B), the conditions (A) and (B) being as follows: 
     (A) when k&gt;0 and k→∞, then 
     Φ(kS)→0; 
     (B) for all pairs (k 1 ,k 2 ) of positive numbers which satisfy both conditions (B1) and (B2) below, Φ satisfies (B3) below, wherein the condition (B1) is specified for a predefined non-negative number ε M  independent of S and not exceeding 1/10 or 1/20 or some other bound: 
     (B1) pair (k 1 ,k 2 ) is ε M -ordered; 
     (B2) k 1 S and k 2 S are outside of the target gamut; 
     (B3) Φ(k 2 S)≦Φ(k 1 S), and 
     Φ(k 2 S)&lt;Φ(k 1 S) for at least one pair (k 1 ,k 2 ) satisfying (B1) and (B2). 
     For example, φ can be any of the functions φ, φ 1 , φ 2  discussed above in connection with (20)-(41). 
     In some embodiments, the mapping operation is also performed for each color S which is represented by the image data but does not satisfy the condition (G1). 
     In some embodiments,
 
0&lt;Φ( S )≦ C/k   p  
 
where C is the angle between S and W, and k is such that
 
 S=kS   Bmax ( S )
 
where S Bmax (S) is colinear to S and is on the boundary of the target gamut, where p is a positive number which is constant with respect to k.
 
     The invention provides a computer system programmed to perform any one or more of the methods described above, and one or more computer readable media comprising one or more computer instructions operable to cause a computer system to perform any one or more of the methods described above. The methods can be performed by a combination of software programmed parts and/or hardwired circuitry. The invention includes software products (computer program products) for programming computers to perform one or more of the gamut mapping operations described above. The invention includes transmitting one or more computer instructions over a network, wherein the one or more computer instructions are operable to cause a computer system to perform any one or more of the methods described above. In particular, the invention includes downloading such instructions over a network. The invention includes electromagnetic signals carrying such programs and instructions. 
     The invention is not limited to the embodiments described above. For example, the target gamut  120  does not have to be the gamut of display device  240  but can be some intermediate gamut. Thus, if device  240  is a printer, gamut  120  can be an RGB gamut which can be conveniently converted to the printer&#39;s gamut. W does not have to be any particular white color standard, and may be a non-white color. Other embodiments and variations are within the scope of the invention, as defined by the appended claims. 
     
       
         
           
               
             
               
                 APPENDIX A 
               
               
                   
               
             
            
               
                 //Gamut mapping for linear RGB system. Target gamut is the set of 
               
               
                 // all colors with RGB coordinates from 0 to 1 inclusive. 
               
               
                 // Source gamut has only non-negative RGB coordinates 
               
               
                 void run( _cmss_vector &amp;vector ) const  //vector=S=(R,G,B) 
               
               
                 { 
               
               
                   float _max = 0; // _max = max (R,G,B) = k 
               
               
                   int _pos; 
               
               
                   for( _pos = 0; _pos &lt; 3; _pos++ ) 
               
               
                   { 
               
               
                   if( _max &lt; vector [_pos] ) 
               
               
                   { 
               
               
                   _max = vector [_pos]; 
               
               
                   } 
               
               
                   } 
               
               
                   if( _max &gt; 1.0f ) //if S is outside target gamut 
               
               
                   { 
               
               
                 // Angle decreasing; here p=1/2 
               
               
                   float _coeff = sqrtf( _max ); //_coeff=k p   
               
               
                 // White addition 
               
               
                   float _white = ( _coeff − 1.0f ) * _max; //_white=k(k p −1) 
               
               
                   for( _pos = 0; _pos &lt; 3; _pos++ ) 
               
               
                   { 
               
               
                   vector[ _pos ] = ( vector[ _pos ] + _white )/( _coeff * _max ); 
               
               
                                    //vector=S′ as in (18) 
               
               
                   } 
               
               
                   } 
               
               
                 }