Grafika 2D Animacja Zmiany Kształtu opracowanie: Jacek Kęsik
Wykład przedstawia podstawy animacji zmiany kształtu - morfingu
Animacja zmiany kształtu Podstawowe pojęcia Zlewanie (Dissolving / cross-dissolving) łączenie dwóch obrazów poprzez płynne przejście - uśrednianie Wstawianie (tweening) proces sekwencyjnej interpolacji obrazów pośrednich między dwoma stanami kluczowymi w celu uzyskania wrażenia płynnego przejścia między nimi Deformowanie (warping) zniekształcanie obrazu uzależnione od obszaru tego obrazu, matematyczny odpowiednik nadruku na elastycznej powierzchni (rozciąganej i ściskanej w różnych miejscach) Przekształcanie (morphing) jest kombinacją powyższych
Na postawie pracy dr Stevena Seitza (University of Washington) http://www.cs.washington.edu/homes/seitz/
Czym jest morphing? Próba znalezienia stanu pośredniego pomiędzy dwoma obiektami NIE stan pośredni między dwoma obrazami obiektów
Czym jest morphing? Próba znalezienia stanu pośredniego pomiędzy dwoma obiektami NIE stan pośredni między dwoma obrazami obiektów tylko obraz obiektu pośredniego
Chcemy uzyskać płynną transformację pomiędzy dwoma obiektami
Zwykłe przenikanie nie zdaje z reguły egzaminu ze względu na efekt powstawania duchów na obrazie czasem taki efekt może być zamierzony http://www.salavon.com/
Morfing = warping + przenikanie Kształt (zmiany geometryczne) Kolor (zmiany fotometryczne)
Obraz #1 przenikanie Obraz #2 warp morphing warp
Image morphing image #1 cross-dissolving image #2 warp morphing warp
Czym jest warping? W gruncie rzeczy jest to przekształcenie obrazu. Część z poznanych już przekształceń możemy zaliczyć do globalnego (dla całego obrazu) warpingu
filtrowanie: zmiana zakresu obrazu g(x) = h(f(x)) f h g h(y)=0.5y+0.5 warping: zmiana domeny obrazu g(x) = f(h(x)) f h g h([x,y])=[x,y/2]
Przykłady warpingu parametrycznego: translacja obrót aspect afiniczne perspektywa cylindryczne
Globalny warping parametryczny T Transformacja T jest elementem zmieniającym współrzędne: p = T(p) Co to znaczy że T jest globalne? p = (x,y) Takie samo dla każdego punktu p Można je stosunkowo łatwo opisać (kilka parametrów) T często reprezentowane jako macierz: p = M*p p = (x,y ) x y ' ' M x y
Globalny warping parametryczny Znamy już globalny warping parametryczny, jego przykładami są transformacje liniowe: Skalowanie Obroty Pochylenia i odbicia by y ax x ' ' y x b a y x 0 0 ' ' y x y x cos sin sin cos ' ' y x sh sh y x y x 1 1 ' ' y x y x 1 0 0 1 ' ' y x y x 1 0 0 1 ' '
Globalny warping parametryczny Cechy transformacji liniowych: Środek układu wsp. nie zmienia się Wszystkie linie mają swoje odpowiedniki Linie równoległe pozostają równoległe Zachowane są współczynniki kształtu/wz. wielkości Ale macierz 2x2 nie pozwala na zapisanie translacji. Wygodniej stosować współrzędne jednorodne 1 1 1 0 0 1 0 0 1 1 ' ' y x y x t y t x y x t t y x
Globalny warping parametryczny Cechy transformacji liniowych:? T(x,y) y y x x
Globalny warping parametryczny Transformacje Afiniczne Tr. Liniowe + przesunięcia Cechy transformacji liniowych: Środek układu wsp. Może zmienić położenie Wszystkie linie mają swoje odpowiedniki Linie równoległe pozostają równoległe Zachowane są współczynniki kształtu/wz. wielkości
Globalny warping parametryczny Transformacje Afiniczne Tr. Liniowe + przesunięcia? T(x,y) y y x x
Globalny warping parametryczny Transformacje Projekcyjne Tr. Afiniczne + projekcyjny warp Cechy transformacji liniowych: Środek układu wsp. może zmienić położenie Wszystkie linie mają swoje odpowiedniki Linie równoległe nie koniecznie pozostają równoległe Współczynniki kształtu nie muszą być zachowane w y x i h g f e d c b a w y x ' ' '
Globalny warping parametryczny Transformacje Projekcyjne Tr. Afiniczne + projekcyjny warp? T(x,y) y y x x
Globalny warping parametryczny Gdy mamy już określony warp obrazu, przekształcamy jego poszczególne piksele. Dwie drogi: Forward warping Inverse warping
Globalny warping parametryczny Forward warping Dla każdego piksela obrazu źródłowego określana jest jego pozycja na obrazie wynikowym x = T(x) T(x) x I(x) x I (x )
x Animacja zmiany kształtu - morphing Globalny warping parametryczny Forward warping - algorytm fwarp(i, I, T) { for (y=0; y<i.height; y++) for (x=0; x<i.width; x++) { (x,y )=T(x,y); I (x,y )=I(x,y); } } I I T x
Globalny warping parametryczny Forward warping rozwiązanie Rozprowadzenie (dodanie) wartości koloru po sąsiadujących pikselach (splatting) Normalizacja wartości kolorów obrazu po zakończeniu warpa
Globalny warping parametryczny Inverse warping Dla każdego piksela obrazu docelowego określany jest jego odpowiednik na obrazie źródłowym x = T -1 (x ) T -1 (x ) x I(x) x I (x )
Globalny warping parametryczny Inverse warping - algorytm iwarp(i, I, T) { for (y=0; y<i.height; y++) for (x=0; x<i.width; x++) { (x,y)=t -1 (x,y ); I (x,y )=I(x,y); } } T -1 I I x x
Globalny warping parametryczny Inverse warping Dla każdego piksela obrazu docelowego określany jest jego odpowiednik na obrazie źródłowym x = T -1 (x ) Co jeśli trafiamy pomiędzy pikselami źródłowymi? Rozwiązanie interpolacja z obrazu źródłowego
Globalny warping parametryczny Inverse warping Zalety: Brak dziur w obrazie wynikowym Wady Konieczność resamplingu źródła nie możemy stosować najbliższego sąsiada - aliasing
Globalny warping parametryczny Inverse warping - aliasing
Globalny warping parametryczny Czy możemy osiągnąć dobry efekt stosując globalny warping? Czasem tak
W szczególnych przypadkach (dopasowane do siebie obrazy tego samego obiektu) wystarczy nawet samo przenikanie Ale co gdy obrazy nie są dopasowane do siebie?
W przypadku obrazów tego samego obiektu wystarczy dopasowanie obrazów jako całości warping globalny Ale co gdy obrazy przedstawiają różne obiekty?
Co gdy obiekty różnią się kształtem? Przenikanie nie działa Globalne dopasowanie nie działa żadna globalna transformacja (np. afiniczna)
Rozwiązanie: Dopasowywanie szczegółów Ogon do ogona, oko do oka... Wprowadzamy tym samym zniekształcenia lokalne (nie parametryczne)
Procedura morphingu dla każdego t, 1. Znajdź kształt pośredni każdego z obrazów ( pośredni pies ) Lokalne zniekształcenia 2. Interpoluj kolory pikseli z tych 2 obrazów pośrednich przenikanie
Konieczność zdefiniowana bardziej złożonego przekształcenia Przekształcenia globalne były funkcjami kilku parametrów Przekształcenia lokalne u(x,y) i v(x,y) mogą być zdefiniowane niezależnie dla każdej pozycji x,y! (każdego szczegółu)
Warping lokalny Czy możemy osiągnąć dobry efekt stosując globalny warping? Aby dokonać warpu obrazu 1 w obraz 2 musimy określić odpowiedniki na obrazie (odpowiadające sobie elementy) Następnie te elementy podlegają transformacji a reszta obrazu podąża za nimi Najbardziej powszechny algorytm to Beier-Neely (1992), gdzie odpowiedniki są oznaczane (przez użytkownika) odcinkami (np. nos, oko itp) Taki warping jest transformacją obrazu (bardziej skomplikowaną od np. skali ale bazującą na tych samych zasadach)
Warping lokalny Czy możemy osiągnąć dobry efekt stosując globalny warping? Najbardziej powszechny algorytm to Beier-Neely (1992), gdzie odpowiedniki są oznaczane (przez użytkownika) odcinkami (np. nos, oko itp)
Algorytm Beier-Neely Przypadek pojedynczej pary odcinków Znamy przekształcenie (warp) całego odcinka na bazie położenia początkowego i końcowego. Ale co z punktami obrazu w koło linii? Jak określić źródłowy piksel p dla piksela p w obrazie docelowym?
Algorytm Beier-Neely Przypadek pojedynczej pary odcinków Wyznaczamy linię prostopadłą do odcinka i przechodzącą przez p (lub p ) u lub u oznacza część odcinka od początku do przecięcia z linią prostopadłą (wartość procentowa) v jest odległością p lub p od odcinka (w pikselach)
Algorytm Beier-Neely Przypadek pojedynczej pary odcinków Co się stanie z obrazem? Translacja odcinka
Algorytm Beier-Neely Przypadek pojedynczej pary odcinków Co się stanie z obrazem? Skalowanie odcinka
Algorytm Beier-Neely Przypadek pojedynczej pary odcinków Co się stanie z obrazem? Rotacja odcinka
Algorytm Beier-Neely Przypadek wielu par odcinków Możemy wyznaczyć wszystkie pary u i, v i oraz u i, v i na obrazie docelowym i źródłowym Pary u i, v i wskażą różne piksele źródłowe p' jest wyznaczany na ich podstawie jako średnia ważona
Algorytm Beier-Neely Przypadek wielu par odcinków Waga każdego z punktów pośrednich dla kolejnych odcinków jest obliczana wg. wzoru: gdzie: Length[i] jest długością i-tego odcinka dist[i] jest odległością punktu p od i-tego odcinka a, p, b są współczynnikami kontrolującymi warp
Algorytm Beier-Neely
Algorytm Beier-Neely Algorytm
Algorytm Beier-Neely Zaleta Zdecydowanie lepsza ekspresyjność efektu Wady Szybkość Kontrola
Warping lokalny Czy można inaczej zdefiniować przekształcenie lokalne? Tak, bazując na punktach kontrolnych ustalane przez użytkownika i triangulacji (triangularyzacji) - automatycznie
Jak określić przekształcenie? Zdefiniować odpowiadające sobie punkty kontrolne Interpolacja reszty pozycji by uzyskać pełne przekształcenie. Ale jak? Jak zdefiniować przejście od punktów kontrolnych do pikseli?
Rozwiązanie - siatka trójkątów 1. Oznaczenie odpowiadających sobie punktów w kluczowych obszarach obiektów
Rozwiązanie - siatka trójkątów 2. Zdefiniowanie siatki trójkątów, rozpiętej na tych punktach Ta sama siatka na obu obrazach Siatki określają odpowiadające sobie trójkąty na obrazach
Rozwiązanie - siatka trójkątów 3. Każdy trójkąt jest przekształcany osobno od wyglądu początkowego do końcowego warping linii. Ale jak przekształcać piksele wewnątrz trójkątów?
Odpowiedź wsp. barycentryczne Dowolny punkt q (piksel) wewnątrz trójkąta p 0, p 1, p 2 może zostać opisany za pomocą współrzędnych względnych do wierzchołków tego trójkąta Współrzędne te b 0, b 1, b 2 spełniają warunki: b 0 + b 1 + b 2 = 1 oraz q = b 0 p 0 + b 1 p 1 + b 2 p 2 Współrzędne barycentryczne można porównać do sytuacji umieszczenia w wierzchołkach p 0, p 1, p 2 trójkąta odważników o masach b 0, b 1, b 2. Wtedy punkt q jest środkiem ciężkości tak obciążonego trójkąta Współrzędne barycentryczne dowolnego punktu wewnątrz trójkąta są dodatnie Punkty każdej z trzech prostych, na których leżą boki trójkąta, mają jedną ze współrzędnych barycentrycznych równą 0
Odpowiedź wsp. barycentryczne Przebieg Obliczane są współrzędne barycentryczne punktu q, wewnątrz trójkąta na obrazie wynikowym (względem wsp. wierzchołków trójkąta). wsp. wierzchołków są zamieniane na współrzędne odpowiednika trójkąta na obrazie początkowym. Ze współrzędnych barycentrycznych wyliczana jest pozycja w obrazie początkowym punktu q odpowiednika punktu q na obrazie docelowym q q
OK, ale jak z grupy punktów uzyskać trójkąty?
Podział otoczki wypukłej zestawu punktów na powierzchni na trójkąty jest nazywany Triangularyzacją. Punkty znajdują się tylko i wyłącznie w wierzchołkach trójkątów Istnieje wiele wyników triangularyzacji zestawu punktów
Algorytm triangularyzacji o złożoności O(n 3 ) Powtarzaj tak długo jak możliwe Wybierz 2 wierzchołki Jeśli linia je łącząca nie przecina poprzednich linii zapisz ją
Jakość triangularyzacji Niech (T) = ( 1, 2,.., 3t ) będzie wektorem kątów triangularyzacji T Triangularyzacja T 1 będzie lepsza od T 2 jeśli (T 1 ) > (T 2 ) leksykograficznie Takie określenie jakości dąży do maksymalizacji najmniejszych kątów w trójkątach (Delaunay triangulation) dobrze źle
Poprawianie triangularyzacji W każdym czworokącie wypukłym możliwe jest odwrócenie krawędzi wewnętrznej. Jeśli poprawia to lokalną jakość triangularyzacji, poprawia również jakość triangularyzacji globalnej Jeśli odwrócenie krawędzi poprawia triangularyzację, poprzednia krawędź jest nazywana nielegalną
Naiwny algorytm Delaunay Rozpocznij z dowolną triangularyzacją Analizuj wszystkie dostępne czworokąty Odwracaj kolejno nielegalne krawędzie, tak długo jak występują Może pracować bardzo długo
algorytm Delaunay (Delone) Wykorzystuje podział płaszczyzny na komórki Woronoja (dla danego zbioru n punktów, dzieli się płaszczyznę na n obszarów, w taki sposób, że każdy punkt w dowolnym obszarze znajduje się bliżej określonego punktu ze zbioru n punktów niż do pozostałych n 1 punktów ) Łącząc punkty z sąsiadujących ze sobą obszarów uzyskujemy triangularyzację Delaunay Złożoność zredukowana do O(nlogn)
Wiemy już jak przekształcić jeden obiekt w drugi ale jak stworzyć animowaną sekwencję morfingu? 1. Posiadamy obrazy P i Q. 2. Określamy zakres chwil (klatek) animacji f jako <0,1> 3. Dla określonej chwili f animacji (np. 0.25) wyznaczamy stany (warpy) obrazów wg. zasady f P i (1-f)Q 4. Wykonujemy zlanie kolorów obu przekształconych obrazów
Jak znaleźć wartość pośrednią między P i Q? v = Q - P P Q Interpolacja liniowa dowolny punkt pośredni ap + bq, Zdefiniowany tylko gdy a+b = 1 więc ap+bq = ap+(1-a)q P + 0.5v = P + 0.5(Q P) = 0.5P + 0.5 Q P + 1.5v = P + 1.5(Q P) = -0.5P + 1.5 Q (ekstrapolacja)
Ograniczenie dla morfingu 2D Możliwość wystąpienia złożenia trójkątów Pojawia się w przypadku zmiany kolejności punktów kontrolnych na obrazie Z reguły w przypadku próby wykonania przekształcenia pseudo 3D Działa poprawnie tylko z danymi 3D Za pomocą ekstrapolacji można osiągnąć ciekawe efekty - karykatury
Morfing widoku view morphing Morfowaniu podlega pozycja wirtualnej kamery
Morfing widoku view morphing Metoda i efekt Kamery rejestrujące ten sam obiekt w tej samej chwili Tworzą zgrubną ścieżkę ruchu wokół obiektu Płynny ruch kamery wokół obiektu uzyskany dzięki morfowaniu pozycji wirtualnej kamery pomiędzy poszczególnymi rzeczywistymi kamerami w ścieżce
Przetwarzanie obrazu cyfrowego Zadanie referatowe View morphing 3D mesh morphing
That s all folks