Dodatek MWzory · takPoziom · głębiejEXT OF · R.27
Dodatek M / Głębiej

Bayer, demozaikowanie i utracona rozdzielczość

Co naprawdę mierzy piksel pod filterkiem, ile rozdzielczości kosztuje interpolacja, skąd mora i po co filtr dolnoprzepustowy.

Co tu jest
Próbkowanie · trzy siatki zamiast jednej

Ile naprawdę jest pikseli

Mozaika Bayera nie jest jedną siatką próbek, tylko trzema nałożonymi na siebie, o różnej gęstości. Warto policzyć każdą osobno, bo z tego wynika cała reszta.

KanałUdział pikseliRozstaw próbekNyquist
Zielony50%co drugi, na przemianpełny po skosie
Czerwony25%co drugi w obu osiachpołowa
Niebieski25%co drugi w obu osiachpołowa

Nyquist podany względem matrycy jednobarwnej o tej samej liczbie pikseli. Zielony jest szczególny: leży na siatce szachownicowej, więc wzdłuż przekątnych próbkuje gęściej niż wzdłuż osi.

Konsekwencja jest asymetryczna i to jest w tym najciekawsze. Rozdzielczość barwna czerwieni i błękitu jest o połowę niższa niż nominalna — struktura o gęstości bliskiej granicy matrycy nie ma w tych kanałach ani jednej próbki na okres. Zieleń jest na tym tle uprzywilejowana i to ona ratuje obraz.

Dla jasności strata jest znacznie mniejsza, bo jasność bierze się głównie z zieleni. Empirycznie matryca Bayera odtwarza rzędu siedemdziesięciu do osiemdziesięciu procent rozdzielczości liniowej, jaką miałaby matryca jednobarwna o tej samej liczbie pikseli. Wartość zależy od algorytmu i od treści, więc jest to rząd wielkości, a nie stała — ale kierunek jest jednoznaczny.

Mora · aliasing, który ma kolor

Dlaczego wzory się tęczują

Aliasing pojawia się wtedy, gdy struktura w scenie jest gęstsza niż siatka próbek — wtedy zamiast niej rejestruje się fałszywy wzór o zupełnie innej gęstości. Zjawisko to zachodzi w każdym próbkowaniu i sam w sobie nie ma nic wspólnego z barwą.

Na mozaice jest jednak gorzej, i to z powodu, który wynika wprost z tabeli wyżej. Trzy kanały mają trzy różne siatki, więc aliasują różnie. Ta sama struktura daje w czerwieni jeden fałszywy wzór, w błękicie inny, a w zieleni jeszcze inny — i suma tych trzech ma barwę, której w scenie nie było.

Stąd charakterystyczny wygląd mory na tkaninach, siatkach i dachówkach: nie jest to szara prążkowana struktura, tylko tęczowa. Matryca jednobarwna dałaby w tym samym miejscu morę bez barwy, znacznie mniej rzucającą się w oczy.

Rozwiązanie jest jedno i znane od początku: rozmyć obraz przed próbkowaniem tak, żeby struktury gęstsze od siatki w ogóle do niej nie doleciały. Realizuje to filtr dolnoprzepustowy, czyli cienka warstwa dwójłomna naklejona na matrycę, rozdzielająca każdy punkt na kilka nieco przesuniętych. Jest to celowe zmiękczenie obrazu i dokładnie ta sama transakcja, co dyfrakcja w roli antyaliasingu opisana w bloku „Zaawansowane” w Rozdziale 10.

W ostatniej dekadzie filtry te zaczęły znikać z kamer. Powód jest arytmetyczny: przy bardzo gęstych matrycach struktury zdolne wywołać morę są już tak drobne, że w większości scen po prostu nie występują — a rezygnacja z filtra oddaje kilka procent ostrości. Jest to zakład, nie usunięcie problemu: kamera bez filtra na tkaninie w zbliżeniu wciąż daje morę, i to gorszą, bo nic jej nie łagodzi.

Demozaikowanie · zgadywanie z sąsiadów

Co robi algorytm i gdzie zawodzi

Demozaikowanie odtwarza dwie brakujące barwy w każdym pikselu. Najprostsze podejście — uśrednienie sąsiadów tego samego koloru — daje wynik poprawny na gładkich powierzchniach i zły na krawędziach, bo uśrednia przez granicę.

Algorytmy używane w praktyce najpierw wykrywają kierunek krawędzi i interpolują wzdłuż niej, a nie w poprzek. Działa to dobrze, dopóki kierunek da się rozpoznać. Zawodzi w trzech sytuacjach i warto je znać, bo wszystkie trzy zostawiają rozpoznawalny ślad:

Wszystkie trzy objawy występują wyłącznie na drobnych, kontrastowych szczegółach i wszystkie mają barwę. To jest ich cecha wspólna i to po niej rozpoznaje się artefakty demozaikowania, odróżniając je od aberracji chromatycznej z Rozdziału 14. Aberracja jest promienista i rośnie ku brzegom kadru; artefakt demozaikowania pojawia się wszędzie tam, gdzie jest drobna struktura, także w samym środku.

W CG · trzy rzeczy, które render ma inaczej

Co z tego wynika dla compu

Render zna trzy barwy w każdym pikselu. Nie przeszedł przez mozaikę, więc nie ma ani jej ograniczenia rozdzielczości barwnej, ani jej artefaktów. Element CG z drobnym, nasyconym wzorem będzie więc czystszy niż ten sam wzór w plate'cie — i tym bardziej, im drobniejszy.

Render nie ma filtra dolnoprzepustowego. Ma za to własny antyaliasing, działający zupełnie inaczej: przez zwielokrotnienie próbek, a nie przez rozmycie optyczne. Wynik jest ostrzejszy i pozbawiony charakterystycznego zmiękczenia, które filtr zostawia na całym obrazie.

Render nie ma zależności między kanałami. W plate'cie zieleń jest ostrzejsza niż czerwień i błękit, bo była gęściej próbkowana. W renderze wszystkie trzy kanały mają tę samą ostrość — i to jest różnica mierzalna, choć rzadko sprawdzana.

Poprawka na wszystkie trzy naraz jest tańsza, niż wygląda: rozmyj lekko kanał czerwony i niebieski renderu, zostawiając zielony. Odtwarza to zarazem niższą rozdzielczość barwną i różnicę ostrości między kanałami. Promień rzędu połowy piksela zwykle wystarcza — chodzi o zgodność charakteru, nie o symulację algorytmu.

Odtwarzania samych artefaktów demozaikowania zwykle się nie robi i słusznie. Są nieprzewidywalne, zależą od algorytmu wywoływania i pojawiają się w miejscach zależnych od treści. Element CG bez nich jest bezpieczniejszy niż element z nimi, ale wstawionymi w złych miejscach — bo brak artefaktu czyta się jako czystość, a artefakt w złym miejscu jako błąd.