Dodatek VWarstwa · CGPoziom · głębiejEXT OF · R.35
Dodatek V / Głębiej

STMapy: budowa, próbkowanie, filtrowanie

Czym jest mapa współrzędnych, dlaczego musi być w pełnej precyzji, co się dzieje na krawędziach kadru i jak sprawdzić, że undistort jest odwracalny.

Co tu jest
Definicja · obraz zamiast wzoru

Co siedzi w STMapie

STMapa jest obrazem, w którym wartości pikseli nie są barwami, tylko współrzędnymi. Piksel na pozycji (x, y) niesie w kanale czerwonym i zielonym informację: „weź piksel źródłowy stamtąd”.

wynik(x, y) = źródło(R(x,y)·W, G(x,y)·H) R, G — wartości kanałów w zakresie 0–1. W, H — wymiary obrazu w pikselach. Mapa tożsamościowa ma R rosnące liniowo w poziomie i G w pionie — czyli wygląda jak gradient od czerni przez czerwień i zieleń do żółci.

Zaleta jest jedna i decydująca: STMapa opisuje dowolne przekształcenie, także takie, którego nie da się zapisać wzorem. Dystorsja obiektywu rzadko jest idealnym wielomianem — bywa lekko niesymetryczna, bo szkło nie jest idealnie osiowe. Wielomian tego nie odda; mapa zmierzona z siatki odda dokładnie tyle, ile zmierzono.

Druga zaleta jest praktyczna: mapa jest danymi, a nie kodem. Przechodzi między programami bez tłumaczenia konwencji, daje się obejrzeć, porównać i wersjonować jak każdy inny obraz. Wzór trzeba przepisywać dla każdego narzędzia osobno, a każde ma inne uporządkowanie współczynników.

Wada też jest jedna: mapa ma skończoną rozdzielczość i skończoną precyzję. Zapisana w ośmiu bitach na kanał daje ziarnistość przesunięcia rzędu jednego piksela na kadrze 4K — czyli bezużyteczną. STMapa musi być zmiennoprzecinkowa albo co najmniej szesnastobitowa, i jest to najczęstsza przyczyna dziwnych, schodkowych artefaktów po jej zastosowaniu.

Konwencje · trzy sposoby na pomyłkę

Co sprawdzić przed użyciem

KonwencjaWariantyObjaw pomyłki
zakres wartości0–1 albo w pikselachobraz zapada się do jednego piksela w rogu
kierunek osi Yod góry albo od dołuobraz odbity w pionie
początek układuróg piksela albo jego środekprzesunięcie o pół piksela, czyli lekkie zmiękczenie
kierunek mapy„skąd brać” albo „dokąd iść”dystorsja nakłada się zamiast zdejmować

Pierwsze trzy dają objawy widoczne od razu. Czwarty jest podstępny, bo przy słabej dystorsji wygląda na „prawie dobrze”.

Czwarty wiersz wart jest komentarza, bo jest źródłem najdłuższych poszukiwań. Mapa „skąd brać” i mapa „dokąd iść” to dwie różne rzeczy i jedna nie jest odwrotnością drugiej w sensie arytmetycznym — odwrócenie wymaga rozwiązania równania dla każdego piksela, bo przekształcenie nie jest zwykle wyrażalne wzorem w drugą stronę.

Test rozstrzygający zajmuje chwilę: nałóż mapę na siebie samą dwa razy. Jeśli konwencja jest ta sama i mapa jest odwrotnością siebie, wynik powinien być zgodny z oryginałem. Jeśli dystorsja się podwoiła, kierunek jest odwrotny do zakładanego.

Pomiar · z siatki na współczynniki

Skąd wziąć dystorsję

Model wielomianowy, wystarczający dla większości obiektywów, opisuje przesunięcie punktu wzdłuż promienia od środka kadru:

r' = r · (1 + k₁·r² + k₂·r⁴) r — odległość od środka kadru, znormalizowana zwykle do połowy przekątnej albo połowy szerokości. k₁ ujemne daje beczkę, dodatnie poduszkę. k₂ poprawia dopasowanie przy brzegach i przy silnej dystorsji zmienia znak.
Typ obiektywuk₁k₂Przesunięcie w rogu
szeroki kinowy, dobrze skorygowany−0,0030,00050,3% promienia
szeroki fotograficzny, typowy−0,050,0104,0%
bardzo szeroki, wyraźna beczka−0,090,0207,0%
tele z poduszką+0,015−0,0011,4%
rybie oko−0,350,12023,0%

Wartości orientacyjne, przy normalizacji r do jedności w rogu kadru. Ostatnia kolumna to (r' − r)/r w rogu, czyli o ile procent promienia punkt się przesuwa.

Protokół pomiaru z siatki jest krótki i wart wykonania raz na obiektyw, a nie raz na ujęcie.

Krok 1. Sfotografuj płaską siatkę prostokątną wypełniającą kadr, ustawioną równolegle do matrycy. Równoległość jest tu ważniejsza niż wszystko inne — pochylenie siatki wygląda w wyniku jak dystorsja asymetryczna.

Krok 2. Znajdź w obrazie środek dystorsji. Zwykle nie leży dokładnie w środku kadru — odchylenie o kilka pikseli jest normalne i jego pominięcie daje resztkowy błąd rosnący ku jednemu brzegowi.

Krok 3. Dopasuj k₁ i k₂ tak, żeby proste w wyprostowanym obrazie były proste. Kryterium ilościowe: odchylenie punktu środkowego krawędzi od odcinka łączącego jej końce, mierzone w pikselach. Poniżej pół piksela jest bardzo dobrze, poniżej dwóch wystarcza.

Krok 4. Zapisz jako STMapę i sprawdź na oryginalnej siatce. To sprawdzenie łapie wszystkie cztery pomyłki konwencyjne z poprzedniej sekcji naraz.

Składanie · jedno próbkowanie zamiast trzech

Łączenie przekształceń

Modal w Rozdziale 35 pokazuje, ile kosztuje każde przepróbkowanie. STMapy dają na to prosty sposób: przekształcenia składa się na poziomie map, a dopiero wynik stosuje do obrazu.

Mechanizm jest ten sam, co przy zwykłym składaniu funkcji. Mając mapę A („skąd brać dla kroku pierwszego”) i mapę B dla kroku drugiego, mapę wypadkową otrzymuje się, stosując A do B — czyli traktując B jak obraz i przepuszczając ją przez A. Ponieważ mapy są zmiennoprzecinkowe, ta operacja nie kosztuje nic pod względem jakości.

Rachunek · trzy operacje, jedno próbkowanie
Zadaniezdjąć dystorsję, ustabilizować, przeskalować 4096 → 2048
Naiwnietrzy przepróbkowania, każde filtrem sześciennym
Koszt jakościMTF przy połowie Nyquista: 0,87 × 0,87 × 0,87 = 0,66
Ze składaniemtrzy mapy złożone w jedną, jedno przepróbkowanie
Koszt jakości0,87
Ta sama geometria wyniku, o jedną trzecią więcej kontrastu na drobnym detalu.
Kontrola: 0,66 to spadek o 0,60 działki kontrastu, czyli różnica, którą widać w porównaniu obok siebie. Kaskadowanie MTF przez mnożenie jest tą samą regułą, co w Dodatku H — a przepróbkowanie jest po prostu kolejnym ogniwem łańcucha.

Warto na koniec zauważyć konsekwencję, która wykracza poza geometrię. Skoro przekształcenia da się składać i stosować raz, to porządek pracy w compie powinien odkładać wszystkie operacje geometryczne na jeden krok, zamiast rozsiewać je po drzewie. Jest to jedna z reguł, które Rozdział 36 zbiera w całość — i jedna z niewielu, które poprawiają obraz nie zmieniając w nim nic poza liczbą przejść.