Grafika komputerowa
Grafika komputerowa
Modelowanie koloru
Światło widzialne
fiolet
-
niebieski
-
cyan
-
zielony
-
ż
ółty
-
pomarańczowy
-
czerwony
Ś
wiatło widzialne stanowi wąski wycinek fal
elektromagnetycznych z zakresu 400nm ÷ 700nm.
Fale dłuższe (podczerwień) i krótsze (nadfiolet) są dla
oka ludzkiego niewidoczne.
Ś
wiatło białe składa się ze wszystkich długości fal
widma.
400nm
700nm
Spektrum światła białego:
Wrażenie koloru - czynniki
Barwa (ang. hue) – określana przez dominującą długość fali, czynnik
jakościowy – to co odróżnia np. zieleń od błękitu.
Nasycenie (ang. saturation) – określane jako stosunek energii dominującej
długości fali e
2
do wypadkowej energii e
1
pozostałych fal tworzących widmo
ś
wietlne. Nasycenie (czystość barwy) jest tym większe, im większa jest
wartość e
2
w stosunku do e
1
. Dla e
1
=0 nasycenie maksymalne, dla e
2
=e
1
nasycenie zerowe (barwy achromatyczne).
Jasność (ang. ligthness) – określana stopniem podobieństwa barwy do bieli
(dla odcieni jasnych) czy czerni (dla odcieni ciemnych), czynnik ilościowy
proporcjonalny do całki z widmowego rozkładu energii światła.
e2
e1
λ
λ
λ
λ
[nm]
P(λ)
Widmowy rozkład energii światła
z dominującą długością fali
Barwy podstawowe, barwy dopełniające
Ś
wiatło białe można uzyskać mieszając w odpowiednich
proporcjach tylko kilka barw: np. barwę czerwoną, zieloną
i niebieską w stosunku 26:66:8.
Takie trójki czy pary barw, które w sumie dają światło
białe nazywamy
barwami dopełniającymi. Dla barwy
czerwonej (656 nm) barwą dopełniającą jest cyjan (492
nm), dla żółtej (574 nm) niebieska (482 nm).
Barwy, którymi opisujemy inne nazywane są
barwami
podstawowymi. Nie istnieje „najlepszy” zestaw barw
podstawowych.
Prawa Grassmana
Cyan
Yellow
Magenta
R
B
G
Model RGB
Model CMY
I prawo – prawo trójchromatyczności
Każda dowolna barwa może być odwzorowana za pomocą
trzech liniowo niezależnych barw.
Trzy barwy tworzą układ niezależnych liniowo jeżeli
dowolne zsumowanie dwóch z nich nie może dać trzeciej
barwy układu.
uwaga: twierdzenie odwrotne nie jest prawdziwe, tzn. z
dowolnie wybranych trzech liniowo niezależnych barw, nie
da się utworzyć wszystkich barw.
Prawa Grassmana
II prawo – prawo ciągłości
W mieszaninie złożonej z dwóch barw, stopniowa
zmiana barwy jednego ze składników pociąga za sobą
stopniową zmianę barwy mieszaniny.
Alternatywne sformułowanie: przy ciągłej zmianie
długości fali promieniowania barwa zmienia się w
sposób ciągły.
III prawo – prawo addytywności
Barwa mieszaniny zależy jedynie od barw jej
składników, a nie od ich składu widmowego.
Modele koloru
niezależne od urządzenia – CIE XYZ, CIE La*b*
ukierunkowane na użytkownika – HLS, HSV(HSB)
ukierunkowane na sprzęt – RGB, CMY, CMYK
Model CIE XYZ
opracowany w 1931 r. przez Międzynarodową Komisję Oświetleniową (CIE)
zdefiniowany na podstawie systemu CIE RGB, w którym doświadczalnie za
pomocą kolorymetru wizualnego określono wartości składowych
trójchromatycznych r(λ), g(λ), b(λ) widma światła widzialnego L
składowe r(λ), g(λ), b(λ) określają względny udział barw podstawowych
R, G i B potrzebnych do wywołania takiego samego wrażenia jak barwa
widmowa
- światła wzorcowe: R[700 nm]
G[546 nm]
B[435 nm]
- L (lambda): światlo badane
- składowe r(λ), g(λ), b(λ) wyznaczono dla
L=< 360-830 nm> z krokiem co 1nm
Kolorymetr wizualny
Przestrzeń kolorów CIE XYZ
składowe trójchromatyczne x(λ), y(λ), z(λ) otrzymane w wyniku
przekształceń liniowych składowych r(λ), g(λ), b(λ) systemu CIE RGB
są nieujemne w całym zakresie widma
składowa y(λ) – informacja o strumieniu światła (luminancja, jasność)
składowe x(λ) i z(λ) – informacja o barwie (chromatyczność)
w przestrzeni CIE XYZ kolory widzialne są zawarte w bryle zbliżonej do
stożka o wierzchołku w początku układu współrzędnych
Składowe trójchromatyczne w układzie CIE XYZ
Diagram chromatyczności CIE
Diagram
(wykres, trójkąt) chromatyczności
CIE jest fragmentem
przestrzeni CIE XYZ wyciętej przez trójkąt
ograniczony osiami XYZ
leżący na płaszczyźnie X+Y+Z=1,
obszar zbliżony kształtem do trójkąta,
zamknięty dwiema liniami - krzywą i prostą.
Stożek barw widzialnych
w przestrzeni CIE XYZ
Rzuty płaszczyzny X+Y+Z=1
w przestrzeni CIE XYZ
Diagram chromatyczności CIE
- krawędź części krzywoliniowej - barwy podstawowe widma światła białego
- krawędź dolna - purpury, powstałe przez zmieszanie w różnych proporcjach
skrajnych barw widma światła białego (380nm światła fioletowego i 780nm światła
czerwonego)
- barwy w pełni nasycone (czyste) na krawędziach, nienasycone wewnątrz trójkąta
- środek diagramu (C) jest punktem bieli o współrzędnych x=0,333, y=0,333
- barwa zmienia się wraz z kątem obrotu wokół punktu środkowego, nasycenie
zmienia się wzdłuż linii prostych przechodzących przez ten punkt.
Diagram CIE- wykorzystanie
1. Wyznaczanie nasycenia barwy
Nasycenie barwy A jest określone
proporcją:
s = AC / BC
2. Dodawanie barw:
Barwę A można otrzymać jako mieszaninę
barwy B i światła białego C w proporcji
określonej przez długości odcinków AC i
BC
3. Wyznaczanie barw dopełniających
Dopełniające pary barw wyznaczone są
przez końce dowolnych odcinków
przechodzących przez punkt C (światło
białe). (Np. barwy B i G lub D i E.
4. Wyznaczanie dominującej długości fali
Dominującą długością fali barwy A jest
długość fali barwy B.
Model CIE La*b*
Zawiera najszerszą zdefiniowaną matematycznie
przestrzeń
barw, która powstała w wyniku
przekształcenia modelu CIE XYZ. Każdy inny
model koloru da się opisać we współrzędnych
La*b*, ale nie na odwrót. Model jest niezależny
od urządzeń wejścia/wyjścia. Wykorzystywany
do obliczeń na barwach i wyznaczania stopnia
podobieństwa barw w systemach zarządzania
barwami CMS (Color Management System).
Wszystkie barwy o jednakowej jasności leżą na
powierzchni kołowej wyznaczonej osiami a* i b*:
- oś a* - barwy od czerwonej do zielonej
- oś b* - barwy od żółtej do niebieskiej
Jasność L zmienia się w kierunku pionowym.
Kolor wynikowy określany jest przez parametry L oraz a* i b*. Zakres zmienności
parametrów definiowany jest w programach graficznych. Np. w CorelDraw:
- a* i b*=<-60;+60>, L=<0,100>
- dostępna liczba kolorów: 121x121x101=1 478741
- różnica między 2 barwami: ∆E = [(∆L)
2
+ (∆a*)
2
+ (∆b*)
2
]
½
Model RGB
Kolor wypadkowy powstaje w wyniku addytywnego
mieszania składowych podstawowych
R
,
G
,
B.
czerwony (Red)
-
zielony (Green)
-
niebieski (Blue)
Model wykorzystywany:
w sprzęcie tworzącym obraz w wyniku emisji
ś
wiatła: monitory, projektory, skanery, cyfrowe
aparaty fotograficzne
do sprzętowej reprezentacji (opisu) pikseli w
systemach komputerowych
Model RGB
Kolor - punkt w przestrzeni ograniczonej
sześcianem jednostkowym, definiowany
przez trójkę (r,g,b)
R
R
G
G
B
B
1
1
1
1
1
1
0
0
Kolory podstawowe:
R = (1,0,0)
G = (0,1,0)
B = (0,0,1)
Kolory dopełniające:
C = (0,1,1)
M = (1,0,1)
Y = (1,1,0)
Kolor czarny = (0,0,0)
Kolor biały = (1,1,1)
50% szarość = (0.5, 0.5, 0.5)
Sprzętowa reprezentacja koloru
Obraz binarny:
:
liczba możliwych kolorów: 2
wartość koloru: { 0, 1 }
głębokość bitowa: 1
Wartość koloru - liczbowa reprezentacja barwy piksela
Głębokość bitowa - liczba bitów przeznaczona do zapisu
wartości koloru
Sprzętowa reprezentacja koloru
High Color:
:
liczba możliwych kolorów: 2
3 ×
×
×
×
5
lub 2
(5+6+5)
= 32 768 lub 65 536
wartość koloru: { R, G, B }, gdzie R, G, B ∈<0, 31> lub <0, 63>
głębokość bitowa: 15 lub 16 bitów (2 bajty)
True Color:
:
liczba możliwych kolorów: 2
8×
×
×
×
3
= 16 777 216
wartość koloru: { R, G, B }, gdzie R, G, B ∈<0, 255>
głębokość bitowa: 24 bity (3 bajty ze składowymi R,G,B)
Paleta barw –
Look-Up Table
x
y
pamięć obrazu
o głębokości
8 bitów/piksel
ekran
11111111 11111111 00000000
R G B
111111111111000000 19
0
255
.
.
.
24-bitowa tabela barw (LUT)
wskazywana indeksem 8-bitowym
19
Liczba możliwych do uzyskania kolorów: 2
8×
×
×
×
3
= 16 777 216.
Kolor wybierany z palety 256 kolorów.
Zawartość tabeli barw może być w sposób dynamiczny zmieniana.
Wielkość pamięci obrazu
W = K x L x Bpp
gdzie:
Bpp – głębokość bitowa (bit per pixel)
K – liczba kolumn obrazu
L – liczba linii obrazu
Obraz binarny:
800×
×
×
×
600x1 = 60000B = 60000/1024 KB = 58,6KB
Obraz True Color:
800×
×
×
×
600×
×
×
×
24 = 14400000B = 14400000/1024/1024 MB = 1,373MB
1280×
×
×
×
1024×
×
×
×
24 = 3932160B = 3,75MB
Model CMY
Model wykorzystywany w sprzęcie tworzącym obraz w wyniku
nakładania na nośnik barw podstawowych: drukarki, plotery
Kolor wypadkowy powstaje w wyniku substraktywnego mieszania
ś
wiatła odbitego od podłoża.
Pigment farby/atramentu pochłania określone długości fal, a odbija
pozostałe. Np. fiolet (M) pochłania ze światła białego składową G,
odbija składowe R i B.
Model CMY
Kolor - punkt w przestrzeni ograniczonej
sześcianem jednostkowym, definiowany
przez trójkę (c,m,y)
Kolory podstawowe:
C = (1,0,0)
cyan
M = (0,1,0)
magenta
Y = (0,0,1)
yellow
Kolory dopełniające:
R = (0,1,1)
G = (1,0,1)
B = (1,1,0)
Kolor czarny = (1,1,1)
Kolor biały = (0,0,0)
50% szarość = (0.5, 0.5, 0.5)
C
C
M
M
Y
Y
1
1
1
1
1
1
0
0
Model CMYK
W modelu CMY równe ilości trzech barw podstawowych (c=m=y) tworzą
neutralną szarość, która w modelu CMYK jest generowana przez czwartą barwę
podstawową
K (blacK - czarny).
(
(
(
+
0.2
0.4
0.4
0.4
0.5
0.6
0.4
0.9
C M Y
)
)
)
(
(
(
+
0.2
0.4
0.5
0.2 0.5
C M Y K
)
)
)
0.4
CMY = (c, m, y) → CMYK = (c - k, m - k, y - k, k)
Wartość składowej K:
k = min {c, m, y}
Procedury generowania czerni
W celu poprawy jakości druku (kolorystyka, kontrast)
barwa czarna K zastępuje (całkowicie lub częściowo) tą
część barw modelu CMY, które tworzą neutralne odcienie
szarości.
Procedury generowania czerni:
UCR (Under Color Removal) - usuwanie koloru
neutralnego
GCR (Gray Component Replacement) - zamiana
szarego składnika
UCR (
Under Color Removal
)
UCR - odtwarza neutralną szarość jedynie przy pomocy
czarnego atramentu. Zamiana CMY na CMYK:
(c,m,y,k) = (c-k
max
, m-k
max
, y-k
max
, k
max
)
CMY=(0.4, 0.6, 0.9)
k
max
= min {0.4, 0.6, 0.9} = 0.4
CMYK=(0.0, 0.2, 0.5, 0.4)
ilość atramentu:
CMY=40%+60%+90%=190%
CMYK=0%+20%+50%+40%=110%
Aby czarny atrament nie powodował
„brudnego”
wyglądu odcieni jasnych
(świateł),
UCR
stosuje
się
od
określonego poziomu neutralnej szarości
(od 0.5÷0.6).
CMY
CMYK
GCR (
Gray Component Replacement
)
GCR - odtwarza tylko część neutralnej szarości przy pomocy
czarnego atramentu: Zamiana CMY na CMYK:
(c,m,y,k) = (c-g, m-g, y-g, g)
gdzie:
g = s% k
max
s - zadany stopień zastępowania neutralnej szarości.
Przykład:
CMY = (0.4, 0.6, 0.9), s=50%,
k
max
= 0.4
g = 50%
k
max
= 0.2
CMYK = (0.2, 0.4, 0.7, 0.2)
ilość atramentu: CMY=40%+60%+90%=190%
CMYK=20%+40%+70%+20%=150%
Uwagi
druk
CMYK
zawsze
obniża
łączne
zużycie
atramentu/farby w porównaniu z drukiem CMY
drukarki stosują własne procedury generowania
czerni, a więc nie mamy kontroli nad tym procesem
przy wyznaczaniu wartości neutralnych odcieni
szarości
urządzenia
drukujące
posługują
się
krzywymi
mieszania
atramentów
(tonerów)
uwzględniającymi ich wpływ na „brudzenie” odcieni
jasnych
Model HLS
Znaczenie i zakresy współrzędnych:
H: hue - barwa o wartościach z przedziału: od 0 do 360 stopni
L: ligthness – jasność z przedziału 0...1 albo 0...100%
S: saturation - nasycenie koloru z przedziału 0...1 albo 0...100%
Definiowanie koloru
Model HSV (HSB)
Znaczenie i zakresy współrzędnych:
H: hue - barwa o wartościach z przedziału: od 0 do 360 stopni
S: saturation - nasycenie koloru z przedziału 0...1 albo 0...100%
V(B): value (brigthness) – wartość (jaskrawość) z przedziału 0...1 albo
0...100%
Algorytm przejścia od RGB do HLS
// konwersja RGB -> HLS (wg Travisa)
// zakresy zmiennych: r[0,1], g[0,1], b[0,1], h[0,360], l[0,1], s[0,1]
void rgb2hls (double r, double g, double b, double &h, double &l, double &s)
{
double max = max (max (r,g),b);
double min = min (min (r,g),b);
l = (max + min) / 2
// wyznaczenie jasności l
if (max = min) {
s = 0; h = 0; }
// wartość niezdefiniowana – kolory achromatyczne
else
{
if (l <= 0.5) s = (max - min)/(max + min);
// wyznaczenie nasycenia s
else s = (max -min) / (2 - max - min);
//
if (r = max) h = (g - b) / (max - min); // wyznaczenie barwy h
else if (g = max) h = 2 + (b - r) / (max - min);
//
else if (b = max) h = 4 + (r - g) / (max - min);
//
h = h * 60;
// konwersja h na stopnie
if (h < 0.0) h += 360;
}
}
Algorytm przejścia od HLS do RGB
// konwersja: HLS -> RGB (wgTravisa)
// zakresy zmiennych: h[0,360], l[0,1], s[0,1], r[0,1], g[0,1], b[0,1]
// funkcja pomocnicza: value
#include <math.h>
inline double value (double nl, double n2, double h)
{
if (h > 360) h -= 360;
else if (h < 0) h += 360;
if (h < 60) return nl + (n2 - nl) * h / 60.0;
if (h < 180) return n2;
if (h < 240) return nl + (n2 - nl) * (240 - h) / 60.0;
return nl; // (h < 360)
}
Algorytm przejścia od HLS do RGB – cd.
void hls2rgb (double h, double l, double s, double &r, double &g,
double &b)
{
double m1, m2;
if (l <= 0.5)
m2 = l * (1.0 + s);
else
m2 = l + s - l * s;
m1 = 2.0 * l - m2;
if (s == 0)
r = g = b = l;
else
{
r = value (m1,m2,h + 120);
//wyznaczenie wartości r,g,b
g = value (m1,m2,h);
b = value (m1,m2,h - 120);
}
}
Obliczenia w przestrzeni kolorów – modele liniowe
RGB, CMY, CIE XYZ
C
1
=[r
1
, g
1
, b
1
]; C
2
=[r
2
, g
2
,b
2
]; gdzie: r
n
, g
n
, b
n
€
<0;1>;
1. Operacje bezpośrednie
dodawanie kolorów
C
1
+C
2
=[r
1
+r
2
, g
1
+g
2
, b
1
+b
2
]
mnożenie przez skalar
α
C=[αr, αg, αb] α
€
<0;1>;
2. Operacje pośrednie
Obliczenia w przestrzeni kolorów – modele liniowe
RGB, CMY, CIE XYZ
3.
Nakładanie kolorów
wspólna krawędź
C=α
1
C
1
+α
2
C
2
gdzie: α
1
,α
2
€
<0;1> – współczynnik pokrycia obszaru
obszary rozłączne
C=α
1
C
1
+α
2
C
2
gdzie: α
1
,α
2
€
<0;1> – współczynnik pokrycia obszaru
obszary pokrywające się
C=F
1
C
1
+F
2
C
2
gdzie: F
1
,F
2
– udział obszarów C
1
,C
2
w wypadkowym pokryciu obszaru
C
1
C
2
C
1
C
2
C
1
C
2
Cieniowanie - porównanie
a)
model nieoświetlony
b)
cieniowanie stałą barwą wielokąta
c)
cieniowanie metodą Gourauda
d)
cieniowanie metodą Phonga
Cieniowanie Gourauda
1.
Wyznaczenie barwy w wierzchołkach trójkąta:
- wyznaczenie wektorów normalnych do wszystkich wierzchołków
jako średniej arytmetycznej wektorów normalnych wszystkich ścian,
do których ten wierzchołek należy.
- na podstawie wektora normalnego wyznaczenie barwy wierzchołka
korzystając z wybranego modelu oświetlenia
2.
Liniowa interpolacja barwy dla wszystkich punktów wielokąta zgodnie
z zaprezentowanymi wzorami
.
Cieniowanie Phonga
Cieniowanie metodą Phonga polega na interpolacji wektora normalnego dla
każdego punktu wielokąta, a następnie wyznaczenie na tej podstawie
intensywności barwy.
Etapy:
1.
Wyznaczenie wektorów normalnych do wszystkich wierzchołków wielokąta
jako średniej arytmetycznej wektorów normalnych wszystkich ścian, do
których ten wierzchołek należy.
2.
Liniowa interpolacja wartości wektorów normalnych dla wszystkich punktów
wielokąta (dla wszystkich pikseli):
2.1. Interpolacja wzdłuż krawędzi;
2.2. Interpolacja wzdłuż linii horyzontalnych.
3.
Na podstawie wartości wektorów normalnych wyznaczenie barwy dla
wszystkich punktów wielokąta zgodnie z przyjętym modelem oświetlenia