EDYCJA FILTRÓW W PROGRAMIE PERSONAL PAINT (1) Personal Paint ma unikatowâ moûliwoôê edycji i zmiany przez uûytkownika systemowych filtrów. Ta wîaôciwoôê sprawia, ûe nawet zwolennicy innych programów, posiadajâcych lepszy zestaw filtrów do zmiany obrazu, muszâ przyznaê w tej dziedzinie wyûszoôê Personal Paintowi. Nareszcie uûytkownik moûe sobie sam stworzyê dowolny filtr! Stanisîaw Wësîawski Od razu warto zaznaczyê, ûe program byîby jeszcze lepszy, gdyby operowaî na trybach o wiëkszej liczbie kolorów, takich jak HAM8 czy pliki 24-bitowe. Ale i tak w wersji 6.1 moûna zaîadowaê wszystko, co oferujâ datatypes, i zmieniê na IFF 256 kolorów. Apetyt roônie w miarë jedzenia i naleûy oczekiwaê, ûe nastëpne wersje Personala bëdâ uwzglëdniaê takie potrzeby. Wracajâc jednak do zasadniczego tematu, warto zobaczyê, jak edycja filtrów wyglâda w programie. Wîâczenie opcji EDIT przy wybranym filtrze otwiera okno zawierajâce nazwë filtru, typ oraz gadûety zwane Kernel, Division Factor i Bias. Typy filtrów dzielâ sië na Convolution (zwijany), Popularity (popularny), Random (losowy), Dispersed (rozproszony), Clustered (skupiony), F-S (Floyd-Steinberg), Environment Transparency ("przezroczystoôê stron"), Brush Transparency ("przezroczystoôê pëdzli") i Stereogram. Nie wnikajâc za bardzo w teorië moûna stwierdziê, ûe niektóre z nich nie uwzglëdniajâ pozostaîych gadûetów, a inne pracujâ tylko monochromatycznie (na kolorze tîa i pióra, np. Floyd-Steinberg). Podrëcznik wyjaônia, ûe np. typ Convolution sumuje wartoôci piksela i jego "sâsiadów", wpisane w matrycë Kernel, przemnoûone przez ich wartoôci RGB, po czym dzieli wynik przez wartoôê wpisanâ w Division Factor (wspóîczynnik) i dodaje do wartoôci wpisanej w Bias (odchylenie). W efekcie piksel najbardziej zbliûony wartoôciami RGB do teoretycznie wyliczonego jest umieszczany zamiast poprzedniego. Do tego sâ jeszcze dwa dodatki do Bias -- DeltaX i DeltaY. Wartoôê wyliczonâ przypisujâ one pikselowi na prawo i pikselowi poniûej. Brzmi to trochë mëtnie, ale jest pewnâ wskazówkâ w eksperymentach przy edycji nowych filtrów. Na pierwszy ogieï idzie opcja LIGHTEN +25%. Jest to rodzaj filtru, po który uûytkownik programu siëgnie prawdopodobnie w pierwszej kolejnoôci. Moûna, co prawda, uûyê doskonaîej opcji (szkoda, ûe nieobecnej w Deluxe Paint) pt. ADJUST PALETTE. Regulujemy tam natëûenie koloru, jaskrawoôê i kontrast oraz wartoôci R, G i B. Coô jak w telewizorze. Dziaîa ôwietnie, ale oczywiôcie na caîym obszarze ekranu, i zmienia definitywnie paletë. Filtry natomiast mogâ dziaîaê na ekranie, pëdzlu lub fragmencie obrazu, uûywajâc barw istniejâcej palety. Od niedawna mam A1200 i mogë operowaê 256 kolorami w wysokiej rozdzielczoôci, dziëki czemu da sië przeôledziê efekty pracy z filtrami niejako "w peînej krasie". Osobnym zagadnieniem jest to, co Czytelnik zobaczy na stronie Magazynu. Ilustracja po przesîaniu do redakcji zostanie w Wydawnictwie zamieniona na GIF lub TIFF, przekazana do naôwietlarni i na koniec do druku. Kolor, który widzë przed sobâ na monitorze, w procesie produkcji Magazynu ulegnie nieuchronnym deformacjom. O róûnicach miëdzy barwâ na monitorze a farbâ na papierze juû pisaîem i trzeba sië pogodziê z faktem, ûe ilustracja bëdzie tylko pewnym przybliûeniem, które postaram sië uzupeîniê opisem. Pierwsza ilustracja przedstawia fragment zdjëcia zaîadowanego do Personala w formacie JPG i przeksztaîconego automatycznie na 256 kolorów. Prostokât po lewej pokazuje operacjë Lighten +25%. Po obejrzeniu opcjâ Edit parametrów filtra moûna zrozumieê, skâd sië wziëîo owo "25%". W matrycy pikseli (5 x 5) wartoôê Kernel, przypisana centralnemu pikselowi, wynosi 1. Po pomnoûeniu przez wartoôci R, G i B piksela przez 1 i podzieleniu przez DivF równemu 1 otrzymujemy to samo, co byîo. Jedynâ zmianë przyniesie dodanie Bias=64. Kaûdy piksel bëdzie wiëc miaî wyûszâ wartoôê RGB o 64 i bëdzie przez to jaôniejszy. A 64 to 1/4 z 256, czyli 25%. Powiëkszamy fragment i sprawdzamy. Mamy fragment o wartoôciach RGB=100, 138 i 180. Po dodaniu 64 powinno wyjôê 164, 202 i 244, tymczasem po rozjaônieniu jest tam 136, 176 i 220! Po chwili namysîu i popatrzeniu na paletë moûemy stwierdziê, ûe program zrobiî, co mógî -- wybraî istniejâcy kolor najbardziej zbliûony do wyliczonego teoretycznie. Z tego wîaônie powodu program naprawdë idealny powinien podczas pracy dobieraê kolory z palety 24-bitowej. 256 barw to czasami moûe byê za maîo! Uzbrojeni w takâ wiedzë moûemy stworzyê nowe filtry Lighten +12% i Lighten +6%. Opcjâ NEW otwieramy okno edycji wpisujâc nowâ nazwë, stare wartoôci Kernel oraz DivF i zmieniajâc tylko Bias na 32 i 16. Poniewaû filtry (Process) moûna egzekwowaê za pomocâ opcji LASSO poprzez rëczne zaznaczanie dowolnego obszaru na obrazie, takie "delikatne" odmiany Lighten bardzo sië przydadzâ. Oczywiôcie zaleûy to bardzo od odpowiednio dobranej palety. Powiëkszenia fragmentów obrazu na dole ilustracji pokazujâ, ûe w niektórych wypadkach efekt dziaîania tej opcji moûe byê maîo widoczny. Druga ilustracja pokazuje manipulacje gadûetem Division Factor (DivF). Zmiana wartoôci DivF=1 na 2, 3 i 4 powoduje, jak îatwo sië domyôliê, ôciemnienie obrazu. Teoretycznie dzielimy przez, powiedzmy, 2, otrzymujemy niûszâ wartoôê (ciemniejszy kolor) i dodajemy Bias (rozjaôniamy). Potem program znajduje w palecie najbliûszy realny odpowiednik koloru. Obok pokazaîem odwrotnoôê Lighten czyli Darken. Jaka jest róûnica? Patrzâc na monitor powiedziaîbym, ûe Darken to jakby patrzenie przez sîoneczne okulary, a zmodyfikowane Lighten to scena zasnuta dymem. Kolory przy Darken sâ czystsze, a w zmodyfikowanym Lighten jakby "brudniejsze" i "mniej barwne". Nowe filtry wpisane przez NEW naleûy zapisaê (naciskajâc klawisz [F8]) do zestawu Startup_1.set lub innego, który moûna îatwo wprowadziê podczas pracy. Jedynym kîopotem, jaki nas moûe spotkaê, jest niezrozumiaîa nazwa filtru. Po pewnym czasie, jeûeli za bardzo namnoûymy "nowe byty", moûemy zapomnieê, co który filtr ma robiê. Radziîbym zostawiê sobie jeden filtr "bez nazwy", który moûna modyfikowaê podczas pracy, bez koniecznoôci zapisywania. Bardzo przydatnym filtrem jest Randomize. Czësto powiëkszamy fragment obrazka (zdjëcia) i otrzymujemy w wyniku automatycznie powiëkszone piksele. Chcâc przywróciê takiemu wycinkowi dawny charakter naleûy przywróciê maîe piksele. Jedyny sposób to "rozbiê" je opcjâ PROCESS RANDOMIZE. Filtr ten odsîoniëty opcjâ EDIT ujawnia inny schemat dziaîania. Gadûety DivF oraz Bias sâ nieczynne, a typ Random pozwala manipulowaê jedynie wartoôciami matrycy -- Kernel. Piksele o wartoôci Kernel=0 nie bëdâ zmienione (przesuniëte). Wartoôê 1 daje pikselom szansë na ich (losowy) wybór do przesuniëcia, a wartoôê, powiedzmy 2, zwiëksza szansë dwukrotnie. W centrum matrycy pikseli dla Randomize Low widnieje wartoôê 2, otoczona z czterech stron jedynkami. Dla odmiany Randomize High mamy caîâ matrycë (5 x 5) pokrytâ jedynkami z wyjâtkiem czterech zer w naroûnikach. Z czego pîynie prosty wniosek, ûe Low najsilniej dziaîa na ôrodkowy piksel, a sîabiej na piksele sâsiednie. W High mamy równomierne dziaîanie na duûâ "plamë" pikseli. Po lewej stronie trzeciej ilustracji widaê powiëkszenia pracy Randomize Low i High na wzór zîoûony z kwadratowych pól. Trzecia "firmowa" odmiana filtra to Randomize Oblique. Dziaîanie ukoône opcji widaê wyraúnie podczas edycji. Matrycë przekreôla seria jedynek, ciâgnâca sië z prawego górnego naroûnika do lewego dolnego. Sâ to oczywiôcie miejsca wyróûnione i taki teû efekt widaê na przkîadzie. Daje to olbrzymie pole do kombinacji tworzenia nowych matryc. Moûemy próbowaê róûnych modeli, a najbardziej przydatny zapisaê pod nowâ nazwâ. Wykonaîem dwa rozjaônienia fragmentu powiëkszenia oka dziewczyny z ilustracji. Czterokrotne powiëkszenie ujawnia juû wyraúnie duûe kwadraty pikseli. Uûycie Randomize rozbija strukturë, a filtr Blend pozwala zîagodziê "ziarnistâ" fakturë przez dodanie odcieni poôrednich do obrazu. Kîopot sprawia tylko dobranie odpowiedniego rodzaju Randomize, aby rysunek obrazu nie ulegî zbyt silnemu rozmyciu. Na swoje potrzeby wykonaîem dwa nowe filtry, dziaîajâce doôê równomiernie we wszystkich kierunkach. Pierwszy to Spiral, gdzie seria jedynek wartoôci Kernel wëdruje po matrycy spiralnie od ôrodka na zewnâtrz, rozdzielona od siebie zerami. Drugi to Circle, w którym ôrodkowa jedynka ma za sâsiadów kolejno zera i jedynki we wszystkich oômiu kierunkach dookoîa. Dziaîanie filtrów widaê na przykîadach. Dziaîajâ doôê silnie, ale równomiernie. Przykîady powiëkszeï oka nie prezentujâ pracy konkretnych filtrów, nie byîoby ich zresztâ widaê wyraúnie na ilustracji. Sâ tam zastosowane róûne filtry na caîym obszarze obrazu i na jego fragmentach. Do tego trochë retuszu opcjami Blend, Darken i Lighten. Tutaj paradoksalnie moûna sië spodziewaê dobrego wyniku po wydrukowaniu ilustracji. Jeûeli powiëkszone oko wyglâda naturalnie i jest wyraúne, to znaczy, ûe zostaîy uûyte wîaôciwe filtry. Jedynâ niedogodnoôciâ opcji Randomize jest nieuniknione rozbijanie krawëdzi obrazu, dlatego teû lepiej jâ stosowaê na wewnëtrznych fragmentach obrazu albo obcinaê "postrzëpione" krawëdzie rysunku po skoïczonej pracy. Niesamowitâ wrëcz liczbë kombinacji daje îâczenie efektów dziaîania kilku filtrów po kolei. Czëôê tych moûliwoôci pokazuje czwarta ilustracja. Rysunek kamienia (w lewym górnym naroûniku) zmieniony zostaî filtrem Floyd-Steinberg i Water Color Oblique (w ôrodku). Pierwszy filtr zamienia wielokolorowy rysunek na jednokolorowy (koloru "pióra") obrazek zîoûony z kropek róûnej gëstoôci (na kolorze "papieru"). Drugi filtr imituje skoône pociâgniëcia pëdzlem, ale zachowuje barwy oryginaîu. W prawym górnym rogu mamy Water Color wykonany z Floyda-Steinberga. Rysunek pozostaî monochromatyczny, ale piksele "zlepiîy sië" w plamy. Water Color Oblique wykonany z Floyda Steinberga daî rysunek nakreôlony jakby piórkiem i tuszem. Rysunek typu Floyd-Steinberg potraktowany filtrem Randomize High daî w wyniku obraz gâbki, a naîoûone na to dziaîanie Water Color stworzyîo rysunek wykonany okrâgîymi plamami, jakby grubym flamastrem lub starym pëdzlem i tuszem. Dolny ôrodkowy rysunek prezentuje dziaîania rozjaôniajâce na obrazku typu Water Color. Poniewaû filtr moûna nakîadaê takûe jako brush, naîoûyîem monochromatyczny rysunek Floyda-Steinberga opcjâ LIGHTEN na Water Color. Dziaîanie rozjaôniajâce wywoîywane byîo oczywiôcie tylko pod "widocznymi" pikselami nakîadanego brusha typu Matte, czyli bez pikseli tîa. Poniewaû "gëste" grupy pikseli odpowiadajâ cieniom, tam teû rozjaônianie byîo najsilniejsze. Na prawo widaê podobny, ale mocniejszy efekt. Naîoûyîem tam Water Color z lewego dolnego naroûnika. Tym razem na oryginaî obrazka naîoûyîem wiëksze plamy rozjaôniajâce i uûyîem opcji +25%. Widaê tam teû (przynajmniej ja widzë na monitorze) efekty nieoczekiwane, które mogâ sië przydaê przy pracy nad fakturami i materiaîami. Powstaîy delikatne fale i "faîdy" wynikîe z rozjaôniania plamami brusha Water Color cieni oryginaîu po naîoûeniu jednego obrazka na drugi. Piâta ilustracja przedstawia eksperymenty z opcjâ BLUR. Mimo pewnego czasu, jaki na to poôwiëciîem, nie jestem w stanie zrozumieê mechanizmu dziaîania tego filtra. Sam efekt jest prosty i widoczny na obrazie. Blur powoduje nieostroôê albo zmiëkczenie obrazu. Przejôcia kolorów stajâ sië îagodne, a krawëdzie pozbawione kontrastów. Ilustruje to przykîad zdjëcia dwóch dziewczyn na czerwonym tle. Obrazek po prawej dziëki opcji Blur zostaî wzbogacony o gîëbië wynikajâcâ ze zróûnicowania "ostroôci". Efekt ten wykorzystaîem nawet w pierwszym obrazku, poprawiajâc ziarnistâ strukturë obrazu modelek. Wygîadziîem tylko twarze, pozostawiajâc tîo i wîosy bez zmian. Gîëbia wynikajâca z nieostroôci drugiego obrazka zostaîa wykonana dwukrotnie naîoûonâ opcjâ BLUR HIGH. Co tu jest niejasne? Mechanizm dziaîania. Blur naleûy do typu Convolution, czyli dziaîa tak samo jak Darken i Lighten. Matryca pikseli z wartoôciami Kernel jest dzielona jak zwykle przez DivF i dodawana do Bias. Dla Low wartoôê DivF wynosi 6, a dla High 21. Bias jest zawsze równe 0. W wypadku Kernel=1 wiëc wartoôê RGB, powiedzmy 120, jest dzielona przez 6 (lub 21) i dodawana do tej pierwszej wartoôci (bo Bias=0). Powinno to daê wartoôê 140 (120 + 120/6). Cokolwiek by sië wiëc dziaîo, piksele ulegnâ rozjaônieniu. Tymczasem, jak to widaê na przykîadach, efekt jest o wiele bardziej zîoûony. Dlaczego akurat 6 i 21? Próby zmiany wartoôci 21 (Blur High) na 18 i 24 dajâ raz obraz jaôniejszy, a innym razem ciemniejszy. Dlaczego tak sië dzieje? Eksperyment z Blur Low, polegajâcy na zmianie DivF z 6 na kolejno 3, 4, 5, 6, 7 i 8, powoduje zmiany jasnoôci obrazu. Widaê to po lewej stronie ilustracji. Okazuje sië, ûe tylko wartoôê 6 dla Blur Low, a 21 dla Blur High sâ wîaôciwe, poniewaû zmiëkczajâ obraz nie powodujâc zmian jego jasnoôci. Po namyôle postanowiîem dodaê ilustracjë szóstâ, na której widaê dziwne dziaîanie filtrów typu Convolution. Wykonaîem szachownicë 5 x 5 pikseli i powieliîem osiem razy. Na drugiej i trzeciej wykonaîem Blur Low i High, a na pozostaîych wszystkie opisane odmiany Darken i Lighten. Pierwsza szachownica pozostaîa oczywiôcie bez zmian. Wyniki (w ramkach koloru niebieskozielonego) powiëkszyîem 16 razy (cztery razy [Shift][H]) i umieôciîem na ilustracji, dodajâc gîowë îabëdzia analogicznie spreparowanâ. Nieszczësny îabâdek jest wîaôciwie tylko ozdobâ, poniewaû zmiany na nim przeprowadzone sâ sîabo widoczne nawet na moim monitorze. Co innego szachownice. Tam uwaûny Czytelnik moûe nawet przypuszczaê, ûe zrobiîem bîâd, zamieniajâc miejscami efekty Low i High. Matryca dla Blur Low jest maîa i ma w centrum Kernel=2, a Low pokrywa seriâ jedynek prawie caîy obszar. Tymczasem przykîad z szachownicâ pokazuje coô dokîadnie odwrotnego -- równomierny rozkîad w Low i ciemny ôrodek w High! Ale tak to jest naprawdë. Sprawdzaîem dwa razy. Szachownica w Low zmieniîa na dodatek ukîad pól jasny-ciemny na przeciwny. Wszystko wskazuje na to, ûe tajemnica tkwi w uwadze o sumowaniu wartoôci "sâsiadów" piksela w typie Convolution. Przy filtrach rozjaôniajâcych i przyciemniajâcych nie byîo tego problemu, poniewaû w centrum matrycy tkwiîa jedynka otoczona zerami, a wiëc brany byî pod uwagë tylko jeden centralny piksel. Przy Blur mamy do czynienia z caîym "polem" pikseli biorâcych udziaî w obliczeniach tylko po to, aby zmieniê jeden centralny piksel. Potem analizowany jest kolejny piksel i maszynka liczâca zaczyna robotë od nowa. Wspomniana niebieskozielona ramka nie byîa polem dziaîania filtru, ale byîa brana pod uwagë przez algorytm liczenia Blur. Na upartego moûna to sprawdziê. Sprawdzajâc pierwszy naroûny punkt (brunatnoczerwony) liczenie powinno wyglâdaê z grubsza (dla Blur Low) tak: Dwa razy RGB tego punktu, co daje w sumie 374, 0, 0. Jeden punkt z doîu i jeden z prawej dajâ razem 0, 510, 34. Jeden punkt z góry i jeden z lewej -- kolory ramki -- dajâ w sumie 0, 510, 510. Wszystko to razem wynosi 374, 1020, 544. Podzielone przez DivF=6 wynosi 62, 170, 91. Program wybraî z palety kolor 68, 170, 119 jako najbardziej zbliûony do wartoôci teoretycznej. Posuwajâc sië dalej w prawo trzeba uwzglëdniê juû wstawiony kolor po lewej stronie. I tak dalej, i tak dalej. Widaê z tego, ûe, jak juû wspomniaîem, program robi, co moûe, a ôciôle to, na co mu pozwala istniejâca paleta. Widaê z tego, jak waûnâ rolë peîni dobre wybranie kolorów do palety. Ja stosowaîem w tym przykîadzie programowâ paletë dla 256 kolorów. Edycja filtrów Personal Painta daje olbrzymie pole do eksperymentów i jest bardzo ciekawa. Dlatego teû oczywiôcie, ciâg dalszy nastâpi.