Teorie:
YCbCr je barevný prostor, kde již nejsou zastoupeny barvy jako u RGB (reg,green, blue - červená, zelená, modrá) , ale Y představuje světelnost a Cb a Cr představují chromizační signály. A proč se vůbec barvy při kompresích přepočítávají? Vysvětlení je velice jednoduché. Lidské oko dokáže velice dobře rozlišit změnu ve světelnosti, ale už nedokáže rozlišit malé změny v chromizačních signálech. Při 50% ztrátě informací v chromizačních kanálech je změna celého obrázku nepostřehnutelná. Pokud bychom používali tuto metodu jako kompresi samostatně, tak bychom ušetřili až 50% informací na popis velmi podobně vypadajícího obrázku.
YCbCr barevný prostor byl doporučen institucí CCIR pod označením 601, a to pro barevné televizní vysílaní, kde v signále bylo zapotřebí uchovat informaci o jasu (složka Y) a zbytek informací "vmodulovat" do černobílého signálu. Přepočet barev se provádí podle těchto doporučených vzorců.
| Y=0.299R+0.587G+0.114B |
| Cb=-0.1687R-0.3313G+0.5B+128 |
| Cr=0.5R-0.4187G-0.0813B+128 |
Pro připomenutí
RGB je barevný prostor, kde barva a jas každého bodu obrázku jsou vyjádřeny kombinací tří složek, barvy červené (R - red), zelené (G - green) a modré (B - blue). Tyto tři složky lze považovat za bázi prostoru RGB, všechny ostatní barvy jsou lineárními kombinacemi těchto složek.
Příklad: (viz. MATLAB - Help - RGB)
| R | G | B | Barva |
| 0 | 0 | 0 | černá |
| 1 | 1 | 1 | bílá |
| 1 | 0 | 0 | červená |
| 0 | 1 | 0 | zelená |
| 0 | 0 | 1 | modrá |
| 1 | 1 | 0 | žlutá |
| 1 | 0 | 1 | fialová |
| 0,50 | 0,50 | 0,50 | šedá |
| 1 | 0,62 | 0,40 | měděná |
Přepočet vygenerovaných obrázků
| RGB | Obr1 | YCbCr |
![]() |
=>
|
![]() |
| RGB | Obr2 | YCbCr |
![]() |
=> | ![]() |
| RGB | Obr3 | YCbCr |
![]() |
=> | |
| RGB | Obr4 | YCbCr |
![]() |
=> | ![]() |
| RGB | Obr5 | YCbCr |
![]() |
=> | ![]() |
Ukázka 50% ztráty informací v Cb a Cr signálech
Ztráta spočívá v průměrování (nahrazení) dvou hodnot vedle sebe. Asi nějak takto| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | (S)před |
| 1 | 3 | 5 | 7 | (S)po | ||||
| RGB před ztrátou | YCbCr před ztrátou | |
![]() |
=>
|
![]() |
| YCbCr po ztrátě | RGB po ztrátě | |
![]() |
=> | ![]() |
Vypis programu v matlabu
Tabulka zabíraného místa.
|
Popis |
Velikost v matlabu |
| Celý obrázek RGB | 1843200 B |
| Celý obrázek YCbCr | 1843200 B |
| Vrstva Y | 614400 B |
| Vrstva Cr,Cb před "kompresí" | 614400 B |
| Vrstva Cr,Cb po "kompresi" | 153600 B |
| Celý obrázek po "kompresi" | 921600B |
| Rozdíl před a po kompresi | 921600B |
| Rozdíl v procentech | 50% |
| Kompresní poměr | 1:2 |
Závěr:
Jak je patrno z tohoto pokusu, je mnohem lepší přepočítat obraz do YCbCr než jej komprimovat přímo v RGB barevném prostoru. Dokonce může i urychlit další kompresní metody, protože například u DCT je ve dvou kanálech potřeba o polovinu méně operací než při komprimaci celého obrázku, což může být docela velké urychlení.