Цветови модели (RGB, HSV, CMYK, YCrCb, CIELAB)
страницата се нуждае от дописване/преглеждане
Увод
Както знаете на екрана изображенията се показват чрез растер, т.е правоъгълна матрица от пиксели. Всеки пискел има свой собствен цвят. Това, което ще разгледаме в тази лекция са различните начини на задаване на цвят на даден пиксел, именно - цветовия модел. За пълнота ще споменем и не съвсем цветните модели
- черно-бял. Обърнете внимание, че за разлика от черно-белите телевизори тук има САМО черно и бяло - т.е няма никакво сиво :)
- възможни цветове - черен и бял
- заемана памет: 1 бит. Всеки бит е единица (1) или нула (0) и съответства на черно / бяло (може и наобратно). Ако малко си поиграете с побитови операции ще постигнете този минималистичен размер. Някои стари дисплеи (може и на телефони) имат само един цвят при тях един пиксел се кодира точно в един бит - пести се доста памет.
- полутонови. Това е еквивалента на черно-белите телевизори. Има всички цветове между бялото и черното. Т.е всички степени на сивото.
- възможни цветове - всички степени на сивото
- заемана памет: 1 байт1. В един байт се кодират 255 различни нюанса на сивото. За повечето употреби това е напълно достатъчно.
- цветни. Тук нещата стават интересни
Ще разгледаме най-основните начини за представяне на цвят и разбира се как от едно представяне да преминем към друго.
RGB
Най-известният начин е така нареченото RGB, съкратено от Red, Green, Blue. Както може да се досетите, трите компоненти, определящи даден цвят, са именно интензитетите на основните цветове (с каква сила основните цветове присъстват в дадения)
Всички останали цветове се получават от подходящо смесване на основните. Този начин е най-широко разпространен, мониторите използват точно това представяне, за да изобразят нещо. Всеки пиксел е всъщност 3 малки лампички - червена, зелена и синя. Тъй като в миналото не са си давали зор да правят голяма абстракция между хардуера и софтуера, то и програмистите са били принудени да използват този начин на задаване на цветове, освен всичко друго той не е чак толкова контра-интуитивен. Под "миналото" се има предвид "преди две седмици".
CMYK
3те допълнителни цвята на RGB са Cyan, Magenta, Yellow (в приблизителен превод "светло синьо", "пурпурно" - нарича се и просто "магента", и "жълто"). В RGB те се получават така:
Cyan = Green + Blue
Magenta = Red + Blue
Yellow = Red + Green
Ако разсъждаваме в термините на RGB, черното обозначава липсата на всеки от трите основни цвята от RGB (т.е, ако трите цветни компонента - червена, зелена, синя - са нула, се получава черно, а ако са max - 255 или 1, зависи дали ги разполагаме в дискретния интервал [0, 255], или в реалния интервал [0, 1] - се получава бял).
Съществува цветова схема, в която циановото, магентата и жълтото, тези три допълнителни (за RGB) цвята са основни, а червеното, зеленото и синьото пък са допълнителни и се получават чрез смесването на първите три. Тази схема се нарича CMYK (Cyan, Magenta, Yellow, Black). Какво? К означава черно, ок? По-добре ли щеше да е, ако го бяха кръстили ЦМУБ?
CIELab
Както казахме по-рано RGB е възникнало поради чисто технически причини, зависещи от методологията на работа на мониторите. За добро или лошо, начинът по който работи компютърът не съвпада много с начина, по който разсъждава човекът. Ето затова възникнал въпросът за представяне на цветовете по някакъв по-добър, по-осезателен за човека начин. Било решено яркостта да бъде отделена като един от компонентите, а другите 2 да отговарят за цвета. Пресмятането на RGB цвят в L*a*b е 'нагласено'. Само погледнете цветовете в матрицата по-долу. Това нагласяне идва от факта, че RGB цвета по никакъв начин не отразява неговата яркост (lightness, brightness value) - един доста важен показател при дигитална обработка на изображения. Ето малко за значението на 3те компонента
| L* | яркост |
| а* | тоново отношение между червеното и зеленото |
| b* | тоново отношение между жълтото и синьото |
Пресмятане
Първо, за всеки цвят трябва да определим $x, y, z$ по следния начин (приемаме, че цветовете RGB са представени с реално число от интервала [0, 1]):
(1)Стойностите на $x, y, z$ при белия цвят (т.е $R = G = B = 1$) са по-интересни за нас, бележим ги с $x_n, y_n, z_n$:
(2)Освен тези 3 числа, особено голям интерес е и числото $\gamma = 0.008856$. Защо - ще разберете след малко.
Сега вече дойде ред на пресмятането на самите компоненти ($L*, a*, b*$). То става по следните формули:
Какви са всички тези измислени константи? Какви са тези магически числа в стил 0.119193? Само истинските джедаи ще имат шанса да разберат, в края на обучението си.
HSV
Това представяне е най-известното в обработката на изображения. Компонентите му значат:
| H | Hue | тон |
| S | Saturation | наситеност |
| V/B | Brightness Value | яркост |
Последната буква понякога е V, понякога B. И двете отговарят за яркостта - няма разлика между самите модели. Изчисляването на H става по следния начин:
(4)Това, разбира се, е спрямо предходния цветови модел.
В пространството може да си мислим HSV като обърнат конус, в който сме разположили цветовете. H е ъгъл (има тригонометрична функция), V показва на какво разстояние сме от върха на конуса, S показва отношението между разстоянието от точката до височината на конуса и радиуса на сечението, перпендикулярно на основата през точката.
YCrCb
Американската телевизия не може да остане назад - затова си измисля собствена цветова схема за лично ползване. Основните и компоненти са
| Y | $0.299R + 0.587G + 0.114B$ | яркост |
| Cr | $0.713 (R - Y) + 128$ | close to red - близост до червеното |
| Cb | $0.564 (B - Y) + 128$ | close to blue - близост до синьото |





