Affin transzformáció reprezentációja és végrehajtása (OpenCV)
Reprezentáció
Az affin transzformáció matematikailag megadható egy 2x3 méretű mátrixszal, vagyis szabadsági foka 6:
Ezzel balról szorozva egy 3 elemű oszlopvektort, amely a transzformálandó pont X és Y koordinátáit, valamint egy 1 értéket tartalmaz, egy újabb 2 elemű oszlopvektort kapunk, a pont transzformált képét.
\left( \begin{matrix} x' \\ y' \end{matrix} \right) = M \left( \begin{matrix} x \\ y \\ 1 \end{matrix} \right)
Vagyis
Az rij értékek a forgatást, skálázást és a nyírást együttesen foglalják magukban, a t értékek az eltolást jelentik.
Eltolás megadása mátrixszal
tx és ty értékek megadásával. Kombinálható a forgató, skálázó, nyíró résszel. Az eltolás hatása érvényesül utolsóként. Ha csak eltolást szeretnénk, akkor r11 = r22 = 1 és r12 = r21 = 0 legyenek.
Skálázó/tükröző mátrix
r11 az X-tengely menti skálázó érték, r22 az Y-tengely menti, amennyiben r12 = r21 = 0. Ha skála értéke 0 és 1 közötti, akkor kicsinyítő a hatás, 1 esetén nincs változás, 1-nél nagyobb értékek esetén nagyítás történik. Negatív érték esetén a skálázás mellett tengelyre való tükrözés is történik. Figyeljünk arra, hogy ekkor a koordináta-értékek negatívvá válnak, ha nem vigyázunk, a képtartományon kívül eshetnek!
Forgatás mátrixa
Mind a 4 rij érték szükséges. Legegyszerűbb az alábbi OpenCV függvénnyel dolgozni, ezzel lehetőségünk van a forgatási középpont (origótól különböző), és skálatényező megadására is.
M = cv2.getRotationMatrix2D(center, angle, scale)
center | Elforgatás középpontja, tuple objektumként megadva. |
angle | Elforgatás szöge (fokokban). |
scale | Uniform (egyenlő mértékű) skálázó érték. |
Eredményül a forgatást reprezentáló 2x3 méretű mátrixot kapjuk.
Affin transzformáció végrehajtása képre
A végrehajtást megelőzően elő kell állítanunk az affin mátrixot, például a fentebb leírt módokat használva.
dst = cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue)
dst | Célkép. Nem lehet azonos a forrással! |
src | Forráskép. |
M | Végrehajtandó transzformáció mátrixa. |
dsize | Célkép mérete, tuple objektumként megadva. |
flags | Opcionális: Interpolációs technika választása (mint resize esetén) + WARP_INVERSE_MAP megadása, ha M inverz transzformációs mátrix. |
borderMode | Opcionális: Extrapolációs módszer választása (nem definált területre). Alapértelmezés: BORDER_TRANSPARENT. |
borderValue | Opcionális: A transzformáció alkalmazása során értéket nem kapó intenzitások értéke. Alapértéke 0. |