Z notatnika optyka: USM

Po krótkiej, świątecznej przerwie przyszła pora na kolejny odcinek cyklu "Z notatnika optyka". Tym razem o filtrze "unsharp mask" i wyostrzaniu. Zapraszamy do lektury.
Dlaczego to się nazywa "UNsharp mask"?
W ostatnim czasie pisałem trochę o rozdzielczości. Okazało się m.in., że współczesne aparaty cyfrowe są w tej dziedzinie dość ograniczone. A jednak, jeżeli ogląda się dobre cyfrowe zdjęcia, ten fakt wcale nie rzuca się w oczy. Przeciwnie, bardzo wiele zdjęć zrobionych przez fotografów-cyfrzarzy, którzy znają się na rzeczy, wygląda ostrzej niż wiele zdjęć na robionych na filmach podobnych formatów. To dlatego, że to, co nam się wydaje ostre, to niekoniecznie to, co rzeczywiście jest ostre. Jednym słowem można bardzo skutecznie oszukiwać. W dzisiejszym odcinku będzie o tym, jak działa najpopularniejszy chyba filtr wyostrzający zdjęcia. Od razu ostrzegam, że jest to kurs włażący w same podstawy działania filtra, ale z tego wyniknie jak ustawiać poszczególne jego parametry i czym grozi złe ustawienie każdego z nich.

Co nam się wydaje ostre
Mamy dwa obrazki przedstawiające jakąś krawędź:


Krawędź na drugim obrazku wydaje nam się troszkę ostrzejsza. Ale to tylko złudzenie. Na pierwszym obrazku granica pomiędzy jasnoszarym, a ciemnoszarym jest tak ostra, jak się tylko da - po prostu następuje skokowa zmiana koloru. Natomiast obrazek drugi powstał w ten sposób, że ostatni piksel jasnego obrazu trochę jeszcze rozjaśniłem, a pierwszy ciemny - przyciemniłem. I voila, od razu wydaje się ostrzej.

Działa to dlatego, że wrażenie ostrości nie zależy tylko od tego, jak płynne będzie przejście pomiędzy dwoma obszarami – jasnym i ciemnym, ale też od kontrastu pomiędzy jasnym i ciemnym. A więc, powiększając ten kontrast, choćby w małym obszarze, stwarzamy wrażenie większej ostrości.

To się wcale nie zaczęło na komputerze
A więc aby wyostrzyć zdjęcie, należy selektywnie podbić kontrast tylko na krawędziach. Tylko jak?

Metodę, która jest używana w niemal wszystkich programach do obróbki zdjęć, wymyślono właściwie w latach 30 XXw., a więc jakiś czas przed komputerami. Jest w pełni zgodna ze znaną zasadą pewnego radzieckiego teoretyka wynalazczości: jak czegoś się nie da zrobić w jeden sposób, spróbuj to zrobić dokładnie odwrotnie. Aby wyostrzyć należy... rozmyć. Najpierw z negatywu robiono pozytyw tych samych rozmiarów, który miał dwie cechy: był nisko kontrastowy i trochę nieostry. Potem precyzyjnie składano ten pozytyw z oryginalnym negatywem i z tego robiono odbitkę. Wychodziło mniej więcej coś takiego:


Złożenie negatywu z mniej kontrastowym pozytywem powodował spadek ogólnego kontrastu negatywu, więc odbitkę trzeba było zrobić na bardziej kontrastowym papierze. Ale, jako że pozytyw był bardziej nieostry od oryginalnego negatywu, kontrast krawędzi spadał znacznie mniej. W efekcie, po podniesieniu kontrastu papieru dostawano obraz, który miał ogólny kontrast taki jak poprzednio, ale z podniesionym kontrastem w obrębie krawędzi i drobnych detali. A taki obraz wydawał się ostrzejszy.

Jak to się robi na kompie
Komputer używa algorytmu bazującego w zasadzie na tej samej zasadzie. Ten algorytm nazywa się "Unsharp mask", czyli dosłownie tłumacząc "nieostra maska" i występuje chyba we wszystkich choć trochę zaawansowanych programach graficznych i nie tylko (występuje też na przykład w najpopularniejszym programie do obrabiania danych pomiarowych dla fizyków). Co toto robi?

Po pierwsze to bierze zdjęcie, które ma wyostrzyć i je rozmywa "rozmyciem gaussowskim" (wersje angielskie aplikują gaussian blur). I tu wchodzi pierwszy parametr do ustawienia: promień. To jest ten sam promień jaki jest używany w filtrze "rozmycie gaussowskie" i mówi jak odległe piksele będą uśredniane. Im większy promień, tym mocniej rozmyty zostanie obrazek.

Następnie tą rozmytą wersję odejmuje się od początkowego obrazka. Przy czym pisząc "odejmuje" dokładnie odejmowanie mam na myśli: od wartości składowej czerwonej obrazka początkowego odejmuje wartość składowej czerwonej obrazka rozmytego, podobnie z pozostałymi składowymi. W ten sposób powstaje taki śmieszny obraz samych krawędzi:


Ten, nazwijmy go roboczo obrazek różnicowy (ta nazwa nie jest żadną przyjętą nazwą, tylko moją radosną twórczością), to taki zbiór wartości (zarówno dodatnich jak i ujemnych), który pokazuje, o ile i w którą stronę rozmyta wersja różni się od oryginalnej. W następnym kroku mnoży się go przez liczbę, która zależy od tego, co wpiszemy w pole "wartość" (lub "amount") i dodaje do obrazu początkowego. Ponieważ po ciemnej stronie krawędzi obrazek różnicowy ma wartości ujemne, te piksele zostaną przyciemnione. Analogicznie, po jasnej stronie krawędzi piksele zostaną rozjaśnione. W efekcie kontrast na krawędzi zostanie powiększony, ergo krawędź zostanie wyostrzona.


Zwracam uwagę, że to, co narysowałem, przedstawia sytuację, w której użytkownik nieco przesadził z "wartością" i "promieniem". Powstają wtedy takie przestrzelenia - jasne obwódki wokół ciemnych obiektów. Narysowałem to po to, aby pokazać, który parametr na co wpływa. Nie jest to idealnie ścisła zależność, jednak ustawiając promień wpływamy przede wszystkim na to, jak szeroka będzie jasna obwódka. Natomiast wartość wpływa głównie na to, jak będzie jasna. Właściwie da się wartość ustawić tak, aby jasnych obwódek w ogóle nie było, ale tylko pod warunkiem, że nie ustawimy zbyt dużego promienia. Z drugiej strony promień nie może być zbyt mały, bo wtedy filtr przestaje działać w ogóle - obrazki rozmyty i początkowy przestają się różnić. Jako wartość początkową (do dalszych prób) polecałbym ustawić promień na mniej więcej tyle pikseli, ile zajmuje przejście od jasnego do ciemnego - a więc będą to zupełnie inne wartości, gdy wyostrzamy zdjęcia w rozdzielczościach do druku, a inne (dużo mniejsze), gdy wyostrzamy zdjęcia w rozdzielczościach ekranowych.

Próg
A właściwie tak to by wyglądało, gdybyśmy wartość ostatniego parametru ustawili na 0. Ten ostatni parametr to "próg" (po angielsku "threshold"). I jest to jedyny parametr, którego nie ma w tradycyjnej, ciemniowej wersji wyostrzania.

Jeżeli wartość "progu" ustawimy na coś większego od zera, to program będzie sprawdzał, piksel po pikselu jak duża jest różnica pomiędzy obrazkiem początkowym a wersją rozmytą. Jeżeli różnica w przypadku danego piksela jest większa, niż to, co użytkownik wybrał w polu "próg", to program zaaplikuje wyostrzanie tak, jak to opisałem powyżej. Natomiast jeżeli różnica jest mniejsza od wartości progowej, program z tym pikselem... nie zrobi nic - po wyostrzeniu ten piksel się nie zmieni. Inaczej mówiąc parametr "próg" wyłącza cały filtr wyostrzający dla obszarów, gdzie zmiany jasności czy koloru są nie dość szybkie. Celem istnienia tego parametru jest przeciwdziałanie skutkowi ubocznemu wyostrzania: wyostrzaniu i potęgowaniu szumu.

Jednak działanie progu samo zostawia skutki uboczne. Powoduje, że wprawdzie szum i ziarno nie są wyostrzane, ale w obrębie samej wyostrzonej krawędzi powstaje efekt rozdzielenia tonów. Ostatni piksel, który znajdzie się "poniżej progu" w ogóle nie zostanie zmieniony, ale następny zostanie już zmieniony bardzo. Gdzieś w połowie przejścia też będzie obszar, w którym piksele zostaną zakwalifikowane jako te, których nie należy zmieniać.


W efekcie, zamiast ostrzejszego ale płynnego przejścia od jasnego do ciemnego, dostaniemy krawędź przypominającą nieco mapę hipsometryczną. Przykład z życia:


To jest powiększony kawałek zdjęcia wyostrzonego z progiem ustawionym na zero. Ten sam kawałek wyostrzony z dokładnie identycznymi parametrami wartość i promień, ale z niezerowym progiem wygląda tak:


I można zobaczyć, jak ładnie pominięty przy wyostrzaniu został szum, oraz jakiego rodzaju artefakt powstał w zamian.

Za tydzień zapraszam na ostatni odcinek. Właściwie będzie to odcinek bonusowy, klasa będzie oglądać film.
Komentarze
Polecane artykuły
Young Poland 2019 - oto najlepsze zdjęcia młodych polskich fotografów z konkursu Grand Press Photo
17 Maj 2019
Young Poland to specjalna sekcja konkursu GPP, kierowana do twórców, którzy nie ukończyli jeszcze 26 roku życia. Zobaczcie, jakie zdjęcie podbiły w tym roku serca jurorów.
2
Poznaliśmy laureatów Grand Press Photo 2019. Zobacz najlepsze polskie zdjęcia prasowe minionego roku
16 Maj 2019
Tegoroczna edycja najważniejszego polskiego konkursu fotografii prasowej Grand Press Photo dobiegła końca. Oto najlepsze zdjęcia polskich fotoreporterów.
7
Olympus obchodzi 100 urodziny. Poznaj historię firmy, która ma własne spojrzenie na fotografię
13 Maj 2019
W tym roku Olympus świętuje jubileusz swojego powstania. Przyjrzyjcie się najważniejszym dokonaniom firmy.
3
Za kulisami sesji okładkowej Digital Camera Polska z Tadeuszem Rolke [WIDEO]
13 Maj 2019
Najnowsze wydaniu magazynu DCP składa hołd Tadeuszowi Rolke - ikonie polskiego reportażu i fotografii mody, który kończy właśnie 90 lat. By podkreślić wyjątkowość tego wydania, powstała autorska sesja okładkowa. Zajrzyjcie za jej kulisy.
3