home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1997 #3
/
amigamamagazinepolishissue03-1
/
ma_1995
/
05
/
ami019.txt
< prev
next >
Wrap
Text File
|
1997-04-07
|
12KB
|
224 lines
MODELE BARW I ALGORYTMY
<lead>Zagadnienie modelu barw HSV i RGB jest na tyle waûne i
jednoczeônie zagmatwane, ûe przy okazji pracy z programami
malarskimi, warto ten temat nieco odôwieûyê.
<a>Stanisîaw Wësîawski
<txt> Zaczâê trzeba od terminologii. W dziewiëtnastym odcinku
"Deluxe Paint w praktyce" wspomniaîem o mieszaniu barw ADDYTYWNYM
I SUBSTRAKTYWNYM. Otóû ksiâûka "Kolor czy barwa" Wîodka
Pastuszaka (1993) podaje termin SUBSTRAKTYWNY, ksiâûka "Elementy
grafiki komputerowej" Michaîa Jankowskiego (1990) to samo, a
"Grafika komputerowa" wydana przez NOT obecnie (1994) i
"Materiaîy fotograficzne barwne" Dubiela i Iliïskiego (1973)
podaje termin SUBTRAKTYWNY. "Sîownik naukowo-techniczny
angielsko-polski" informuje nas, ûe termin SUBTRACTIVE COLOUR
PROCESS to "synteza subtraktywna barw, subtraktywne mieszanie
barw." Jak wiëc widaê, ani czas wydania, ani rodzaj podrëcznika
nie chroni nas od chaosu terminologicznego. Myôlë, ûe rozstrzyga
tu jednak sîownik i od dziô ogîaszam, ûe zaczynam uûywaê terminu
SUBTRAKTYWNY. Sîowo to pochodzi od angielskiego terminu SUBTRACT
-- odejmowaê. Filtr zielony, np. kolorowe szkîo, przez które
obserwujemy obraz, pochîania barwë czerwonâ, a przepuszcza
promieniowanie zielone. W efekcie widzimy jasne liôcie drzew i
ciemne czerwone róûe. Jeûeli naîoûymy na siebie trzy okrâgîe
filtry w kolorze niebieskozielonym, purpurowym i ûóîtym, a
nastëpnie poîoûymy je na biaîym tle, otrzymamy róûne kolory w
miejscu ich wzajemnego przysîaniania.
Kolor ûóîty naîoûony na filtr purpurowy da w wyniku kolor
czerwony. Kolor ûóîty naîoûony na filtr niebieskozielony da kolor
zielony. Kolor purpurowy w zestawieniu z filtrem
niebieskozielonym da barwë niebieskofioletowâ. Filtr purpurowy
naîoûony na niebieskozielony, a potem na ûóîty da w efekcie czerï
(teoretycznie).
Kolejne filtry odejmujâ "swojâ czëôê" promieniowania widzialnego
i dlatego mówimy, ûe mieszanie subtraktywne dâûy do czerni.
Metodë të stosujemy równieû posîugujâc sië farbami, tak w
malarstwie, jak i w poligrafii. Poniewaû kolory (fizyczne) farb
nie mogâ byê idealne, czerï uzyskana w ten sposób jest wîaôciwie
kolorem ciemnobrunatnym. Dlatego w poligrafii stosuje sië
dodatkowo czarnâ farbë. Peîne odwzorowanie barwnego rysunku
nastëpuje wiëc po zastosowaniu nie trzech, ale czterech kolorów.
W mieszaniu SUBTRAKTYWNYM mamy do czynienia z MIESZANIEM FARB.
Mieszanie ADDYTYWNE polega na MIESZANIU PROMIENIOWAÏ. Termin
pochodzi od angielskiego sîowa ADD (dodawanie). Kolejne barwy
ôwiatîa widzialnego po dodaniu do siebie utworzâ kompletne,
biaîe, ôwiatîo. Ekran monitora komputerowego ôwieci. W zwiâzku z
tym posîugujâc sië programami malarskimi dokonujemy mieszania
addytywnego barw. Jeûeli puôcimy barwne plamy ôwiatîa z trzech
reflektorów (np. w teatrze) na biaîy ekran, to stosujâc trzy
róûne barwy uzyskamy róûne kolory w miejscu pokrywania sië
barwnych plam na ekranie.
Czerwone ôwiatîo naîoûone na zielone da w efekcie kolor ûóîty.
Czerwone ôwiatîo naîoûone na niebieskie da kolor purpurowy.
Zielone naîoûone na niebieskie da kolor niebieskozielony.
Naîoûenie na siebie ôwiatîa czerwonego, zielonego i niebieskiego
da w efekcie biaîâ plamë ôwiatîa.
Mieszanie addytywne dâûy do bieli i jest charakterystyczne dla
techniki telewizyjnej. Trzy plamy koloru, zmieszane przez dodanie
ôwiateî, przedstawia pierwsza ilustracja. Mamy tam teû cztery pary
fragmentów okien z regulatorami koloru z Deluxe Painta.
Identyczne (lub podobne) suwaki ma kaûdy liczâcy sië program
malarski, czy to dla komputera MacIntosh, IBM, czy Amiga.
Przykîady pokazujâ ustawienia suwaków dla czerwieni, zieleni,
niebieskiego i koloru bliûej nie okreôlonego, powiedzmy --
brunatnozielonego. Suwaki pokazane sâ w pozycjach dla dwóch typów
(modeli) barw mieszania addytywnego -- RGB i HSV. Suwaki pokazujâ
odpowiednio dla RGB: 15-0-0 -- czerwieï, 0-15-0 -- zieleï, 0-0-15
-- niebieski i 11-10-7 -- czwarty kolor. Druga ilustracja
to model barw RGB. Przedstawia sië go w postaci szeôcianu.
Na kolejnych naroûnikach mamy czyste kolory: czerwony -- RED (R),
zielony -- GREEN (G), niebieski -- BLUE (B), ûóîty -- YELLOW (Y),
purpurowy -- MAGENTA (M), niebieskozielony -- CYAN (C), brak
koloru albo czerï -- BLACK (K) oraz biel albo czyste biaîe
ôwiatîo -- WHITE (W). Trzy kolejne suwaki R, G i B przesuniëte ma
maksimum dajâ pierwsze trzy kolory, a R i G -- ûóîty, R i B --
purpurowy, G i B -- niebieskozielony. Logikë tego modelu widaê na
ilustracji. Punkt wyznaczajâcy konkretny kolor znajduje sië
gdzieô na szeôcianie. Czysta czerwieï to naroûnik szeôcianu.
W miarë przesuwania sië po krawëdzi w kierunku czerni (K)
czerwieï staje sië coraz mniej intensywna, ciemniejsza. Punkt
poôrodku ôciany, wyznaczonej naroûnikami R-M-W-Y, jest równo
oddalony od czerwieni, purpury, bieli i ûóîtego -- daje to nam
jakâô odmianë koloru cielistoróûowego.
Trochë to rozumowanie moûna przeôledziê na ilustracji. Niestety,
mogîem wykonaê rysunki modelu barw tylko w trybie HAM6 i
prawdopodobnie reprodukcja na stronie bëdzie jeszcze gorsza od
niezbyt dobrego oryginaîu. Z popularnych programów malarskich
najlepszy do cieniowania takich ilustracji jest DigiPaint III,
ale ideaîem byîoby wykonanie tego w IFF24. Wymieniam tu
DigiPaint, poniewaû program ten ma wygodnâ opcjë cieniowania
pîaszczyzn róûnymi barwami z róûnych stron powierzchni. Wracajâc
do naszego szeôcianu, to zwraca uwagë fakt, ûe jeden z naroûników
reprezentuje biel, a przeciwlegîy czerï. Kolory "bliskie" jednemu
z naroûników ciemniejâ, po przeciwnej stronie, inne ulegajâ
rozjaônieniu. Niestety, zwykîa geometria przy obliczaniu
wartoôci RGB (zakres 0-15) na takim modelu nie ma zastosowania.
Czasem moûna zobaczyê w niektórych programach rozwiniëcie ôcian
takiego modelu w postaci pól, z których moûna "pobraê" odpowiedni
kolor. Na nieco innej zasadzie zbudowany jest model HSV. Kolor ma
swoje miejsce w kole barw i wartoôê odpowiadajâcâ kâtowi punktu
na obwodzie koîa -- od zera do trzystu szeôêdziesiëciu stopni.
Wyjaôniaîem to w grudniowym odcinku "Deluxe Paint w praktyce".
Przypominam wiëc tylko, ûe w modelu HSV czerwieï ma kât 0 lub 360
stopni, a od zera przechodzi stopniowo w ûóîê, zieleï, bîëkit i
tak dalej, aû znowu wróci do czerwieni. Model HSV (dokîadnie
to samo co HSB) zostaî wyprowadzony z atrybutów barwy. Poza
omówionym juû kolorem (a wîaôciwie jego miejscem w kole barw) -
HUE (H), mamy tu jeszcze nasycenie i jaskrawoôê. Nasycenie to
SATURATION (S). Zmniejszajâc nasycenie postëpujemy tak jakbyômy
odbierali energië úródîu ôwiatîa. Reflektor przygasa, barwa staje
sië coraz ciemniejsza. Jaskrawoôê BRIGHTNESS (B), zwana czasem
wartoôciâ VALUE (V), to postëpowanie odwrotne. Dodajemy energii
reflektorowi, ôwiatîo staje sië coraz jaôniejsze, aû do bieli.
Teoria mówi, ûe kolor (HUE) to barwa pozbawiona atrybutów --
nasycenia i jaskrawoôci. Na kole barw mamy barwy nieczësto
spotykane w naturze -- kolory czyste. Polny kamieï, kolor râk czy
cieï odbity przez niebieski kafelek na szarâ podîogë to czysty
kolor wzbogacony o atrybuty. Suwaki na pierwszej ilustracji
pokazujâ odpowiednie wartoôci HSV: 0-100-100 -- czerwieï,
120-100-100 -- zieleï, 240-100-100 -- niebieski. Sâ to kolory
czyste. Czwarty kolor, a wîaôciwie barwa, to 45-36-72. Mamy tu
kolor o numerze kâta czterdzieôci piëê, czyli gdzieô pomiëdzy
pomaraïczowym a ûóîtym, oraz trzydzieôci szeôê procent nasycenia
(S) i siedemdziesiât dwa procent wartoôci (V). Dziwnie to nazwaê
jaskrawoôciâ. Bardziej przekonujâce byîoby 100-72 = dwadzieôcia
osiem procent jaskrawoôci, ale tak wyskalowane sâ suwaki HSV w
programach z modelem HSV. Lepszym sîowem jest tu uûywane czasem
okreôlenie "intensywnoôê". Kolor w miarë zwiëkszania wartoôci V
wyodrëbnia sië z biaîego tîa, aû staje sië coraz bardziej wyraúny
-- intensywny.
Dobierajâc jakâô barwë "na oko" îatwiej jest posîugiwaê sië
modelem HSV niû RGB. Mamy, powiedzmy, do ustawienia jakiô kolor
odpowiadajâcy barwie naszych skórzanych butów. Wybierzemy
przypuszalnie kolor pomaraïczowoczerwony, przyciemnimy za pomocâ
zmniejszania nasycenia i ewentualnie "rozbielimy", zmieniajâc
wartoôê V. Przestrzenny model HSV przedstawia ilustracja trzecia.
Jest to ostrosîup o podstawie szeôciokâta, odwrócony
wierzchoîkiem w dóî. Na podstawie mamy kolory uîoûone w koîo.
Szeôê waûniejszych kolorów znajduje sië na wierzchoîkach
szeôciokâta. Ôrodek podstawy wyznacza czysta biel. Im bliûej
ôrodka, tym kolory na podstawie bardziej sië rozjaôniajâ.
Wierzchoîek figury to czerï. Im bliûej wierzchoîka, tym ciemniej.
Nasza wybrana barwa butów znajduje sië prawdopodobnie gdzieô
wewnâtrz figury. Rozpoczëîa wëdrówkë na podstawie w pobliûu
ûóîtego i pomaraïczowego, poszîa nieco po podstawie do ôrodka i
zeszîa trochë niûej w kierunku ciemnoôci wierzchoîka. Model ten,
podobnie jak RGB, nie daje sië îatwo przeliczaê normalnymi
metodami. Do tego celu sîuûâ specjalne algorytmy. Poniewaû oba
udaîo mi sië szczëôliwie znaleúê, zaczynamy opis po kolei od RGB.
Algorytm zaczerpnâîem z ksiâûki Michaîa Jankowskiego "Elementy
grafiki komputerowej", Wydawnictwa Naukowo-Techniczne, Warszawa,
1990. Umieszczony na stronie 230. algorytm zmieniîem na jëzyk
HisoftBasic, który jest jëzykiem na tyle prostym, ûe z pewnoôciâ
algorytm da sië îatwo przerobiê na dowolny inny jëzyk
programowania. Przeliczamy model HSV na RGB. Pobieramy kolejno
wartoôê H z zakresu 0-360 i S oraz V z zakresu 0-100. Zmienna "I"
to INT, wartoôê caîkowita zmiennej, a dalej sprawa jest juû
raczej prosta. Algorytm odnajduje poszczególne miejsca szeôcianu
RGB i podaje wartoôci czerwieni, zieleni i niebieskiego. Drugi
algorytm byîo zdecydowanie trudniej odnaleúê. Jakoô nikt nie
chciaî zamieszczaê wzoru na przeliczanie "w drugâ stronë".
Znalazîem to dopiero w pracy zbiorowej "Grafika komputerowa --
metody i narzëdzia", Wydawnictwa Naukowo-Techniczne, Warszawa
1994. Poniewaû w grubym tomie nikt z autorów nie wspomniaî
sîowem o Amidze, ksiâûki "za karë" nie kupiîem, ale algorytm
przepisaîem. Wzór podany byî nie tylko w obcym mi jëzyku
programowania, ale twierdziî, ûe w niektórych wypadkach wartoôê
"H" jest niewyliczalna. Jako laik nie przejâîem sië tym, tylko
pracowicie dîubaîem w algorytmie (teû chyba odpisanym przez
autorów, bo fragmenty "sîowne" byîy po angielsku) i po paru
godzinach stworzyîem algorytm w HisoftBasicu, który nie tylko
dobrze dziaîa, ale wartoôê "H" jest zawsze do wyliczenia.
Algorytm przeliczania RGB na HSV podaje ostatnia ilustracja.
Pobieramy wartoôci R, G, B z zakresu 0-15. Dalej mamy wyliczanie
najwiëkszej pobranej wartoôci i najmniejszej. Moûna to zastâpiê
odpowiedniâ funkcjâ, ale to, co napisaîem, teû liczy dobrze.
Pierwsza linijka z MAX oblicza maksimum, gdy pobieramy trzy róûne
wartoôci. Poniewaû wzór w wypadku odpowiedzi TRUE (prawda) zwraca
wartoôê (-1), zastosowaîem zmiennâ pomocniczâ T. Druga linijka
podaje, co robiê w wypadku, gdy dwie pobrane wartoôci sâ równe i
maksymalne. Trzecia linijka -- gdy wszystkie wartoôci sâ równe.
To samo dotyczy wartoôci minimalnych. Dalej "leci" juû normalnie,
podajâc na koïcu odpowiednie wartoôci koloru, nasycenia i
intensywnoôci. Mam w ten algorytm niewâtpliwie pewien twórczy
wkîad, w zwiâzku z tym nie moûe on byê wzorem elegancji
programowania. Jest (na co mam nadziejë) wyîoûeniem metodâ "kawa
na îawë" sposobu, który pozwoli przerobiê go kaûdemu programiôcie
na odpowiadajâcâ mu formë i jëzyk. Staraîem sië wyeliminowaê
bîëdy podczas druku, dlatego podajë algorytmy w postaci rysunków.
Poniewaû, jak wiadomo, co moûe byê pomylone, pomylone bëdzie,
zalecam Czytelnikom skontrolowanie dziaîania algorytmów.
<r>
Wartoôci RGB 15 0 0 to dla HSV 0 100 100,
RGB 15 15 15 HSV 0 0 100,
RGB 0 0 0 HSV 0 0 0,
RGB 6 9 0 HSV 80 100 60,
RGB 9 3 14 HSV 272 78 93,
RGB 15 0 15 HSV 300 100 100,
RGB 5 3 4 HSV 330 40 33.
<txt> Algorytmy pozwalajâ przeliczyê wartoôci w obie strony i
dajâ wyniki zgodne z tabelkâ, a kto nie wierzy, niech weúmie
wartoôci z dowolnego programu malarskiego i sprawdzi.