YCoCg: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
No edit summary
(general English edits)
(5 intermediate revisions by one other user not shown)
Line 1: Line 1:
Some modern video codecs (e.g. [[dirac]]) support the YCoCg colorspace. More correctly written this is YC<sub>o</sub>C<sub>g</sub>, with the 'o' and 'g' characters as subscripts. This is what the components represent:
Some modern video codecs (e.g. [[Dirac]], [[H.264|H.264 FRExt]]) support the YCoCg colorspace. The correct written expression for this colorspace is YC<sub>o</sub>C<sub>g</sub>, with the 'o' and 'g' characters as subscripts.


     * Y = pseudo luminance, or intensity
== Technical Details ==
The various components of the name represent:
 
     * Y = pseudo luminance, or intensity
     * C<sub>o</sub> = "orange chrominance"
     * C<sub>o</sub> = "orange chrominance"
     * C<sub>g</sub> = "green chrominance"
     * C<sub>g</sub> = "green chrominance"


In contrast to [[YCbCr]] this doesn't represent the human kind of viewing.
In contrast to [[YCbCr]], this colorspace isn't based on the human vision model. This colorspace was invented to use similar encoding techniques as [[YCbCr|YC<sub>b</sub>C<sub>r</sub>]] but with frames in [[RGB]] colorspace. It is possible to losslessly transform from [[RGB]] to YCoCg when using 2 more bits for YCoCg representation than for RGB. E.g., it is possible to losslessly transform a pixel from a 30-bit RGB frame into a pixel in a 32-bit YCoCg 4:4:4 frame and back. This assumes that each R, G, and B component will have 10 bits of information which Y will have 10 bits and Co and Cg will each have 11 bits.
 
Sometimes this colorspace is called YCoCg-R because of the lossless reversible transformation. The original and outdated algorithm could not restore the RGB value exactly but used as many bits for the YCoCg version as the RGB version. The latter algorithm isn't widely used anymore.


This colorspace is invented to use similar encoding techniques as for [[YCbCr|YC<sub>b</sub>C<sub>r</sub>]] but with frames in [[RGB]] colorspace.
Like with [[:Category:YCbCr Formats|YCbCr]] it is also possible to use different plane sizes for each component. Thus, every pixel in an image of a YCoCg encoded frame is associated with one Y sample, but possibly groups of pixels share C<sub>o</sub> and C<sub>g</sub> samples.
It is possible to transform lossless from [[RGB]] to YCoCg when two more bits than used for RGB are available for the YCoCg represantation. This way it is possible to losslessly transform a 30-bit RGB (10 bits for each color) frame into 32 bits in YCoCg and back.


Sometimes this colorspace is called YCoCg-R because of the lossless reversable transformation. The original and outdated algorithm could not restore the RGB value exactly but used only as much bits as the RGB version. The latter algorithm isn't used anymore.
== Possible Formats ==


Like with [[:Category:YCbCr Formats|YCbCr]] it is also possible to use different sized planes for each component. Thus, every pixel in an image of a YCoCg encoded frame is associated with one Y sample, but possibly groups of pixels share C<sub>o</sub> and C<sub>g</sub> samples.
Possible encodings include:
* YCoCg 4:4:4, analogous to [[YCbCr 4:4:4]]
* YCoCg 4:2:2, analogous to [[YCbCr 4:2:2]]
* ...


So this encodings are possible for instance
== Algorithm ==
    * YCoCg 4:4:4
    * YCoCg 4:2:2
    * ...


The algorithm is described in this paper: [http://escher.elis.ugent.be/publ/Edocs/DOC/P105_213.pdf YCoCg(-R) Color Space Conversion on the GPU].
The algorithm is described in this paper: [http://escher.elis.ugent.be/publ/Edocs/DOC/P105_213.pdf YCoCg(-R) Color Space Conversion on the GPU].
And in the [http://diracvideo.org/download/specification/dirac-spec-latest.pdf dirac spec] in section F.1.5.2.


From RGB to YCoCg:
From RGB to YCoCg:
  Co = R - B
  Co = R - B
*    t = B + (Co >> 1)
  t = B + (Co >> 1)
  Cg = G - t
  Cg = G - t
*    Y = t + (Cg >> 1)
  Y = t + (Cg >> 1)


and back from YCoCg to RGB:
and back from YCoCg to RGB:
*    t = Y  - (Cg >> 1)
  t = Y  - (Cg >> 1)
*    G = Cg + t
  G = Cg + t
*    B = t  - (Co >> 1)
  B = t  - (Co >> 1)
*    R = Co + B
  R = Co + B
 


[[Category:Compression Theory]]
[[Category:Compression Theory]]

Revision as of 15:59, 16 March 2009

Some modern video codecs (e.g. Dirac, H.264 FRExt) support the YCoCg colorspace. The correct written expression for this colorspace is YCoCg, with the 'o' and 'g' characters as subscripts.

Technical Details

The various components of the name represent:

   * Y  = pseudo luminance, or intensity
   * Co = "orange chrominance"
   * Cg = "green chrominance"

In contrast to YCbCr, this colorspace isn't based on the human vision model. This colorspace was invented to use similar encoding techniques as YCbCr but with frames in RGB colorspace. It is possible to losslessly transform from RGB to YCoCg when using 2 more bits for YCoCg representation than for RGB. E.g., it is possible to losslessly transform a pixel from a 30-bit RGB frame into a pixel in a 32-bit YCoCg 4:4:4 frame and back. This assumes that each R, G, and B component will have 10 bits of information which Y will have 10 bits and Co and Cg will each have 11 bits.

Sometimes this colorspace is called YCoCg-R because of the lossless reversible transformation. The original and outdated algorithm could not restore the RGB value exactly but used as many bits for the YCoCg version as the RGB version. The latter algorithm isn't widely used anymore.

Like with YCbCr it is also possible to use different plane sizes for each component. Thus, every pixel in an image of a YCoCg encoded frame is associated with one Y sample, but possibly groups of pixels share Co and Cg samples.

Possible Formats

Possible encodings include:

Algorithm

The algorithm is described in this paper: YCoCg(-R) Color Space Conversion on the GPU.

And in the dirac spec in section F.1.5.2.

From RGB to YCoCg:

Co = R - B
 t = B + (Co >> 1)
Cg = G - t
 Y = t + (Cg >> 1)

and back from YCoCg to RGB:

 t = Y  - (Cg >> 1)
 G = Cg + t
 B = t  - (Co >> 1)
 R = Co + B