Witamy, Gość. Zaloguj się lub zarejestruj.

Autor Wątek: Podstawy przetwarzania obrazów  (Przeczytany 1394 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Abik

Podstawy przetwarzania obrazów
« dnia: Kwiecień 04, 2011, 22:31:17 »
Aby zczaić tego tutka warto wiedzieć jak komputer rozumie kolory, no i zakładam, że to już wiecie bo o tym pisałem.
Różne programy różnie sobie kolorki prezentują, tu będziemy używać prostego dla ludzi RGB w zakresach od 0 do 255 dla każdej składowej.

1. Rozjaśnianie/przyciemnianie obrazu

Chyba najprostsza operacja jaką można wykonać i jaką można sobie najłatwiej wyobrazić i zrozumieć.
Pamiętacie? W RGB ustawienie wszystkich składowych na 255 (wartość maksymalna) oznaczało kolor biały, odwrotna operacja pozwalała uzyskać kolor czarny.
Z tej własności właśnie tutaj skorzystamy. Do każdej składowej dodajemy(lub odejmujemy) po prostu jakąś wartość co zbliża nas do wartości maksymalnej(lub minimalnej jeśli odejmujemy). Bardzo ważną rzeczą, o której należy tu pamiętać jest to, że tę wartość dodajemy(lub odejmujemy) od KAŻDEJ składowej, dzięki temu nie zmieniamy proporcji między kolorami, mieszają się tak samo, więc uzyskujemy ten sam odcień tylko jaśniejszy (lub ciemniejszy).
W photoshopie wygląda to tak:

Technicznie, do składowej R dodajemy na przykład 100, do G dodajemy 100 i do B dodajemy 100 i mamy rozjaśniony obraz. Odejmujemy jeśli przyciemniamy.
Dobre pytanie, co jeśli R = 231, rozjaśniamy o 100, no i mamy łącznie 331, a przecież zakres mamy do 255. Mamy problem. Który można łatwo rozwiązać, wystarczy wszystkie wartości powyżej zakresu i poniżej (poniżej zera czyli ujemne) traktować jako maksymalne. Tzn. jeśli mamy wartość ponad maksymalną to mamy kolor biały, jeśli poniżej minimalną to czarny (tzw. arytmetyka nasycenia).

2. Kontrast

Jak już mamy odpalone narzędzie gdzie zmieniamy sobie jasność, to możemy od razu zająć się kontrastem. Jest on znacznie bardziej skomplikowany, ale dla nas nic trudnego.
Nie będę tu pokazywać nowego screena bo ten suwak od kontrastu działa dokładnie dokładnie tak samo jak ten od jasności, w prawo kontrast się zwiększa, w lewo zmniejsza. Żadnej filozofii.
Znacznie ciekawsze rzeczy dzieją się tutaj pod maską tego gadżetu. No bo zastanówmy się w jaki sposób zwiększa się kontrast? Jasne staje się jaśniejsze, a ciemne ciemniejsze.
Mamy tu taki ciekawy trik, o którym fajnie pamiętać.
Od każdej składowej (R, G i B) odejmujemy 128, to powoduje, że zakres naszych wartości zmienia się na wartości od -128 do 127. Teraz, mnożymy każdą składową razy coś, co to zależy od nas i zależy od tego ile chcemy zmienić kontrast. To o czym należy tu pamiętać, to, że jeśli kontrast zwiększamy to mnożymy przez liczby większe od 1, a jeśli zmniejszamy to mnożymy przez liczby mniejszą od 1, ale większą od 0(np. 0.5).
Na koniec dodajemy 128 i kontrast gotowy.
Np. jak mamy piksel R:95 G:12 B:201

to obliczenia wyglądają tak:
składowa R: 95 - 128 = -33, to mnożymy razy 3, dostajemy -99, dodajemy 128 i mamy 29
składowa G: 12 - 128 = -116, razy 3 to jest -348, plus 128 to jest -220, czyli dla nas 0 :D
składowa B: 201 - 128 = 73, razy 3 to 219, plus 128 to 347, czyli dla nas 255
29, 0, 255 to:

to może się wydawać zupełnie niemożliwe, ale weźcie sobie zróbcie obraz z tym pierwszym kolorem na całości i podnieście kontrast i zobaczycie, że ten kolor faktycznie dąży do tego, który wyliczyliśmy.

3. Wyświetlanie pojedynczych składowych
Ok, znalazło się coś prostszego niż rozjaśnianie i przyciemnianie obrazu, na tyle, że nie będę tu się wielce rozpisywać bo nie ma o czym. Jeśli chcemy wyświetlić tylko składową R obrazu to wszystkie inne zerujemy, jeśli chcemy wyświetlić składową G, to zerujemy pozostałe (R i B), jeśli B, to zerujemy R i G. Proste?
Dla pewności. Mamy kolor 2,234,78:

ale obleśny... no i teraz z tego koloru, właściwie obrazu, składającego się z jednego koloru, chcielibyśmy wyświetlić składową R to G i B ustawiamy na zero i mamy kolor 2,0,0... bardzo ciekawy kolor, który właściwie można by nazwać czarnym:

no jak widać za dużo czerwieni to u nas nie było, co mogliśmy stwierdzić prawie natychmiastowo po niskiej wartości składowej R.

4.Inwersja kolorów

Odwracanie kolorów jest dość łatwe. Pomyślcie, jeśli mamy niską wartość składowej R, średnią wartość składowej G i wysoką składowej B, to kolor odwrotny do takiego miałby wysoką składową R, średnią G i niską B. Jeśli nasz zakres wynosi od 0 do 255, to żeby wyliczyć nowe wartości składowych dla odwróconych kolorów, robimy bardzo prostą operację. Nowa składowa R = 255 - stara składowa R... nowa składowa G = 255 - stara składowa G... nowa składowa B = 255 - stara składowa B. Proste? Przetestujmy, np. kolor: 45,187,200, czyli taki:

Nowe składowe wyliczymy tutaj następująco:
R = 255 - 45 = 210
G = 255 - 187 = 68
B = 255 - 200 = 55
Odwrócony kolor wygląda tak:

Jeśli kojarzycie, odwrotnością niebieskiego jest pomarańczowy tak w uproszczeniu, tutaj wzięliśmy sobie jakiś tam odcień niebieskiego i dostaliśmy coś pomiędzy czerwonym a niebieskim, więc jest ok.
Jeśli nie wierzycie, to wypełnijcie sobie cały obraz tym jednym odcieniem niebieskiego i w photoshopie zastosujcie na nim inwersję. Przy okazji, kolory w photoshopie możemy odwrócić tutaj:


5. Odcienie szarości

Taka by się wydawało prosta sztuczka, w której kryje się całkiem sporo ciekawych czarów. W photoshopie można to zrobić bardzo prosto:

No i w okienku, które się pojawi można bez gadania kliknąć od razu OK bo zazwyczaj te domyślne opcje tam sprawdzają się najlepiej.
Ale co dokładnie się tutaj kryje?
Po pierwsze jak należy ustawić składowe żeby wyświetlić kolor w odcieniu szarości? Powinniście wiedzieć, że każda składowa musi być sobie równa. Czyli kolor 69,69,69 tak samo jak 66,66,66 będzie jakimś odcieniem koloru szarego (zobaczcie np. nazwę użytkownika na BB, ma kolor #666666 i jest to kolor szary).
Tylko co gdy np. nasz kolor to 34,52,107? Jak wyrównać te składowe, do jakiej wartości? Średniej arytmetycznej z tych trzech? To byłoby bardzo bardzo bardzo rozsądne i jeszcze niedawno pewnie bym tak myślał gdybym nie dowiedział się, że oku ludzkie różne składowe rozpoznaje z różną intensywnością. Po prostu, że tak powiem najlepiej widzimy zielony, trochę gorzej czerwony, a jeszcze gorzej niebieski, to wszystko przez tą liczbę tych tam receptorków, które sobie na wszystko patrzą.
Co to dla nas oznacza? Że aby uzyskać idealną odcień szarości musimy wiedzieć, jak to się procentowo rozkłada. Żeby was nie męczyć szukaniem takich informacji to nasze oko w 30% skupia się na czerwieni, w 59% na zieleni i w 11% skupia się na niebieskieni ( :D ), że tak powiem.
No i mamy teraz takie matematyczne zaklęcie:
R = G = B =(to znaczy, że wszystkie składowe są sobie równe) = 0.3*R + 0.59*G + 0.11*B
Tak utworzona nowa wartość, przypisana do każdej składowej utworzy nam "realistyczny" czarno biały obraz.

6. Rozmycie gaussa

Chociaż, że jest to operacja używana ekstremalnie często... częściej niż niektóre z wcześniej wymienionych... jest jednocześnie znacznie bardziej skomplikowana do zrozumienia. Dlaczego? Bo tak jak wcześniej każda operacja edytowała wszystkie piksele i ich składowe RGB dokładnie w ten sam sposób bez wiedzy o pikselach sąsiednich, tak tutaj wynik zależy od tego jak wyglądają sąsiadujące piksele.
Co mam na myśli? Już powoli tłumaczę. Załóżmy, że mamy obraz 3 x 3 px, włączamy go na przybliżenie znaczne... widzimy coś takiego:

Jest to oczywiście jak widać pewna ściana klocków - pikseli, które określone są poprzez składowe. No i co teraz robi z nimi rozmycie gaussa? No bo ono musi robić coś ze składowymi, bo przecież w takiej formie nasz komputer sobie grafikę przechowuje, każdy piksel zapisany w formie trzech składowych.
No i tak też się dzieje. Każdemu z tych naszych pikselków przyporządkowana jest wartość, oznaczająca, że tak powiem jego "ważność". Później uwzględniając "ważność" poszczególnych pikseli obliczana jest wartość każdego z osobna. Cholera, czuję, że strasznie niezrozumiale to tłumaczę. Więc spójrzcie na obrazek:

no i czad, ale co nam te cyferki objaśniają?
Otóż to są właśnie te nasze "ważności" pikseli. No i teraz liczmy sobie nową wartość dla środkowego pikselka, tego różowego. W jaki sposób? Liczymy średnią ważoną składowych z naszego obszaru. Składowe pikseli z cyfrą jeden będą miały najmniejszy wpływ na wynik (ale jednak zawsze coś), trochę większy wpływ mieć będą piksele z wagą dwa, ale i tak najważniejszy jest piksel z wagą 4, dla którego sobie właśnie liczymy nową wartość.
Nie wiem czy wytłumaczyłem to wystarczająco jasno, ale chociaż jakiś zarys może wam się w głowie tworzy. W photoshopie rozmycie gaussa możemy sobie znaleźć tutaj:

A jego okienko wygląda następująco:

Teraz im mniejszą wartość rozmycia sobie ustawimy łatwo zczaić, że oznacza to, że sąsiednie piksele mają mniejszy wpływ na siebie, a im większą tym ten wpływ jest większy. Czyli no mniejsza wartość zwiększa wagę pikselka w środku, a zmniejsza te do o koła, większa na odwrót. Mam nadzieję, że chociaż coś z tego zrozumieliście i wynieśliście :D

7. Wyostrzenie

Wyostrzenie (sharpen) działa na podobnej zasadzie co rozmycie gaussa. Czym się różni? No jeśli nazwać wyostrzenie odwrotnością rozmycia, to jeśli w przypadku rozmycia, wartość piksela jest uzależniana od pikseli sąsiednich, to w przypadku wyostrzenia będzie odwrotnie. To też polega na ustaleniu wag sąsiednich pikseli, ale tam te wagi były dodatnie, tzn. że nasz piksel stawał się bardziej podobny do sąsiadów, a tu będą zerowe, albo wręcz ujemne wagi, tzn. że piksel będzie się od sąsiadów jeszcze bardziej wyróżniać (czy innymi słowy, stawał się podobny do odwrotności swoich sąsiadów :P ).
Cały mechanizm działa właściwie tak samo, tylko zmieniamy wagi, na np. takie:

Zauważcie jak dużą wagę ma tu centralny piksel, jego składowe staną się jeszcze bardziej "jego".
W photoshopie wyostrzenie stosujemy tutaj:


Na dziś to na tyle, mam nadzieję, że czegoś się stąd dowiedzieliście i zrozumieliście magię grafiki. Mam nadzieję, że nie było nudno mimo dużej ilości cyferek, chociaż na pewno nie było tak ciekawie jak o tych barwach no bo tu jednak pisałem o trochę bardziej oczywistych rzeczach.
W każdym razie pewnie jeszcze takim tekścikiem was pomęczę bo ciekaw jestem jak dokładnie działają tryby warstw, a jak już je obczaje, to możecie być pewni, że się tym z wami podzielę.
Miłej nocki!
« Ostatnia zmiana: Grudzień 02, 2011, 20:55:30 wysłana przez Abik »