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