MODELE BARW I ALGORYTMY 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ê. Stanisîaw Wësîawski 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. 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. 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.