[theora] YCbCr <-> RGB conversion question

Ondrej Certik ondrej at certik.cz
Mon Jun 15 18:02:52 PDT 2009


I coded some routines for YCbCr <-> RGB conversion, both using
floating point numbers and using integer arithmetics, code is

Let's say I want to convert from RGB to YCbCr and back. First the
integer arithmetics:

In [1]: from colors import *

In [2]: a = [255, 0, 255]

In [3]: RGB2YCbCr(a)
Out[3]: (107, 202, 222)

In [4]: YCbCr2RGB(RGB2YCbCr(a))
Out[4]: array([255,   1, 255])

As you can see, the G component was increased from 0 to 1. Those
routines are the same as here:


Now let's try floating point conversions:

In [3]: RGB2YCbCr_precise(a)
Out[3]: array([106, 202, 222], dtype=uint8)

In [4]: YCbCr2RGB_precise(RGB2YCbCr_precise(a))
Out[4]: array([255,   0, 254], dtype=uint8)

This time the B component was decreased by 1... Those floating point
routines were done by me, and I followed the theora spec.

So my questions are:

* does anyone here have a code, that can convert back and forth
without loosing precision?
* does it make sense for those routines to work back and forth exactly?

I am new to this, so I am not sure what the common practise is, but it
seems weird to me, that if I convert the picture from YCbCr to RGB and
back couple times, the image will slowly deteriorate.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: colors.py
Type: text/x-python
Size: 2639 bytes
Desc: not available
Url : http://lists.xiph.org/pipermail/theora/attachments/20090615/9541fd47/attachment.py 

More information about the theora mailing list