Przekształcenia geometryczne - Polsko
Transkrypt
Przekształcenia geometryczne - Polsko
Przetwarzanie i Kompresja Obrazów. Przekształcenia geometryczne Aleksander Denisiuk ([email protected]) Polsko-Japońska Akademia Technik Komputerowych Wydział Informatyki w Gdańsku ul. Brzegi 55, 80-045 Gdańsk 1 kwietnia 2016 1 / 33 Przekształcenia geometryczne Przekształcenia afiniczne Przekształcenia rzutowe Najnowsza wersja tego dokumentu dostępna jest pod adresem http://users.pja.edu.pl/~denisjuk/ Przekształcenia nieliniowe 2 / 33 Przekształcenia afiniczne Odbicie Skalowanie Interpolacja Obrót Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia afiniczne Przekształcenia nieliniowe 3 / 33 Odbicie Przekształcenia afiniczne Odbicie (x, y) 7→ (1 − x, y) (x, y) 7→ (x, 1 − y) Skalowanie Interpolacja Obrót Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe 4 / 33 Skalowanie Przekształcenia afiniczne (x, y) 7→ (λ1 x, λ2 y) Konieczne jest zastosowanie interpolacji Odbicie Skalowanie Interpolacja Obrót Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe 5 / 33 Metoda najbliższego sąsiedztwa Przekształcenia afiniczne f (x, y) = f (xi , yj ), gdzie |x − xi | oraz |y − yj | są minimalne Odbicie Skalowanie Interpolacja Obrót y (x1 , y2 ) (x2 , y2 ) Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe (x, y) (x1 , y1 ) (x2 , y1 ) x 6 / 33 Interpolacja biliniowa Przekształcenia afiniczne Odbicie Skalowanie Interpolacja Obrót f (x, y) = (1 − β)f1 + βf2 , gdzie fj = (1 − α)f (x1 , yj ) + αf (xx , yj ) (j = 1, 2), gdzie α= x−x1 x2 −x1 = x − x1 , β = y−y1 y2 −y1 = y − y1 Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe y (x1 , y2 ) α (x2 , y2 ) 1−α 1−β (x, y) β α (x1 , y1 ) 1−α x (x2 , y1 ) 7 / 33 Interpolacja bisześcienna Przekształcenia afiniczne Odbicie Skalowanie Interpolacja Obrót Nachylenie f (x, y) = f0 + f1 (y − y0 ) + 21 (f2 − 2f1 + f0 )(y − y0 )(y − y1 ) + 16 (f3 − 3f2 + 3f1 − f0 )(y − y0 )(y − y1 )(y − y2 ), gdzie fj = f0,j + f1,j (x − x0 ) + 12 (f2,j − 2f1,j + f0,j )(x − x0 )(x − x1 ) + 61 (f3,j − 3f2,j + 3f1,j − f0,j )(x − x0 )(x − x1 )(x − x2 ) Przesunięcie y Przekształcenia rzutowe Przekształcenia nieliniowe f0,3 f1,3 f2,3 f3,3 f0,2 f1,2 f2,2 f3,2 f0,1 f1,1 (x, y) f2,1 f3,1 f0,0 f1,0 f2,0 f3,0 x 8 / 33 Ponadto Przekształcenia afiniczne Odbicie Interpolacja za pomocą spline’ów Interpolacja w dziedzinie widmowej Skalowanie Interpolacja Obrót Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe 9 / 33 Obrót Przekształcenia afiniczne (x, y) 7→ (x cos φ − y sin φ, x sin φ + y cos φ) Dookoła początku układu współrzędnych Odbicie Skalowanie Interpolacja Obrót Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe dookoła punktu (x0 , y0 ) przekształcenie jest dane cos φ − sin φ −x0 cos φ + y0 sin φ + x0 macierzą: sin φ cos φ −x0 sin φ − y0 cos φ + y0 0 0 1 10 / 33 Nachylenie do osi Ox Przekształcenia afiniczne Odbicie Skalowanie Interpolacja Obrót 1 − tg φ 0 1 0 0 0 0 1 Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe Względem początku układu współrzędnych Nachylenie w lewo dla ujemnych kątów w prawo 11 / 33 Nachylenie do osi Oy Przekształcenia afiniczne Odbicie Skalowanie Interpolacja Obrót 1 0 0 tg φ 1 0 0 0 1 Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe Względem początku układu współrzędnych Nachylenie w lewo dla ujemnych kątów w prawo 12 / 33 Przesunięcie Przekształcenia afiniczne Odbicie Skalowanie Interpolacja Obrót 1 0 x 0 1 y 0 0 1 Nachylenie Przesunięcie Przekształcenia rzutowe Przekształcenia nieliniowe 13 / 33 Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Cztery punkty Przekształcenia nieliniowe Przekształcenia rzutowe 14 / 33 Transformacja perspektywiczna Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Cztery punkty Przekształcenia nieliniowe a11 a12 a13 A = a21 a22 a23 a31 a32 a33 zazwyczaj wymaga się det A 6= 0. czemu? 15 / 33 Transformacja po czterech punktach Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Cztery punkty Dane są dwie czwórki punktów na płaszczyźnie: P = (P0 , P1 , P2 , P3 ) oraz Q = (Q0 , Q1 , Q2 , Q3 ). Przekształcenia nieliniowe Pj = (x0 , yj ), Qj = (sj , tj ), j = 0, . . . , 3. Znaleźć taką transformację perspektywiczną A : R2 → R2 , że A(Pj ) = Qj , j = 0, . . . , 3. P3 Q2 Q3 P2 Q0 P1 Q1 P0 16 / 33 Metoda algebraiczna Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Rozwiązywanie jednorodnego układu równań liniowych 12 równań 13 zmiennych Cztery punkty Przekształcenia nieliniowe 17 / 33 Metoda geometryczna Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Przekształcenie pomocnicze W (P ) : R2 → R2 A = W (Q) −1 W (P ) Cztery punkty Przekształcenia nieliniowe P3 1 P2 W (P ) P1 1 P0 18 / 33 Przekształacenie W Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Rozkładamy W w iloczyn W (P ) = V (P )U (P ), gdzie U (P ) będzie przekształceniem afinicznym, V (P ) — rzutowym. Cztery punkty P3′ Przekształcenia nieliniowe P3 1 P2 U (P ) P1 1 P0 P3′ 1 1 V (P ) 1 1 19 / 33 Przekształcenie U Przekształcenia afiniczne Przekształcenie U to zamiana standardowego układu współrzędnych (O, i, j) na (P0 , e1 , e2 ). Przekształcenia rzutowe Transformacja perspektywiczna P3′ Cztery punkty P3 Przekształcenia nieliniowe 1 P2 U e2 e1 P1 O 1 P0 20 / 33 Przekształcenie U Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna e1 e2 = i j M = i j dx 1 dy1 ! dx2 , gdzie dy2 dxk = xk − x0 , dyk = yk − y0 , k = 1, 2, 3. Cztery punkty Przekształcenia nieliniowe M −1 = e1 e2 · 1 ∆ ! dy2 −dx2 , −dy1 dx1 ∆ = det M = dx1 dy2 − dy1 dx2 . W szczególności, ! ! −−→ x0 x′0 −1 OP0 = e1 e2 M = e1 e2 , gdzie y0′ y0 i j = e1 e2 gdzie x′0 = (x0 dy2 − y0 dx2 )/∆, y0′ = (−x0 dy1 + y0 dx1 )/∆. Więc U : ! x x − x0 7→ M −1 y y − y0 ! = M −1 ! x − y x′0 y0′ ! 21 / 33 Macierz przekształcenia U Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna U= dy2 ∆ 1 − dy ∆ 0 Cztery punkty Przekształcenia nieliniowe 2 − dx ∆ dx1 ∆ 0 −x0 dy2 +y0 dx2 ∆ x0 dy1 −y0 dx1 . ∆ W szczególności, P3 7→ 1 x′3 y3′ ! = 1 ∆ dx3 dy2 − dy3 dx2 −dx3 dy1 + dy3 dx1 ! dx1 dx2 +x0 Przekształcenie odwrotne U −1 = dy1 dy2 +y0 0 0 1 Stosowanie współrzędnych jednorodnych pozwala zamienić U na prostszą macierz: dy2 −dx2 −x0 dy2 + y0 dx2 x0 dy1 − y0 dx1 . −dy1 dx1 0 0 ∆ 22 / 33 Przekształcenie V Przekształcenia afiniczne P3′ = (x′3 , y3′ ), określone na slajdzie 22 Przekształcenia rzutowe Transformacja perspektywiczna P3′ Cztery punkty Przekształcenia nieliniowe 1 1 V (P ) 1 1 23 / 33 Równania na macierz V Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna (0, 0) 7→ (0, 0): (1, 0) 7→ (1, 0): Cztery punkty Przekształcenia nieliniowe a13 = a23 = 0, a33 = 1. a11 = λ1 , a21 = 0, a31 + 1 = λ1 . (1, 0) 7→ (1, 0): a12 = 0, a22 = λ2 , a32 + 1 = λ2 . a31 = a11 − 1. a32 = a22 − 1. P3′ 7→ (1, 1) a11 x′3 = λ, a22 y3′ = λ, −x′3 − y3′ + 1 = −λ. 24 / 33 Macierz V Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna 3 Cztery punkty Przekształcenia nieliniowe x′ +y ′ −1 Rozwiązanie równań: 0 3 x′3 0 y3′ −1 x′3 Inna V: postać macierzy x2 − x3 y2 − y3 x1 − x3 y1 − y3 0 x3 − x0 y3 − y0 x2 − x0 y2 − y0 x2 − x3 x1 − x3 0 x1 − x0 x3 − x0 x − x y − y x − x 2 0 3 2 3 2 x1 − x0 y1 − y0 x1 − x3 x3 − x0 y3 − y0 x1 − x0 x2 − x0 y2 − y0 x3 − x0 0 x′3 +y3′ −1 y3′ x′3 −1 y3′ 0 1 y2 y1 y1 y3 y2 y1 y1 y3 − y3 − y3 − y0 − y0 − y0 − y3 − y0 − y0 0 0 1 25 / 33 Macierz V −1 Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Cztery punkty Przekształcenia nieliniowe V t = T S, gdzie S jest skalowaniem, a T — przesunięciem równoległym (V t )−1 = S −1 T −1 t −1 t −1 = (S −1 T −1 )t V = (V ) V −1 x′3 ′ ′ x3 +y3 −1 = x′3 0 1 − y3′ 0 1−y3′ x′3 +y3′ −1 0 y3′ x′3 +y3′ −1 1−x′3 x′3 +y3′ −1 0 0 ∼ 1 0 0 0 y3′ 1 − x′3 x′3 + y3′ − 1 26 / 33 Algorytm obliczenia przekształcenia Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Cztery punkty Przekształcenia nieliniowe Pj = (xj , yj ), Qj = (sj , tj ), j = 0, . . . , 3 1. dxj = xj − x0 , dyj = yj − y0 , j = 1, 2, 3 2. ∆p = dx1 dy2 − dy1 dx2 ′ = −dx3 dy1 +dy3 dx1 3 dx2 3. x′3 = dx3 dy2∆−dy , y 3 ∆p p dy2 −dx2 −x0 dy2 + y0 dx2 4. U (P ) = −dy1 dx1 x0 dy1 − y0 dx1 0 0 ∆p x′ +y ′ −1 3 5. V (P ) = 3 ′ x3 0 y3′ −1 x′3 0 x′3 +y3′ −1 y3′ x′3 −1 y3′ 0 0 1 27 / 33 Algorytm obliczenia przekształcenia, cd Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna 6. dsj = sj − s0 , dtj = tj − t0 , j = 1, 2, 3 7. ∆q = ds1 dt2 − dt1 ds2 ′ = −ds3 dt1 +dt3 ds1 3 ds2 , t 8. s′3 = ds3 dt2∆−dt 3 ∆q q Cztery punkty Przekształcenia nieliniowe 9. 10. 11. 12. s′3 0 0 0 t′3 V −1 (Q) = 0 1 − t′3 1 − s′3 t′3 + s′3 − 1 ds1 ds2 +s0 U −1 (Q) = dt1 dt2 +t0 0 0 1 −1 (Q)V −1 (Q)V (P )U (P ) A = U ! x λs x s y 7→ λt = A y 7→ t 1 λ 1 28 / 33 Uwagi Przekształcenia afiniczne Przekształcenia rzutowe Transformacja perspektywiczna Cztery punkty Przekształcenia nieliniowe Jeżeli punkty P tworzą kwadrat [0, 1] × [0, 1], to U (P ) = V (P ) = I A = U −1 (Q)V −1 (Q) Jeżeli punkty Q tworzą kwadrat [0, 1] × [0, 1], to U −1 (Q) = V −1 (Q) = I A = V (P )U (P ) 29 / 33 Przekształcenia afiniczne Przekształcenia rzutowe Przekształcenia nieliniowe Ogólne przekształcenia Wybuch Przekształcenia nieliniowe 30 / 33 Ogólne przekształcenia Przekształcenia afiniczne (x, y) 7→ (f (x, y), g(x, y)) Przekształcenia rzutowe Przekształcenia nieliniowe Ogólne przekształcenia Wybuch 31 / 33 Wybuch Przekształcenia afiniczne Przekształcenia rzutowe Przekształcenia nieliniowe Ogólne przekształcenia Wybuch We współrzędnych biegunowych (r, φ) 7→ (crk , φ), gdzie c > 0 jest stałą, k nazywa się stopniem implozji p r = x2 + y 2 x = r cos φ, y = r sin φ k > 0 — implozja k < 0 — eksplozja cos φ = xr , sin φ = y r Zazwyczaj obraz przeskalowuje się na kwadrat [0, 1] × [0, 1] 32 / 33 Przykład Przekształcenia afiniczne Przekształcenia rzutowe Przekształcenia nieliniowe Ogólne przekształcenia Wybuch k = 0,75 k = −0,75 33 / 33