home *** CD-ROM | disk | FTP | other *** search
/ Avalon - 3D Objects & Resources / Avalon.iso / faqs / colorspa.cfq < prev    next >
Internet Message Format  |  1995-01-01  |  40KB

  1. Path: bloom-beacon.mit.edu!senator-bedfellow.mit.edu!turing!bourgin
  2. From: bourgin@turing.imag.fr (David Bourgin (The best player).)
  3. Newsgroups: comp.graphics,sci.image.processing,comp.answers,sci.answers,news.answers
  4. Subject: Color space FAQ
  5. Supersedes: <graphics/colorspace-faq_789225802@rtfm.mit.edu>
  6. Followup-To: poster
  7. Date: 11 Jan 1995 16:33:20 GMT
  8. Organization: ufrima
  9. Lines: 769
  10. Sender: david.bourgin@ufrima.imag.fr (David Bourgin)
  11. Approved: news-answers-request@MIT.EDU
  12. Distribution: world
  13. Expires: 1 Feb 1995 16:28:42 GMT
  14. Message-ID: <graphics/colorspace-faq_789841722@rtfm.mit.edu>
  15. Reply-To: bourgin <david.bourgin@ufrima.imag.fr>
  16. NNTP-Posting-Host: bloom-picayune.mit.edu
  17. Summary: This posting contains a list of Frequently Asked
  18.          Questions (and their answers) about colors and color spaces.
  19.          It provides an extension to the short 4 and 5 items
  20.          of comp.graphics FAQ. Read item 1 for more details.
  21.          A copy of this document is available by anonymous ftp in
  22.          rtfm.mit.edu: /pub/usenet/news.answers/graphics/colorspace-faq
  23. Keywords: Color space FAQ
  24. X-Last-Updated: 1995/01/06
  25. Originator: faqserv@bloom-picayune.MIT.EDU
  26. Xref: bloom-beacon.mit.edu comp.graphics:37349 sci.image.processing:11126 comp.answers:9435 sci.answers:2007 news.answers:32871
  27.  
  28. Archive-name: graphics/colorspace-faq
  29. Posting-Frequency: Weekly
  30. Last-modified: 6/1/95
  31.  
  32. ###########################################################
  33. Color spaces FAQ - David Bourgin
  34. Date: 6/1/95 (minor modifications, especially item 5.6, before major changes)
  35. Last update: 26/9/94
  36.  
  37. ---------------------------
  38.      Table of contents
  39. ---------------------------
  40. 1 - Purpose of this FAQ
  41. 2 - What is a color?
  42. 3 - What is an image based on a color look-up table?
  43. 4 - What is this gamma component?
  44. 5 - Color space conversions
  45. 5.1 - RGB, CMY, and CMYK
  46. 5.2 - HSL, HSV
  47. 5.3 - CIE XYZ and gray level (monochrome included) pictures
  48. 5.4 - CIE Luv
  49. 5.5 - CIE Lab and LCH
  50. 5.6 - The associated standards: YUV, YIQ, and YCbCr
  51. 5.7 - SMPTE-C RGB
  52. 5.8 - SMPTE-240M YPbPr (HD televisions)
  53. 5.9 - Xerox Corporation YES
  54. 5.10- Kodak Photo CD YCC
  55. 6 - References
  56. 7 - Comments and thanks
  57.  
  58. ---------------------------
  59.           Contents
  60. ---------------------------
  61. 1 - Purpose of this FAQ
  62.  
  63.     I did a (too) long period of research in the video domain (video cards,
  64.     image file formats, and so on) and I've decided to provide to all people
  65.     who need some informations about that.
  66.     I aim to cover a part of the Frequently Asked Questions (FAQ) in the video
  67.     works, it means to provide some (useful?) informations about the colors,
  68.     and more especially about color spaces. If you have some informations
  69.     to ask/add to this document, please read item 7.
  70.  
  71. 2 - What is a color?
  72.  
  73.     A color is defined from human eye capabilities. If you consider a normal
  74.     human being, his vision of a color will be the same as for another normal
  75.     being. Of course, to show any colored information, you need a definition
  76.     (or a model, to use the right word). There are two kinds of color
  77.     definitions:
  78.     - The device-dependent: These definitions are more or less accurate.
  79.     It means that when you display on such a device one color
  80.     with the particular definition, you get a rendering but when you display
  81.     on an other device the same color, you get another rendering (more or less
  82.     dramatically different).
  83.     - The device-independent: This means that the model is accurate and you
  84.     must adjust your output device to get the same answer. This model is based
  85.     on some institute works (curves of colors and associated values).
  86.  
  87.     From an absolute point of view, it means from a human visual sensation, a
  88.     color could be defined by:
  89.     - Hue: The perception of the nuance. It is the perception of what you see
  90.     in a rainbow.
  91.     - Colorfulness: The perception of saturation, vividness, purity of a color.
  92.     You can go from a sky blue to a deep blue by changing this component.
  93.     - Luminancy: The perception of an area to exhibit more or less light. It is
  94.     also called brightness. You can blurry or enhance an image by modifying
  95.     this component.
  96.  
  97.     As you see above, I describe a color with three parameters. All the
  98.     students in maths are quickly going to say that the easier representation
  99.     of this stuff is a space, a tri-dimensional space with the previous
  100.     presentation. And I totally agree with that. That is why we often call
  101.     'color space' a particular model of colors.
  102.     With a color space, colors can be interpreted with response curves. While
  103.     in a spectral representation of the wave lengths you have a range from
  104.     infra red to ultra violet, in a normalized color space, we consider a range
  105.     from black to white. All the pros use the internationally recognized
  106.     standard CIE 1931 Standard Calorimetric Observer. This standard defines
  107.     color curves (color matching functions) based on tristimulus values of
  108.     human capabilities and conditions of view (enlightments, ...).
  109.     See item 5.3.
  110.     The CIE (Comission Internationale de l'Eclairage) defined two very useful
  111.     references for the chromacity of the white point:
  112.     - D50 white used as reference for reflective copy
  113.     - D65 white used as reference for emissive devices
  114.     - D90 white used as an approximative reference for phosphors of a monitor
  115.     Dxx means a temperature at about xx00 Kelvins. Example, D65 is given
  116.     at 6504 K.
  117.     Those temperatures define the white points of particular systems. A white
  118.     point of a system is the color at which all three of the tristimuli (RGB,
  119.     for instance) are equal to each other. Being that a white point is
  120.     achromatic (=it has no color), we can define some temperatures associated
  121.     to the white references, in order we get a standard.
  122.  
  123. 3 - What is an image based on a color look-up table?
  124.  
  125.     All of the pictures don't use the full color space. That's why we often
  126.     use another scheme to improve the encoding of the picture (especially
  127.     to get a file which takes less space). To do so, you have two
  128.     possibilities:
  129.     - You reduce the bits/sample. It means you use less bits for each component
  130.     that describe the color. The colors are described as direct colors, it
  131.     means that all the pixels (or vectors, for vectorial descriptions) are
  132.     directly stored with the full components. For example, with a RGB (see
  133.     item 5.1 to know what RGB is) bitmapped image with a width of 5 pixels and
  134.     a height of 8 pixels, you have:
  135.     (R11,G11,B11) (R12,G12,B12) (R13,G13,B13) (R14,G14,B14) (R15,G15,B15)
  136.     (R21,G21,B21) (R22,G22,B22) (R23,G23,B23) (R24,G24,B24) (R25,G25,B25)
  137.     (R31,G31,B31) (R32,G32,B32) (R33,G33,B33) (R34,G34,B34) (R35,G35,B35)
  138.     (R41,G41,B41) (R42,G42,B42) (R43,G43,B43) (R44,G44,B44) (R45,G45,B45)
  139.     (R51,G51,B51) (R52,G52,B52) (R53,G53,B53) (R54,G54,B54) (R55,G55,B55)
  140.     (R61,G61,B61) (R62,G62,B62) (R63,G63,B63) (R64,G64,B64) (R65,G65,B65)
  141.     (R71,G71,B71) (R72,G72,B72) (R73,G73,B73) (R74,G74,B74) (R75,G75,B75)
  142.     (R81,G81,B81) (R82,G82,B82) (R83,G83,B83) (R84,G84,B84) (R85,G85,B85)
  143.     where Ryx, Gyx, Byx are respectively the Red, Green, and Blue components
  144.     you need to render a color for the pixel located at (x;y).
  145.     - You use a palette. In this case, all the colors are stored in a table
  146.     called a palette and the components of all the colors for each pixel (or
  147.     the vector data) are removed to be replaced with a number. This number is
  148.     an index in the palette. It explains why we call the palette, a color
  149.     look-up table.
  150.  
  151. 4 - What is this gamma component?
  152.  
  153.     An important notion in image processing comes from physical properties of
  154.     output devices. We often have to correct the colors of an image to get a
  155.     better rendering, i.e. to sharpen or blurry the picture. With the monitors,
  156.     this is really true because input signals - proportional to the voltage -
  157.     don't output a linear answer curve. So, a normal monitor follows an answer
  158.     curve with an exponential law and a monitor based on LCDs follows an "S"
  159.     curve with a vicious hook near black and a slow roll-off near white.
  160.     The adapted correction functions are called gamma correction.
  161.     We will keep in mind that most of software propose a displaying correction
  162.     based on a power law relationship. It is given as:
  163.  
  164.     Red  = a*(Red'^gamma)+b
  165.     Green= a*(Green'^gamma)+b
  166.     Blue = a*(Blue'^gamma)+b
  167.  
  168.     where Red', Green', and Blue' are the values of volts in input, i.e the
  169.     values of each primary component for each pixel in the picture you have,
  170.     Red, Green, and Blue are the adapted light components for your device,
  171.     a and b are linear transformations to adapt the law relationship, and
  172.     gamma is the correction factor.
  173.     Be care: a, b, and gamma are usually real constant for *all* pixels.
  174.     Note that the software set up a to 1 and b to 0...
  175.     For CRTCs gray level drawing pictures, gamma is usually within the range of
  176.     [1.2;1.8] but for true color pictures, the number is usually within the
  177.     range of [1.8;2.2]. Normal display devices have an usual 2.35 (+/- 0.1)
  178.     gamma value.
  179.     I assume in the previous relationships that Red, Green, and Blue are
  180.     given within the range of [0;1]. But if they were as well positive as
  181.     negative, you could have, for *example*:
  182.     Red' = -0.5
  183.     and Red = -(abs(Red')^gamma) = -(0.5^gamma)
  184.  
  185.     In some image file formats or in graphics applications in general, you
  186.     need sometimes some other kinds of correction. These corrections provide
  187.     some specific processings rather than true gamma correction curves.
  188.     This is often the case, for examples, with the printing devices or
  189.     in animation. In the first case, it is interesting to specify that a color
  190.     must be re-affected in order you get a better rendering, as we see it later
  191.     in CMYK item. In the second case, some animations can need an extra
  192.     component associated to each pixel. This component can be, for example,
  193.     used as a transparency mask. We *improperly* call this extra component
  194.     gamma correction.
  195.  
  196. 5 - Color space conversions
  197.  
  198.     Except an historical point of view, most of you are - I hope - interested
  199.     in color spaces to make renderings and, if possible, on your favorite
  200.     computer. Most of computers display in the RGB color space but you may need
  201.     sometimes the CMYK color space for printing, the YCbCr or CIE Lab to
  202.     compress with JPEG scheme, and so on. That is why we are going to see,
  203.     from here, what are all these color spaces and how to convert them from one
  204.     to another (and primary from one to RGB and vice-versa, this was my purpose
  205.     when I started this FAQ).
  206.  
  207.     I provide the color space conversions for programmers. The specialists
  208.     don't need most of these infos or they can give a glance to all the stuff
  209.     and read carefully the item 6. Many of the conversions are based on linear
  210.     functions. The best example is given in item 5.3. These conversions can
  211.     be seen in matrices. A matrix is in mathematics an array of values. And to
  212.     go from one to another space color, you just make a matrix inversion.
  213.     E.g. RGB -> CIE XYZrec601-1 (C illuminant) provides the following matrix
  214.     of numbers (see item 5.3):
  215.     |  0.607   0.174   0.200 |
  216.     |  0.299   0.587   0.114 |
  217.     |  0.000   0.066   1.116 |
  218.     and CIE XYZrec601-1 (C illuminant) -> RGB provides the following matrix:
  219.     |  1.910  -0.532  -0.288 |
  220.     | -0.985   1.999  -0.028 |
  221.     |  0.058  -0.118   0.898 |
  222.     These two matrices are the (approximative) inversion of each other.
  223.     If you are a beginner in this mathematical stuff, skip the previous
  224.     explainations, and just use the result...
  225.  
  226. 5.1 - RGB, CMY, and CMYK
  227.  
  228.     The most popular color spaces are RGB and CMY. These two acronyms stand
  229.     for Red-Green-Blue and Cyan-Magenta-Yellow. They're device-dependent.
  230.     The first is normally used on monitors, the second on printers.
  231.     RGB are called primary colors because a color is produced by adding
  232.     the three components, red, green, and blue.
  233.     CMY is called secondary colors because to describe a color in this color
  234.     space, you consider the reflecting result. So, you become like a painter
  235.     who puts some (secondary) colors on a sheet of paper. A *white* light is
  236.     received on the sheet. You have to keep in mind that white in RGB is all
  237.     components set up to their maximum values. The white color is reflected on
  238.     the sheet so that the components of white (primary colors) are subtracted
  239.     from the components of the 'painting' (secondary colors). Such reflecting
  240.     colors are called secondary colors, for the previous reasons...
  241.  
  242.     RGB -> CMY                | CMY -> RGB
  243.     Red   = 1-Cyan    (0<=Cyan<=1)    | Cyan    = 1-Red (0<=Red<=1)
  244.     Green = 1-Magenta    (0<=Magenta<=1)    | Magenta = 1-Green (0<=Green<=1)
  245.     Blue  = 1-Yellow    (0<=Yellow<=1)    | Yellow  = 1-Blue (0<=Blue<=1)
  246.  
  247.     On printer devices, a component of black is added to the CMY, and the
  248.     second color space is then called CMYK (Cyan-Magenta-Yellow-blacK). This
  249.     component is actually used because cyan, magenta, and yellow set up to the
  250.     maximum should produce a black color. (The RGB components of the white are
  251.     completly substracted from the CMY components.) But the resulting color
  252.     isn't physically a 'true' black. The most usual definition for the CMYK
  253.     color space is given below:
  254.     CMY -> CMYK                | CMYK -> CMY
  255.     Black=minimum(Cyan,Magenta,Yellow)    | Cyan=minimum(1,Cyan*(1-Black)+Black)
  256.     Cyan=(Cyan-Black)/(1-Black)        | Magenta=minimum(1,Magenta*(1-Black)+Black)
  257.     Magenta=(Magenta-Black)/(1-Black)    | Yellow=minimum(1,Yellow*(1-Black)+Black)
  258.     Yellow=(Yellow-Black)/(1-Black)    |
  259.  
  260.     RGB -> CMYK                | CMYK -> RGB
  261.     Black=minimum(1-Red,1-Green,1-Blue)    | Red=1-minimum(1,Cyan*(1-Black)+Black)
  262.     Cyan=(1-Red-Black)/(1-Black)    | Green=1-minimum(1,Magenta*(1-Black)+Black)
  263.     Magenta=(1-Green-Black)/(1-Black)    | Blue=1-minimum(1,Yellow*(1-Black)+Black)
  264.     Yellow=(1-Blue-Black)/(1-Black)    |
  265.  
  266.     Of course, I assume that C, M, Y, K, R, G, and B  have a range of [0;1].
  267.  
  268. 5.2 - HSL, HSV
  269.  
  270.     The representation of the colors in the RGB space is quite adapted for
  271.     monitors but from a human being, this is not a useful definition. To
  272.     provide a user representation in the user interfaces, we preferr the HSL
  273.     color space. The acronym stand for Hue (see definition of Hue in item 2),
  274.     Saturation (see definition of Colorfulness in item 2), and Luminosity
  275.     (see definition of Luminancy in item 2).
  276.     The HSV model can be represented by a trigonal cone, as:
  277.                  Green
  278.                   /\
  279.                 /    \    ^
  280.               /V=1 x   \   \ Hue (angle, so that Hue(Red)=0, Hue(Green)=120, and Hue(blue)=240 deg)
  281.        Blue -------------- Red
  282.             \      |     /
  283.              \     |-> Saturation (distance from the central axis)
  284.               \    |   /
  285.                \   |  /
  286.                 \  | /
  287.                  \ |/
  288.                V=0 x (Value=0 at the top of the apex and =1 at the base of the cone)
  289.     The big disadvantage of this model is the conversion. Most of publishings
  290.     (Microsoft, and Foley's "Computer Graphics: Principles and Practice",
  291.     included) give unaccurate transforms. Actually, the transforms are really
  292.     complicate, as given below:
  293.     Hue = (Alpha-arctan((Red-Luminosity)*(3^0.5)/(Green-Blue)))/(2*PI)
  294.     with { Alpha=PI/2 if Green>Blue
  295.          { Aplha=3*PI/2 if Green<Blue
  296.          { Hue=1 if Green=Blue
  297.     Saturation = (Red^2+Green^2+Blue^2-Red*Green-Red*Blue-Blue*Green)^0.5
  298.     Luminosity = (Red+Green+Blue)/3
  299.  
  300.     Note that you have to compute Luminosity *before* Hue. If not, you must
  301.     assume that Hue = (Alpha-arctan((2*Red-Green-Blue)/((Green-Blue)*(3^0.5))))/(2*PI).
  302.  
  303.     I assume that H, S, L, R, G, and B are within range of [0;1].
  304.  
  305.     Another point of view of this cone is to project the coordinates onto the
  306.     base. The 2D projection is:
  307.     Red:   (1;0)
  308.     Green: (cos(120 deg);sin(120 deg)) = (-0.5; 0.866)
  309.     Blue:  (cos(240 deg);sin(240 deg)) = (-0.5;-0.866)
  310.     Now you need intermediate coordinates:
  311.     a = Red-0.5*(Green+Blue)
  312.     b = 0.866*(Green-Blue)
  313.     Finally, you have:
  314.     Hue = arctan2(x,y)/(2*PI) ; Just one formula, always in the correct quadrant
  315.     Saturation = (x^2+y^2)^0.5
  316.     Luminosity = (Red+Green+Blue)/3
  317.     This interesting point of view was provided by Christian Steyaert
  318.     (steyaert@vvs.innet.be).
  319.  
  320.     Another model close to HSV is HSL. It's actually a double cone with black
  321.     and white points placed at the two apexes of the double cone.
  322.     I don't provide formula, but feel free to send me the formula you could
  323.     find. ;-)
  324.  
  325. 5.3 - CIE XYZ and gray level pictures
  326.  
  327.     The CIE (a committee I presented in the item 2) has defined in 1931 a
  328.     standard called CIE 1931 based on tristimuli of the Joe eye capabilities.
  329.     These tristimuli are given by three components X, Y and Z.
  330.     X, Y, and Z are respectively linked to the red, green, and blue stimulus.
  331.     These coordinates are absolute, device-independent and normalized to the
  332.     range of [0;1]. To be useful for scientists and programers, some committees
  333.     defined some relations to convert RGB to CIE XYZ and vice-versa. We saw
  334.     in item 5 that color space conversions can be expressed by using matrices.
  335.     You've got:
  336.     |Red  |      -1 |X|     |X|       |Red  |
  337.     |Green| = |M|  *|Y| and |Y| = |M|*|Green|
  338.     |Blue |         |Z|     |Z|       |Blue |
  339.     The matrix M is 3 by 3, and consists of the tristimulus values of the RGB
  340.     primaries in terms of the XYZ primaries.
  341.     To solve this system we need some more data. The first data is the color
  342.     reference we use. With the CIE standard the reference of your rendering is
  343.     the white. White point is achromatic and is defined so that Y=1, and
  344.     Red=Green=Blue. To get the white point coordinates and put it into our
  345.     previous matrix system we use the CIE xyY diagram. This diagram is a 2D
  346.     diagram (based on tristimuli in regard with the wave lengths) where you get
  347.     a color as (x;y). To transform this 2D diagram into a 3D, you have:
  348.     z=1-(x+y)
  349.     X=x*Y/y
  350.     Z=z*Y/y
  351.     (Take care on these letters because these are case sensitive. Otherwise
  352.     you'd get unaccurate results!)
  353.     From there we must consider the coordinates of the vertices in your
  354.     triangle reference. The three vertices in your triangle reference are
  355.     of course the red, the green, and the blue in CIE xyY diagram. Those colors
  356.     are "pure values", it means the chromacity coordinates of red, green, and
  357.     blue are defined in the CIE xyY diagram:
  358.     Red:   (xr; yr; zr=1-(xr+yr))
  359.     Green: (xg; yg; zg=1-(xg+yg))
  360.     Blue:  (xb; yb; zb=1-(xb+yb))
  361.     And the white is defined as:
  362.     |Xn|   |r1 g1 b1|   |Redn  |   |r1 g1 b1|   |1|
  363.     |Yn| = |r2 g2 b2| * |Greenn| = |r2 g2 b2| * |1| (1)
  364.     |Zn|   |r3 g3 b3|   |Bluen |   |r3 g3 b3|   |1|
  365.     (Don't forget that Red=Green=Blue=1 for white.)
  366.     (1) becomes:
  367.     |Xn|   |ar*xr ag*xg ab*xb|   |1|   |xr xg xb|   |ar|
  368.     |Yn| = |ar*yr ag*yg ab*yb| * |1| = |yr yg yb| * |ag| (2)
  369.     |Zn|   |ar*zr ag*zg ab*zb|   |1|   |zr zg zb|   |ab|
  370.     But Xn, Yn, and Zn are also defined as (xn;yn) from the CIE xyY diagram:
  371.     zn=1-(xn+yn)
  372.     Xn=xn*Yn/yn=xn/yn
  373.     Yn=1 (always for white!)
  374.     Zn=zn*Yn/yn=zn/yn
  375.     So (2) becomes:
  376.     |xn/yn|   |xr xg xb|   |ar|
  377.     |  1  | = |yr yg yb| * |ag| (3)
  378.     |zn/yn|   |zr zg zb|   |ab|
  379.     In this system, xn, yn, zn, xr, yr, zr, xg, yg, zg, xb, yb, and zb are all
  380.     known (from the CIE xyY diagram). You just solve it (with a HP pocket
  381.     computer, for example) and get ar, ag, and ab. So:
  382.     |X|   |xr*ar xg*ag xb*ab|   |Red  |
  383.     |Y| = |yr*ar yg*ag xb*ab| * |Green|
  384.     |Z|   |zr*ar zg*ag xb*ab|   |Blue |
  385.     Let's take some examples. The CCIR (Comite Consultatif International des
  386.     Radiocommunications) defined several recommendations. The most popular
  387.     (they shouldn't be used anymore, we will see later why) are CCIR 601-1
  388.     and CCIR 709.
  389.     The CCIR 601-1 is the old NTSC (National Television System Committee)
  390.     standard. It uses a white point called "C Illuminant". The white point
  391.     coordinates in the CIE xyY diagram are (xn;yn)=(0.310063;0.316158). The
  392.     red, green, and blue chromacity coordinates are:
  393.     Red:   xr=0.67 yr=0.33 zr=1-(xr+yr)=0.00
  394.     Green: xg=0.21 yg=0.71 zg=1-(xg+yg)=0.08
  395.     Blue:  xb=0.14 yb=0.08 zb=1-(xb+yb)=0.78
  396.     zn=1-(xn+yn)=1-(0.310063+0.316158)=0.373779
  397.     Xn=xn/yn=0.310063/0.316158=0.980722
  398.     Yn=1 (always for white)
  399.     Zn=zn/yn=0.373779/0.316158=1.182254
  400.     We introduce all that in (3) and get:
  401.     ar=0.981854
  402.     ab=0.978423
  403.     ag=1.239129
  404.     Finally, we have RGB -> CIE XYZccir601-1 (C illuminant):
  405.     |X|   |0.606881 0.173505 0.200336|   |Red  |
  406.     |Y| = |0.298912 0.586611 0.114478| * |Green|
  407.     |Z|   |0.000000 0.066097 1.116157|   |Blue |
  408.     Because I'm a programer, I preferr to round these values up or down (in
  409.     regard with the new precision) and I get:
  410.     RGB -> CIE XYZccir601-1 (C illuminant)    | CIE XYZccir601-1 (C illuminant) -> RGB
  411.     X = 0.607*Red+0.174*Green+0.200*Blue    | Red   =  1.910*X-0.532*Y-0.288*Z
  412.     Y = 0.299*Red+0.587*Green+0.114*Blue    | Green = -0.985*X+1.999*Y-0.028*Z
  413.     Z = 0.000*Red+0.066*Green+1.116*Blue    | Blue  =  0.058*X-0.118*Y+0.898*Z
  414.     The other common recommendation is the 709. The white point is D65 and have
  415.     coordinates fixed as (xn;yn)=(0.312713;0.329016). The RGB chromacity
  416.     coordinates are:
  417.     Red:   xr=0.64 yr=0.33
  418.     Green: xg=0.30 yg=0.60
  419.     Blue:  xb=0.15 yb=0.06
  420.     Finally, we have RGB -> CIE XYZccir709 (709):
  421.     |X|   |0.412411 0.357585 0.180454|   |Red  |
  422.     |Y| = |0.212649 0.715169 0.072182| * |Green|
  423.     |Z|   |0.019332 0.119195 0.950390|   |Blue |
  424.     This provides the formula to transform RGB to CIE XYZccir709 and vice-versa:
  425.     RGB -> CIE XYZccir709 (D65)            | CIE XYZccir709 (D65) -> RGB
  426.     X = 0.412*Red+0.358*Green+0.180*Blue    | Red   =  3.241*X-1.537*Y-0.499*Z
  427.     Y = 0.213*Red+0.715*Green+0.072*Blue    | Green = -0.969*X+1.876*Y+0.042*Z
  428.     Z = 0.019*Red+0.119*Green+0.950*Blue    | Blue  =  0.056*X-0.204*Y+1.057*Z
  429.     Recently (about one year ago), CCIR and CCITT were both absorbed into their
  430.     parent body, the International Telecommunications Union (ITU). So you must
  431.     *not* use CCIR 601-1 and CCIR 709 anymore. Furthermore, their names have
  432.     changed  respectively to Rec 601-1 and Rec 709 ("Rec" stands for
  433.     Recommendation). Here is the new ITU recommendation.
  434.     The white point is D65 and have coordinates fixed as (xn;yn)=(0.312713;
  435.     0.329016). The RGB chromacity coordinates are:
  436.     Red:   xr=0.64 yr=0.33
  437.     Green: xg=0.29 yg=0.60
  438.     Blue:  xb=0.15 yb=0.06
  439.     Finally, we have RGB -> CIE XYZitu (D65):
  440.     |X|   |0.430574 0.341550 0.178325|   |Red  |
  441.     |Y| = |0.222015 0.706655 0.071330| * |Green|
  442.     |Z|   |0.020183 0.129553 0.939180|   |Blue |
  443.     This provides the formula to transform RGB to CIE XYZitu and vice-versa:
  444.     RGB -> CIE XYZitu (D65)            | CIE XYZitu (D65) -> RGB
  445.     X = 0.431*Red+0.342*Green+0.178*Blue    | Red   =  3.063*X-1.393*Y-0.476*Z
  446.     Y = 0.222*Red+0.707*Green+0.071*Blue    | Green = -0.969*X+1.876*Y+0.042*Z
  447.     Z = 0.020*Red+0.130*Green+0.939*Blue    | Blue  =  0.068*X-0.229*Y+1.069*Z
  448.  
  449.     All the conversions I presented until there in this item are not just for
  450.     fun ;-). They can really be useful. For example, in most of your
  451.     applications you have true color images in RGB color space. How to render
  452.     them fastly on your screen or on your favorite printer. This is simple.
  453.     You can convert your picture instantaneously in gray scale pictures see
  454.     even in a black and white pictures as a magician.
  455.     To do so, you just need to convert your RGB values into the Y component.
  456.     Actually, Y is linked to the luminosity (Y is an achromatic component) and
  457.     X and Z are linked to the colorfulness (X and Z are two chromatic
  458.     components). Old softwares used Rec 601-1 and produced:
  459.     Gray scale=Y=(299*Red+587*Green+114*Blue)/1000
  460.     With Rec 709, we have:
  461.     Gray scale=Y=(213*Red+715*Green+72*Blue)/1000
  462.     Some others do as if:
  463.     Gray scale=Green (They don't consider the red and blue components at all)
  464.     Or Gray scale=(Red+Green+Blue)/3
  465.     But now all people *should* use the most accurate, it means ITU standard:
  466.     Gray scale=Y=(222*Red+707*Green+71*Blue)/1000
  467.     (That's very close to Rec 709!)
  468.     I made some personal tests and have sorted them in regard with the global
  469.     resulting luminosity of the picture (from my eye point of view!). The
  470.     following summary gives what I found ordered increasingly:
  471.     +-----------------------------+----------------+
  472.     |Scheme                       |Luminosity level|
  473.     +-----------------------------+----------------+
  474.     |Gray=Green                   |        1       |
  475.     |Gray=ITU (D65)               |        2       |
  476.     |Gray=Rec 709 (D65)           |        3       |
  477.     |Gray=Rec 601-1 (C illuminant)|        4       |
  478.     |Gray=(Red+Green+Blue)/3      |        5       |
  479.     +-----------------------------+----------------+
  480.     So softwares with Gray=Rec 709 (D65) produce a more dark picture than with
  481.     Gray=Green. Even if you theorically lose many details with Gray=Green
  482.     scheme, in fact, and with the 64-gray levels of a VGA card of a PC it is
  483.     hard to distinguish the losts.
  484.  
  485. 5.4 - CIE Luv
  486.  
  487.     In 1976, the CIE defined two new color spaces to enable us to get more
  488.     uniform and accurate models. The first of these two color spaces is the
  489.     CIE Luv which component are L*, u* and v*. L* component defines the
  490.     luminancy, and u*, v* define chrominancy. CIE Luv is very used in
  491.     calculation of small colors or color differences, especially with additive
  492.     colors. The CIE Luv color space is defined from CIE XYZ.
  493.  
  494.     CIE XYZ -> CIE Lab
  495.     { L* = 116*((Y/Yn)^(1/3)) with Y/Yn>0.008856
  496.     { L* = 903.3*Y/Yn with Y/Yn<=0.008856
  497.     u* = 13*(L*)*(u'-u'n)
  498.     v* = 13*(L*)*(v'-v'n)
  499.     where u'=4*X/(X+15*Y*+3*Z) and v'=9*Y/(X+15*Y+3*Z)
  500.     and u'n and v'n have the same definitions for u' and v' but applied to the
  501.     white point reference. So, you have:
  502.     u'n=4*Xn/(Xn+15*Yn*+3*Zn) and v'n=9*Yn/(Xn+15*Yn+3*Zn)
  503.  
  504.     See also item 5.3 about Xn, Yn, and Zn.
  505.  
  506. 5.5 - CIE Lab and LCH
  507.  
  508.     As CIE Luv, CIE Lab is a color space introduced by CIE in 1976. It's a new
  509.     incorporated color space in TIFF specs. In this color space you use three
  510.     components: L* is the luminancy, a* and b* are respectively red/blue and
  511.     yellow/blue chrominancies.
  512.     This color space is also defined with regard to the CIE XYZ color spaces.
  513.  
  514.     CIE XYZ -> CIE Lab
  515.     { L=116*((Y/Yn)^(1/3)) with Y/Yn>0.008856
  516.     { L=903.3*Y/Yn with Y/Yn<=0.008856
  517.     a=500*(f(X/Xn)-f(Y/Yn))
  518.     b=200*(f(Y/Yn)-f(Z/Zn))
  519.     where { f(t)=t^(1/3) with Y/Yn>0.008856
  520.           { f(t)=7.787*t+16/116 with Y/Yn<=0.008856
  521.  
  522.     See also item 5.3 about Xn, Yn, and Zn.
  523.  
  524.     The CIE Lab has the same problem as RGB, it is not very useful for user
  525.     interface. That's why you will preferr the LCH, a color space based on
  526.     CIE Lab (accurate and useful...). LCH stand for Luminosity (see this term
  527.     in item 2), Chroma (see Colourfulness in item 2), and Hue (see this term
  528.     in item 2).
  529.     CIE Lab -> LCH
  530.     L = L*
  531.     C = (a*^2+b*^2)^0.5
  532.     { H=0 with a=0
  533.     { H=(arctan((b*)/(a*))+k*PI/2)/(2*PI) with a#0 (add PI/2 to H if H<0)
  534.     { and { k=0 if a*>=0 and b*>=0
  535.           { or k=1 if a*>0 and b*<0
  536.           { or k=2 if a*<0 and b*<0
  537.           { or k=3 if a*<0 and b*>0
  538.  
  539. 5.6 - The associated standards: YUV, YIQ, and YCbCr
  540.  
  541.     YUV is used in European TVs and YIQ in North American TVs (NTSC).
  542.     Y is linked to the component of luminancy, and U,V and I,Q are linked
  543.     to the components of chrominancy. Y come from the standard CIE 1931 XYZ.
  544.  
  545.     YUV uses D65 white point which coordinates are (xn;yn)=(0.312713;0.329016).
  546.     The RGB chromacity coordinates are:
  547.     Red:   xr=0.64 yr=0.33
  548.     Green: xg=0.29 yg=0.60
  549.     Blue:  xb=0.15 yb=0.06
  550.     See item 5.3 to understand why the above values.
  551.  
  552.     RGB -> YUV                    | YUV -> RGB
  553.     Y =  0.299*Red+0.587*Green+0.114*Blue    | Red   = Y+0.000*U+1.140*V
  554.     U = -0.147*Red-0.289*Green+0.436*Blue    | Green = Y-0.396*U-0.581*V
  555.     V =  0.615*Red-0.515*Green-0.100*Blue    | Blue  = Y+2.029*U+0.000*V
  556.  
  557.     RGB -> YIQ                    | YUV -> RGB
  558.     Y =  0.299*Red+0.587*Green+0.114*Blue    | Red   = Y+0.956*I+0.621*Q
  559.     I =  0.596*Red-0.274*Green-0.322*Blue    | Green = Y-0.272*I-0.647*Q
  560.     Q =  0.212*Red-0.523*Green+0.311*Blue    | Blue  = Y-1.105*I+1.702*Q
  561.  
  562.     YUV -> YIQ                | YIQ -> YUV
  563.     Y = Y (no changes)            | Y = Y (no changes)
  564.     I = -0.2676*U+0.7361*V        | U = -1.1270*I+1.8050*Q
  565.     Q =  0.3869*U+0.4596*V        | V =  0.9489*I+0.6561*Q
  566.  
  567.     Note that Y has a range of [0;1] (if red, green, and blue have a range of
  568.     [0;1]) but U, V, I, and Q can be as well negative as positive. I can't give
  569.     the range of U, V, I, and Q because it depends on precision from Rec specs
  570.     To avoid such problems, you'll preferr the YCbCr. This color space is
  571.     similar to YUV and YIQ without the disadvantages. Y remains the component
  572.     of luminancy but Cb and Cr become the respective components of blue and
  573.     red. Futhermore, with YCbCr color space you can choose your luminancy from
  574.     your favorite recommendation. The most popular are given below:
  575.     +----------------+---------------+-----------------+----------------+
  576.     | Recommendation | Coef. for red | Coef. for Green | Coef. for Blue |
  577.     +----------------+---------------+-----------------+----------------+
  578.     | Rec 601-1      | 0.2989        | 0.5867          | 0.1144         |
  579.     | Rec 709        | 0.2126        | 0.7152          | 0.0722         |
  580.     | ITU            | 0.2220        | 0.7067          | 0.0713         |
  581.     +----------------+---------------+-----------------+----------------+
  582.     RGB -> YCbCr
  583.     Y  = Coef. for red*Red+Coef. for green*Green+Coef. for blue*Blue
  584.     Cb = (Blue-Y)/(2-2*Coef. for blue)
  585.     Cr = (Red-Y)/(2-2*Coef. for red)
  586.     YCbCr -> RGB
  587.     Red   = Cr*(2-2*Coef. for red)+Y
  588.     Green = (Y-Coef. for blue*Blue-Coef. for red*Red)/Coef. for green
  589.     Blue  = Cb*(2-2*Coef. for blue)+Y
  590.     (Note that the Green component must be computed *after* the two other
  591.     components because Green component use the values of the two others.)
  592.     Usually, you'll need the following conversions based on Rec 601-1
  593.     for TIFF and JPEG works:
  594.     RGB -> YCbCr (with Rec 601-1 specs)        | YCbCr (with Rec 601-1 specs) -> RGB
  595.     Y=  0.2989*Red+0.5867*Green+0.1144*Blue    | Red=  Y+0.0000*Cb+1.4022*Cr
  596.     Cb=-0.1687*Red-0.3312*Green+0.5000*Blue    | Green=Y-0.3456*Cb-0.7145*Cr
  597.     Cr= 0.5000*Red-0.4183*Green-0.0816*Blue    | Blue= Y+1.7710*Cb+0.0000*Cr
  598.  
  599.     I assume Y is within the range [0;1], and Cb and Cr are within the range
  600.     [-0.5;0.5].
  601.  
  602. 5.7 - SMPTE-C RGB
  603.  
  604.     SMPTE is an acronym which stands for Society of Motion Picture and Television
  605.     Engineers. They give a gamma (=2.2 with NTSC, and =2.8 with PAL) corrected
  606.     color space with RGB components (about RGB, see item 5.1).
  607.     The white point is D65. The white point coordinates are (xn;yn)=(0.312713;
  608.     0.329016). The RGB chromacity coordinates are:
  609.     Red:   xr=0.630 yr=0.340
  610.     Green: xg=0.310 yg=0.595
  611.     Blue:  xb=0.155 yb=0.070
  612.     See item 5.3 to understand why the above values.
  613.     To get the conversion from SMPTE-C RGB to CIE XYZ or from CIE XYZ to
  614.     SMPTE-C RGB, you have two steps:
  615.     SMPTE-C RGB -> CIE XYZ (D65)        | CIE XYZ (D65) -> SMPTE-C RGB
  616.     - Gamma correction                | - Linear transformations:
  617.     Red=f1(Red')                | Red  = 3.5058*X-1.7397*Y-0.5440*Z
  618.     Green=f1(Green')                | Green=-1.0690*X+1.9778*Y+0.0352*Z
  619.     Blue=f1(Blue')                | Blue = 0.0563*X-0.1970*Y+1.0501*Z
  620.     where { f1(t)=t^2.2 whether t>=0.0        | - Gamma correction
  621.           { f1(t)-(abs(t)^2.2) whether t<0.0    | Red'=f2(Red)
  622.     - Linear transformations:            | Green'=f2(Green)
  623.     X=0.3935*Red+0.3653*Green+0.1916*Blue    | Blue'=f2(Blue)
  624.     Y=0.2124*Red+0.7011*Green+0.0866*Blue    | where { f2(t)=t^(1/2.2) whether t>=0.0
  625.     Z=0.0187*Red+0.1119*Green+0.9582*Blue    |       { f2(t)-(abs(t)^(1/2.2)) whether t<0.0
  626.  
  627. 5.8 - SMPTE-240M YPbPr (HD televisions)
  628.  
  629.     SMPTE give a gamma (=0.45) corrected color space with RGB components (about
  630.     RGB, see item 5.1). With this space color, you have three components Y, Pb,
  631.     and Pr respectively linked to luminancy (see item 2), green, and blue.
  632.     The white point is D65. The white point coordinates are (xn;yn)=(0.312713;
  633.     0.329016). The RGB chromacity coordinates are:
  634.     Red:   xr=0.67 yr=0.33
  635.     Green: xg=0.21 yg=0.71
  636.     Blue:  xb=0.15 yb=0.06
  637.     See item 5.3 to understand why the above values.
  638.     Conversion from SMPTE-240M RGB to CIE XYZ (D65) or from CIE XYZ (D65) to
  639.     SMPTE-240M RGB, you have two steps:
  640.     YPbPr -> RGB                | RGB -> YPbPr
  641.     - Gamma correction                | - Linear transformations:
  642.     Red=f(Red')                    | Red  =1*Y+0.0000*Pb+1.5756*Pr
  643.     Green=f(Green')                | Green=1*Y-0.2253*Pb+0.5000*Pr
  644.     Blue=f(Blue')                | Blue =1*Y+1.8270*Pb+0.0000*Pr
  645.     where { f(t)=t^0.45 whether t>=0.0        | - Gamma correction
  646.           { f(t)-(abs(t)^0.45) whether t<0.0    | Red'=f(Red)
  647.     - Linear transformations:            | Green'=f(Red)
  648.     Y=  0.2122*Red+0.7013*Green+0.0865*Blue    | Blue'=f(Red)
  649.     Pb=-0.1162*Red-0.3838*Green+0.5000*Blue    | where { f(t)=t^(1/0.45) whether t>=0.0
  650.     Pr= 0.5000*Red-0.4451*Green-0.0549*Blue    |       { f(t)-(abs(t)^(1/0.45)) whether t<0.0
  651.  
  652. 5.9 - Xerox Corporation YES
  653.  
  654.     YES have three components which are Y (see Luminancy, item 2), E (chrominancy
  655.     of red-green axis), and S (chrominancy of yellow-blue axis)
  656.     Conversion from YES to CIE XYZ (D50) or from CIE XYZ (D50) to YES, you have two
  657.     steps:
  658.     YES -> CIE XYZ (D50)            | CIE XYZ (D50) -> YES
  659.     - Gamma correction                | - Linear transformations:
  660.     Y=f1(Y')                    | Y= 0.000*X+1.000*Y+0.000*Z
  661.     E=f1(E')                    | E= 1.783*X-1.899*Y+0.218*Z
  662.     S=f1(S')                    | S=-0.374*X-0.245*Y+0.734*Z
  663.     where { f1(t)=t^2.2 whether t>=0.0        | - Gamma correction
  664.           { f1(t)-(abs(t)^2.2) whether t<0.0    | Y'=f2(Y)
  665.     - Linear transformations:            | E'=f2(E)
  666.     X=0.964*Y+0.528*E-0.157*S            | S'=f2(S)
  667.     Y=1.000*Y+0.000*E+0.000*S            | where { f2(t)=t^(1/2.2) whether t>=0.0
  668.     Z=0.825*Y+0.269*E+1.283*S            |       { f2(t)-(abs(t)^(1/2.2)) whether t<0.0
  669.  
  670.     Conversion from YES to CIE XYZ (D65) or from CIE XYZ (D65) to YES, you have two
  671.     steps:
  672.     YES -> CIE XYZ (D65)            | CIE XYZ (D65) -> YES
  673.     - Gamma correction                | - Linear transformations:
  674.     Y=f1(Y')                    | Y= 0.000*X+1.000*Y+0.000*Z
  675.     E=f1(E')                    | E=-2.019*X+1.743*Y-0.246*Z
  676.     S=f1(S')                    | S= 0.423*X+0.227*Y-0.831*Z
  677.     where { f1(t)=t^2.2 whether t>=0.0        | - Gamma correction
  678.           { f1(t)-(abs(t)^2.2) whether t<0.0    | Y'=f2(Y)
  679.     - Linear transformations:            | E'=f2(E)
  680.     X=0.782*Y-0.466*E+0.138*S            | S'=f2(S)
  681.     Y=1.000*Y+0.000*E+0.000*S            | where { f2(t)=t^(1/2.2) whether t>=0.0
  682.     Z=0.671*Y-0.237*E-1.133*S            |       { f2(t)-(abs(t)^(1/2.2)) whether t<0.0
  683.  
  684.     Usually, you should use YES <-> CIE XYZ (D65) conversions because your
  685.     screen and the usual pictures have D65 as white point. Of course, sometime
  686.     you'll need the first conversions. Just take care on your pictures.
  687.  
  688. 5.10- Kodak Photo CD YCC
  689.  
  690.     YCC is a color space intented for Kodak Photo CD. It uses Rec 709 as gamma
  691.     correction but its components are defined with the D65 white point and are
  692.     Y (see Luminancy, item 2) and C1 and C2 (both are linked to chrominancy).
  693.     YC1C2->RGB                        | RGB->YC1C2
  694.     - Gamma correction:                    | Y' =1.3584*Y
  695.     Red  =f(red')                    | C1'=2.2179*(C1-156)
  696.     Green=f(Green')                    | C2'=1.8215*(C2-137)
  697.     Blue =f(Blue')                    | Red  =Y'+C2'
  698.     where { f(t)=-1.099*abs(t)^0.45+0.999 if t<=-0.018    | Green=Y'-0.194*C1'-0.509*C2'
  699.           { f(t)=4.5*t if -0.018<t<0.018        | Blue =Y'+C1'
  700.           { f(t)=1.099*t^0.45-0.999 if t>=0.018        |
  701.     - Linear transforms:                |
  702.     Y' = 0.299*Red+0.587*Green+0.114*Blue        |
  703.     C1'=-0.299*Red-0.587*Green+0.886*Blue        |
  704.     C2'= 0.701*Red-0.587*Green-0.114*Blue        |
  705.     - To fit it into 8-bit data:            |
  706.     Y =(255/1.402)*Y'                    |
  707.     C1=111.40*C1'+156                    |
  708.     C2=135.64*C2'+137                    |
  709.  
  710.     Finally, I assume Red, Green, Blue, Y, C1, and C2 are in the range of
  711.     [0;255]. Take care that your RGB values are not constrainted to positive
  712.     values. So, some colors can be outside the Rec 709 display phosphor
  713.     limit, it means some colors can be outside the trangle I defined in
  714.     item 5.3. This can be explained because Kodak want to preserve some
  715.     accurate infos, such as specular highlight information.
  716.     You can note that the relations to transform YC1C2 to RGB is not exactly
  717.     the reverse to transform RGB to YC1C2. This can be explained (from Kodak
  718.     point of view) because the output displays are limited in the range of
  719.     their capabilities.
  720.  
  721. 6 - References (most of them are provided by Adrian Ford)
  722.  
  723.     "An inexpensive scheme for calibration of a colour monitor in terms of CIE
  724.     standard coordinates" W.B. Cowan, Computer Graphics, Vol. 17 No. 3, 1983
  725.  
  726.     "Calibration of a computer controlled color monitor", Brainard, D.H, Color 
  727.     Research & Application, 14, 1, pp 23-34 (1989).
  728.  
  729.     "Color Monitor Colorimetry", SMPTE Recommended Practice RP 145-1987
  730.  
  731.     "Color Temperature for Color Television Studio Monitors", SMPTE Recommended
  732.     Practice RP 37
  733.  
  734.     "Colour Science in Television and Display Systems" Sproson, W, N, 
  735.     Adam Hilger Ltd, 1983. ISBN 0-85274-413-7
  736.     (Color measuring from soft displays.
  737.     Alan Roberts and Richard Salmon talked about it as a reference)
  738.  
  739.     "CIE Colorimetry" Official recommendations of the International Commission
  740.     on Illumination, Publication 15.2 1986
  741.  
  742.     "CRT Colorimetry:Part 1 Theory and Practice, Part 2 Metrology", Berns,
  743.     R.S., Motta, R.J. and Gorzynski, M.E., Color Research and Appliation, 18,
  744.     (1993).
  745.     (Adrian Ford talks about it as a must about color spaces)
  746.  
  747.     "Effective Color Displays. Theory and Practice", Travis, D, Academic Press,
  748.     1991. ISBN 0-12-697690-2
  749.     (Color applications in computer graphics)
  750.  
  751.     Field, G.G., Color and Its Reproduction, Graphics Arts Technical
  752.     Foundation, 1988, pp. 320-9
  753.     (Read this about CMY/CMYK)
  754.  
  755.     "Gamma and its disguises: The nonlinear mappings of intensity in
  756.     perception, CRT's, Film and Video" C. A. Poynton, SMPTE Journal, December
  757.     1993
  758.  
  759.     "Measuring Colour" second edition, R. W. G. Hunt, Ellis Horwood 1991,
  760.     ISBN 0-13-567686-x
  761.     (Calculation of CIE Luv and other CIE standard colors spaces)
  762.  
  763.     "On the Gun Independance and Phosphor Consistancy of Color Video Monitors"
  764.     W.B. Cowan N. Rowell, Color Research and Application, V.11 Supplement 1986
  765.  
  766.     "Precision requirements for digital color reproduction" M Stokes
  767.     MD Fairchild RS Berns, ACM Transactions on graphics, v11 n4 1992
  768.  
  769.     "The colorimetry of self luminous displays - a bibliography" CIE
  770.     Publication n.87, Central Bureau of the CIE, Vienna 1990
  771.  
  772.     "The Reproduction of Colour in PhotoGraphy, Printing and Television", R. W.
  773.     G. Hunt, Fountain Press, Tolworth, England, 1987
  774.  
  775. 7 - Comments and thanks
  776.  
  777.     Whenever you would like to comment or suggest me some informations about
  778.     this or about the color space transformations in general, please use email:
  779.     david.bourgin@ufrima.imag.fr (David Bourgin)
  780.  
  781.     Special thanks to the following persons (there are actually many other
  782.     people to cite) for contributing to valid these data:
  783.     - Adrian Ford (ajoec1@westminster.ac.uk)
  784.     - Tom Lane (Tom_Lane@G.GP.CS.CMU.EDU)
  785.     - Alan Roberts and Richard Salmon (Alan.Roberts@rd.bbc.co.uk,
  786.                                        Richard.Salmon@rd.eng.bbc.co.uk)
  787.     - Grant Sayer (grants@research.canon.oz.au)
  788.     - Steve Westland (coa23@potter.cc.keele.ac.uk)
  789.  
  790.     Note: We are installing some new devices in our net and it could be
  791.     disturbed for some time. Furthermore, I think there's a lot of chances
  792.     I'm going for my national service on next month, it means from 4/10/94.
  793.     (Yes I'm young. :-).) It will take 10 months but I'll try to read and
  794.     answer to my e-mails. Thanks to not be in a hurry ;-).
  795.  
  796. ###########################################################
  797.