dyfuzja lub wyostrzenie
Dyfuzja to rodzina procesów fizycznych, dzięki którym cząstki poruszają się i rozprzestrzeniają stopniowo w czasie ze źródła, które je generuje. W przetwarzaniu obrazu dyfuzja występuje najczęściej w dwóch miejscach:
-
dyfuzji fotonów przez szkło soczewki (rozmycie) lub wilgotne powietrze (zamglenie),
-
dyfuzji pigmentów w mokrych tuszach lub akwarelach.
W obu przypadkach dyfuzja sprawia, że obraz jest mniej ostry poprzez „wyciekanie” cząstek i wygładzanie lokalnych zmian.
Moduł dyfuzja lub wyostrzenie wykorzystuje uogólniony model fizyczny do opisania kilku rodzajów dyfuzji i może być używany przez twórców obrazów do symulacji lub odwrócenia procesów dyfuzji.
Ponieważ jest to wysoce techniczny moduł, dostępnych jest kilka presetów, aby zademonstrować jego użycie do różnych celów.
Dyfuzję można usunąć w celu:
-
odzyskania oryginalnego obrazu z czujników za pomocą filtra antyaliasingowego lub złagodzenia rozmyciam tworzonego przez większość algorytmów demozaikowania (użyj presetu demozaikowanie wygładzenia i przesuń w kolejce przetwarzania moduł przed moduł wejściowego profilu koloru),
-
odwrócenia rozmycia statycznego / rozmycia obiektywu (użyj jednego z presetów usunięcia rozmycia obiektywu),
-
usuwania zamglenia atmosferycznego (użyj presetu usuwania zamglenia),
-
dodania dodatkowej ostrość dla lepszej czytelności (użyj presetu kontrast miejscowy).
Zwróć uwagę, że rozmyć ruchu nie można cofnąć poprzez cofnięcie procesu dyfuzji, ponieważ nie mają one charakteru dyfuzyjnego.
Dyfuzja może zostać dodana w celu:
-
stworzenia efektu poświaty lub Ortona (użyj presetu poświata),
-
zamalowania brakujących lub uszkodzonych części obrazu (użyj presetu rekonstrukcja świateł),
-
odszumiania z zachowaniem krawędzi (użyj jednego z presetów odszumiania)
-
zastosowania rozmycia powierzchni (użyj presetu rozmycia powierzchni).
Ponieważ proces jest fizyczny, nawet jego usterki można wykorzystać do celów twórczych. Na przykład możesz:
-
symulować rysowanie linii lub akwarelę (użyj presetu symuluj rysowanie linii i symuluj akwarelę),
-
tworzyć losowe wzory i tekstury, zwiększając szum (z biegiem czasu, z iteracjami, szum połączy się z sąsiadami, tworząc losowe plamki).
Uwaga: ten moduł wymaga dużej ilości zasobów, ponieważ w rzeczywistości jest anizotropowym, wieloskalowym narzędziem do rozwiązywania równań różniczkowych cząstkowych. Środowisko wykonawcze modułu wydłuża się wraz z liczbą iteracji, dlatego zdecydowanie zaleca się stosowanie OpenCL. Niektóre „szybkie” presety są również dostępne do użytku w systemach bez OpenCL.
🔗podstawowe pojęcia
🔗czas
Dyfuzja jest procesem zależnym od czasu: im więcej czasu, tym dalej cząsteczki mogą się rozprzestrzeniać. W tym module czas jest symulowany za pomocą liczby iteracji (ilości uruchomień algorytmu). Więcej iteracji może sprawić, że rekonstrukcja (usuwanie rozmycia, odszumianie, usuwanie zamglenia) będzie dokładniejsza, jeśli zostanie odpowiednio ustawiona, ale może również spowodować jej degenerację.
🔗kierunek
Dyfuzja naturalna odbywa się zwykle od punktów o wysokim potencjale (wysoka energia lub duże stężenie cząstek) do tych o niskim potencjale (niska energia lub niskie stężenie cząstek). Na obrazie oznacza to, że dyfuzja zawsze zachodzi od najjaśniejszych pikseli do najciemniejszych.
Ta konkretna implementacja może symulować naturalną dyfuzję, używając tak zwanej dyfuzji izotropowej (wszystkie kierunki mają taką samą wagę, jak np. dyfuzja ciepła), ale może również wymusić ważony kierunek równoległy do gradientów (wymuszając dyfuzję wzdłuż krawędzi obiektów i tworząc krawędzie duchy) lub kierunek ważony prostopadły do gradientów, zwany izofotą (wymuszający dyfuzję wewnątrz krawędzi, jak w kropli akwareli). Względna waga każdego kierunku (gradientu i izofoty) jest zdefiniowana przez użytkownika i można ją znaleźć w sekcji kierunek dyfuzji modułu.
🔗szybkość
W zależności od tego, jak płynne jest środowisko, cząstki mogą poruszać się mniej lub bardziej swobodnie, a zatem mniej lub bardziej szybko. Prędkość dyfuzji można ustawić w sekcji prędkość dyfuzji modułu.
Podczas wykonywania rekonstrukcji (odszumianie, usuwanie rozmycia, odmgławianie) zaleca się stosowanie mniejszych prędkości dla lepszej dokładności. Zapobiega to przekroczeniom liczbowym (a tym samym degeneracji rozwiązania) i może wymagać większej liczby iteracji. W przypadku małej liczby iteracji można zastosować wyższe prędkości. Zwróć uwagę, że duże rozmycia wymagają wielu iteracji do prawidłowej rekonstrukcji, więc należy dostosować prędkość, aby uniknąć degeneracji rozwiązania.
Wszystkie prędkości są dodawane (od pierwszego do czwartego stopnia), a sumy prędkości pierwszej i drugiej ani trzeciej i czwartej nigdy nie powinny przekraczać ±100%, chyba że chcesz utworzyć glitch art.
🔗skala
Naturalna dyfuzja wywiera wpływ tylko na najbliższych sąsiadów. Oznacza to, że w każdej iteracji każdy piksel powinien oddziaływać tylko na 9 sąsiednich.
W darktable przyspieszyliśmy nieco ten proces, aby zaoszczędzić czas i ponownie wykorzystać schemat falek o wielu skalach z modułu korektora kontrastu, dzięki czemu możemy dyfundować w różnych skalach. Maksymalna skala dyfuzji jest określona przez parametr promienia.
Niezależnie od rozproszenia, parametr ostrości umożliwia zwiększenie lub zmniejszenie szczegółów w każdej skali, podobnie jak kontrolki krzywej składanej korektora kontrastu. Wraz z suwakiem czułości na krawędzie zapewnia to te same funkcje, co moduł korektora kontrastu (i zakładki lumy i krawędzi), ale w scenocentrycznej przestrzeni RGB.
🔗kontrolki modułu
🔗właściwości rozmycia
- iteracje
- Parametr określający, ile razy algorytm powinien zadziałać rekurencyjnie. Wysokie wartości spowalniają moduł, ale umożliwiają dokładniejsze rekonstrukcje, pod warunkiem, że prędkości dyfuzji są wystarczająco niskie.
- promień centrum
- Główna skala dyfuzji. Zero powoduje, że dyfuzja silniej oddziałuje na drobne szczegóły (używane do usuwania rozmycia i odszumiania). Wartości niezerowe definiują rozmiar szczegółów, które mają być mocno rozproszone (użyte do zwiększenia lokalnego kontrastu).
- promień
- Kontrolka, pozwalająca wybrać pasmo promieni szczegółów, na których będzie działać, wokół promienia centralnego. Rozpiętość dyfuzji definiuje zakres skal szczegółów (pomiędzy „środek – rozpiętość” a „środek + rozpiętość”), w którym dyfuzja jest ograniczona. Wysokie wartości rozpraszają się na dużym paśmie promieni, kosztem czasu obliczeń. Niskie wartości rozchodzą się bliżej promienia centralnego. Jeśli planujesz usunąć rozmycie, rozpiętość promienia powinna wynosić w przybliżeniu szerokość rozmycia obiektywu, a promień centrum powinien wynosić zero. Jeśli planujesz zwiększyć lokalny kontrast, ale nie chcesz wpływać na ostrość lub szum, rozpiętość promienia powinna wynosić 3/4 maksymalnego promienia centrum.
Promienie wyrażone są w pikselach obrazu o pełnej rozdzielczości, więc ustawienia kopiowania i wklejania między obrazami o różnej rozdzielczości mogą prowadzić do nieco innych wyników, z wyjątkiem ostrości na poziomie pikseli.
Dla inżynierów elektryków ustawiony jest tutaj filtr pasmowoprzepustowy w przestrzeni falkowej, wykorzystujący okno częstości Gaussa wyśrodkowane na „promieniu centrum” z odchyleniem (odchylenie standardowe) „promienia”. Skale falkowe są analogiczne do częstotliwości harmonicznych, a każda skala falkowa określa promień szczegółów, na których ma działać.
🔗prędkość dyfuzji
- prędkość pierwszego stopnia (domyślna)
- Prędkość dyfuzji warstw falkowych o niskiej częstotliwości w kierunku określonym przez ustawienie anizotropii 1. stopnia. Wartości dodatnie powodują dyfuzję, wartości ujemne cofają dyfuzję, zero nic nie robi.
- Prędkość drugiego rzędu (laplacjan)
- Szybkość dyfuzji warstw falkowych o niskiej częstotliwości w kierunku określonym przez ustawienie anizotropii 2. stopnia. Wartości dodatnie powodują dyfuzję, wartości ujemne cofają dyfuzję, zero nic nie robi.
- Prędkość trzeciego stopnia (gradient laplasjana)
- Szybkość dyfuzji warstw falkowych o wysokiej częstotliwości w kierunku określonym przez ustawienie Anizotropia trzeciego stopnia. Wartości dodatnie powodują dyfuzję, wartości ujemne cofają dyfuzję, zero nic nie robi.
- Prędkość czwartego rzędu (lapasjan z laplasjana)
- Szybkość dyfuzji warstw falkowych o wysokiej częstotliwości w kierunku określonym przez ustawienie Anizotropia czwartego stopnia. Wartości dodatnie powodują dyfuzję, wartości ujemne cofają dyfuzję, zero nic nie robi.
🔗kierunek dyfuzji
- anizotropia pierwszego stopnia
- Kierunek dyfuzji warstw falkowych o niskiej częstotliwości w stosunku do orientacji gradientu o niskiej częstotliwości. Zero jest izotropowe, wartości ujemne sprawiają, że dyfuzja podąża za gradientem, a wartości dodatnie sprawiają, że dyfuzja podąża za izofotami.
- anizotropia drugiego stopnia
- Kierunek dyfuzji warstw falkowych o niskiej częstotliwości w stosunku do orientacji gradientu o wysokiej częstotliwości. Zero jest izotropowe, wartości ujemne sprawiają, że dyfuzja podąża za gradientem, a wartości dodatnie sprawiają, że dyfuzja podąża za izofotami.
- anizotropia trzeciego stopnia
- Kierunek dyfuzji warstw falkowych o wysokiej częstotliwości w stosunku do orientacji gradientu o niskiej częstotliwości. Zero jest izotropowe, wartości ujemne sprawiają, że dyfuzja podąża za gradientem, a wartości dodatnie sprawiają, że dyfuzja podąża za izofotami.
- anizotropia czwartego stopnia
- Kierunek dyfuzji warstw falkowych wysokiej częstotliwości w stosunku do orientacji gradientu wysokiej częstotliwości. Zero jest izotropowe, wartości ujemne sprawiają, że dyfuzja podąża za gradientem, a wartości dodatnie sprawiają, że dyfuzja podąża za izofotami.
🔗traktowanie krawędzi
- ostrość
- Stosuje wzmocnienie na szczegółach falki, niezależnie od właściwości dyfuzji. Zero nic nie robi, wartości dodatnie wyostrzają, wartości ujemne rozmywają. Jest to przydatne głównie jako zmienna regulacji podczas stosowania poświaty lub rozmycia, aby zachować ostrość podczas dodawania blasku wokół krawędzi. Nie zaleca się używania tego do samego ostrzenia, ponieważ przy tym ustawieniu nic nie zapobiega powstawaniu aureoli lub frędzli.
- czułość na krawędzie
- Stosuje karę w stosunku do prędkości dyfuzji po wykryciu krawędzi. To wykrywanie wykorzystuje lokalną wariancję wokół każdego piksela. Zero wyłącza karę, wyższe wartości sprawiają, że kara jest silniejsza i bardziej wrażliwa na krawędzie. Zwiększ, jeśli zauważysz artefakty krawędzi, takie jak frędzle czy efekt halo (aureole).
- próg krawędzi
- Określa próg wariancji, który wpływa głównie na obszary o małej wariancji (obszary ciemne lub rozmyte albo płaskie powierzchnie). Wartości dodatnie zwiększą karę dla obszarów o małej zmienności, co jest dobre w przypadku wyostrzania lub zwiększania lokalnego kontrastu bez miażdżenia czerni. Wartości ujemne zmniejszą karę dla obszarów o niskiej zmienności, co jest dobre w przypadku odszumiania lub rozmycia z maksymalnym efektem na obszarach czarnych i rozmytych.
🔗przestrzenność dyfuzji
- próg odcinania maski luminancji
- Ta kontrolka jest przydatna, jeśli chcesz wmalować światła. W przypadku wartości większych niż 0% dyfuzja wystąpi tylko w regionach o luminancji większej niż to ustawienie. Zwróć uwagę, że w tych regionach zostanie dodany szum gaussowski, aby symulować cząsteczki i inicjować wmalowywanie.
🔗organizacja pracy
Główną trudnością tego modułu jest to, że chociaż jego moc wyjściowa może się znacznie różnić w zależności od parametrów wejściowych, parametry te nie mają intuicyjnego związku z życiem codziennym. Użytkownicy mogą być przytłoczeni, chyba że są już zaznajomieni z równaniami różniczkowymi cząstkowymi Fouriera. W tej sekcji proponujemy kilka sposobów podejścia do tego modułu bez konieczności rozumienia podstawowej teorii.
🔗zasady ogólne
Jeśli zamierzasz usunąć rozmycie obrazu za pomocą tego modułu, zawsze zaczynaj od prawidłowej korekcji wszelkich aberracji chromatycznych i szumu na obrazie, ponieważ usuwanie rozmycia może powiększyć te artefakty. Ważne jest również, aby obraz nie zawierał przyciętych czarnych pikseli. Można je skorygować za pomocą korekty poziomu czerni modułu ekspozycji.
Ponieważ działa on na oddzielnych kanałach RGB, lepiej jest zastosować ten moduł po kalibracji kolorów, aby zacząć od całkowicie neutralnego, zbalansowanego bieli obrazu wejściowego. Zwróć uwagę, że zwiększenie miejscowego kontrastu lub ostrości spowoduje również nieznaczny wzrost kontrastu kolorów i nasycenia, co zwykle jest dobre. Ponieważ wykorzystuje on regularyzację opartą na wariancji do wykrywania krawędzi, lepiej jest również umieścić ten moduł przed jakąkolwiek operacją nieliniową.
🔗praca z presetami
Dostarczone presety zostały dostrojone przez programistę i przetestowane na wielu zdjęciach do typowych celów. Najłatwiej jest po prostu zacząć od presetów, a następnie dostosować je w razie potrzeby:
-
jeśli efekt wydaje się zbyt silny, zmniejsz liczbę iteracji,
-
jeśli pojawią się artefakty na krawędziach, zwiększ czułość na krawędzie,
-
jeśli rozmycie zaczyna wpływać na prawidłowe części rozmyte (bokeh), zmniejsz promień,
-
jeśli rozmycie wydaje się prawidłowe w jasnych obszarach, ale nadmierne w ciemnych, zwiększ próg krawędzi,
-
jeśli usuwanie rozmycia przycina czarne piksele, zmniejsz korektę poziomu czerni w module naświetlania,
-
dostosuj ostrość wedle uznania.
🔗rozpoczęcie pracy z modułem
Domyślne ustawienia modułu są neutralne i nie zmieniają niczego na zdjęciu. Ideą modułu jest to, że każda kolejność wpływa na teksturę zdjęcia w inny sposób.
Zacznij od dostrojenia parametrów pierwszego stopnia (szybkości i anizotropii), aby uzyskać początkową bazę. Następnie dostosuj promień. Wpłynie to na grubsze tekstury (albo je rozmyj, albo wyostrz). Pamiętaj, że pierwszy stopień działa na niskie częstotliwości skali falkowej i podąża w kierunku równoległym lub prostopadłym do gradientu niskich częstotliwości.
Następnie zacznij dostrajać parametry drugiego stopnia (prędkość i anizotropię). Drugi stopień również działa na niskie częstotliwości skali falkowej, ale tym razem podąża w kierunku równoległym lub prostopadłym do gradientu wysokich częstotliwości, który może być kierunkiem maksymalnej ostrości lub szumu. Można to wykorzystać do zmniejszenia szumu (używając drugiego stopnia w trybie dyfuzji, z wartościami dodatnimi), gdy używałeś pierwszego stopnia w trybie wyostrzania (z wartościami ujemnymi).
Te dwa kroki można wykonać na pomniejszonym obrazie. Pamiętaj, że chociaż dołożuliśmy wszelkich starań, aby wizualny wynik algorytmu był w miarę niezmienny w skali, podgląd będzie dokładny tylko przy powiększeniu 1:1. W każdym razie wszystko, co dzieje się na poziomie pikseli (promień < 2px) nie będzie widoczne dla poziomów powiększenia niższych, niż 50%.
W tym momencie możesz chcieć dostosować czułość krawędzi, aby zadbać o wszelkie artefakty krawędzi. Teoretycznie dyfuzja w kierunku izofotowym zapewnia, że jest ona zawarta wewnątrz krawędzi, ale nie jest to wystarczające, gdy na obrazie występują narożniki i ostre wypukłe kształty.
Gdy regulacja czułości krawędzi zostanie dostosowana w celu uzyskania satysfakcjonujących rezultatów, obraz zwykle staje się dość miękki. W większości przypadków konieczne będzie w tym momencie zwiększenie liczby iteracji w celu skompensowania. Będzie to wiązało się z obniżeniem wydajności, więc postępuj mając na uwadze kompromis pomiędzy wydajnością a jakością w zależności od sprzętu. Jeśli nie możesz zwiększyć liczby iteracji, będziesz musiał zwiększyć prędkość dyfuzji.
Ostatnim krokiem jest dostrojenie trzeciego i czwartego stopnia, które dbają o wysokie częstotliwości każdej skali falkowej. Przy tych ustawieniach będziesz musiał być o wiele bardziej delikatny niż w przypadku pierwszego i drugiego rzędu, ponieważ mogą one powodować bardzo szybkie zwiększanie szumu.
Trzeci stopień podąża za gradientem lub kierunkiem izofotowym warstwy niskich częstotliwości, więc może być używany do kierowania dyfuzji wysokich częstotliwości w kierunku, który jest bardziej uzasadniony w odniesieniu do rzeczywistych krawędzi (i mniej podatny na wychwytywanie szumu).
Czwarty stopień podąża za gradientem lub kierunkiem izofotowym warstwy wysokiej częstotliwości i jest bardziej podatny na wychwytywanie szumu. Dyfuzja czwartego stopnia to najlepszy sposób na redukcję szumu bez zbytniego wpływania na ostrość, zarówno jako samodzielny odszumiacz, jak i jako krok regularyzacji w procesie usuwania rozmycia.
🔗używanie wielu instancji do rekonstrukcji obrazu
Końcowe filtrowanie szumu może skorzystać na wprowadzeniu procesu dyfuzji — można to zastosować jako dodatkowy krok po module odszumiania (profilowanego).
Skorzystać na rekonstrukcji poprzez cofanie procesu dyfuzji mogą dla odmiany:
-
rozmycie wprowadzone przez filtr dolnoprzepustowy (LPF) sensora i/lub wygładzanie krawędzi wykonywane przez moduł demozaikowania,
-
statyczne rozmycie obiektywu,
-
dym/mgła,
-
lekka dyfuzja (przy użyciu zbyt dużego dyfuzora), prowadząca do równomiernego oświetlenia i braku miejscowego kontrastu.
Chociaż więcej niż jeden z tych problemów może wpływać na to samo zdjęcie w tym samym czasie, lepiej jest spróbować naprawić je osobno, używając wielu instancji modułu. Robiąc to upewnij się, że problemy są korygowane ze skali małej do małej, a odszumianie zawsze następuje jako pierwsze. Oznacza to, że twoje instancje powinny pojawić się w następującej kolejności:
-
odszumianie,
-
wzmocnienie kontrastu miejscowego,
-
usuwanie zamglenia,
-
korekcja rozmycia obiektywu
-
korekcja sensora i demozaikowania.
Rozpoczęcie pracy w grubszej skali zmniejsza prawdopodobieństwo wprowadzenia lub zwiększenia szumu podczas wykonywania rekonstrukcji w mniejszej skali. Jest to nieintuicyjne, ponieważ te procesy nie zachodzą w tej kolejności podczas tworzenia obrazu. Z tego samego powodu odszumianie powinno być zawsze wykonywane przed jakąkolwiek próbą wyostrzenia lub zwiększenia ostrości.
🔗uwagi i ostrzeżenia
Chociaż ten moduł został zaprojektowany tak, aby był niezmienny wobec skali, jego efekty można zagwarantować tylko przy 100% powiększeniu i wysokiej jakości lub pełnowymiarowym eksporcie. Wyniki przy niższych poziomach powiększenia lub wymiarach eksportu mogą, ale nie muszą odpowiadać twoim oczekiwaniom.
Ustawiając algorytm usuwania rozmycia, pamiętaj, że wiele z najlepszych zdjęć w historii fotografii zostało wykonanych obiektywami, które nie były tak ostre, jak te dostępne obecnie. Chociaż obecny trend polega na budowaniu i sprzedawaniu coraz ostrzejszych obiektywów i stosowaniu na wierzchu oprogramowania w szaleńczych ilościach wyostrzania, ta moda nie prowadzi do lepszych zdjęć i sprawia, że proces retuszu staje się bardziej nużący. Nieostrość i odrobina rozmycia mają również pewne zalety poetyckie, których chirurgicznie oczyszczone obrazy HD mogą nie oddać.
Należy zauważyć, że kontrast globalny (przy użyciu prostych krzywych tonalnych lub poziomów czerni/bieli) również wpływa na naszą percepcję ostrości, która jest zupełnie inna niż ostrość optyczna (rozdzielczość optyczna). Oczy ludzkie są wrażliwe tylko na kontrast lokalny, który może pochodzić z ostrości optycznej (np. brak dyfuzji – cienkie krawędzie) oraz ze wzmocnionych przejść tonalnych. Jeśli istnieje globalne mapowanie tonów w celu zwiększenia kontrastu, obraz będzie wyglądał ostrzej. Jeśli do zmniejszenia kontrastu zostanie użyte mapowanie tonalne, obraz będzie bardziej rozmazany. W żadnym z tych przypadków rzeczywiste krawędzie obiektów nie są w żaden sposób naruszone, a percepcyjne konsekwencje są czystą iluzją.
Częścią procesu starzenia jest utrata wzroku. Stopień ostrości, który podoba się osobom w wieku powyżej 50 lat, może nie być taki sam, jak w przypadku osób w wieku 20 lat. Warto rozważyć wyostrzenie, aby uzyskać wiarygodny wynik (odpowiadający twojej codziennej percepcji), a nie przyjemny wynik (który może dobrze wyglądać tylko dla osób o takim samym wzroku jak twój).
Wreszcie, ocena ostrości obrazów powiększonych do 1:1 (100%) lub więcej jest niemądrym zadaniem. W muzeach, na wystawach, a nawet na ekranie, publiczność patrzy na obrazy jako całość, a nie przez lupę. Co więcej, w większości praktycznych zastosowań zdjęcia rzadko przekraczają rozdzielczość 3000×2000 pikseli (około 300 DPI w formacie A4/letter), co w przypadku matryc 24 Mpx oznacza czterokrotne przeskalowanie w dół. Przy badaniu pliku 24 Mpx w 1:1, tak naprawdę patrzysz na obraz, który nigdy nie będzie istniał. Wyostrzanie na poziomie pikseli w tym kontekście jest stratą czasu i cykli procesora.