5.24. Poláris transzformációk

A poláris koordináták minden egyes képpontot egy referenciairánytól mért szöggel és egy választott középponttól mért távolsággal neveznek meg, a bal felső origótól számított vízszintes és függőleges eltolások helyett. Ez a megjelenítés egyetlen azonosság miatt éri meg: a választott középpont körüli forgatás a szögtengely menti eltolássá válik, ami lehetővé teszi, hogy egy forgásinvariáns algoritmus sokkal egyszerűbb paramétertérben keressen, mint közvetlenül a forgatások terében. A linpolar() és a logpolar() végzi az újravetítést.

5.24.1. A két metódus

A linpolar() a derékszögű-poláris újravetítést lineáris távolságtengellyel végzi. Minden kimeneti oszlop a középpont körüli rögzített szögnek felel meg; minden kimeneti sor a középponttól mért rögzített távolságnak felel meg.

img.linpolar()

A logpolar() ugyanazt az újravetítést logaritmikus távolságtengellyel végzi. A szögkezelés azonos; a különbség az, hogy a távolságok a kimenet sorai mentén exponenciálisan nőnek, nem pedig lineárisan. Ez a különbség azért fontos, mert a poláris koordináták egy második geometriai azonosságot is feltárnak: a forrás választott középpont körüli skálázása a távolságtengely menti eltolássá válik – de csak akkor, ha az a tengely logaritmikus. Lineáris távolságtengely esetén a skálázás megnyújtja a poláris képet; logaritmikus távolságtengely esetén egy rögzített értékkel eltolja azt.

img.logpolar()

Mindkét metódus x= és y= kulcsszavakat fogad, amelyek a poláris újravetítés középpontját állítják be a forrás képpont-koordinátáiban, alapértelmezés szerint a kép szélességének, illetve magasságának felére. A középpont megválasztása lényeges: egy rossz pont körüli poláris transzformáció a tartalmat olyan módon keveri össze, ami tönkreteszi a forgatás / eltolás azonosságot.

Három panel egy sorban. A legbal oldali egy derékszögű forráskép, amely egy óralapot mutat -- két koncentrikus kör tizenkét osztásjellel a külső peremen, 30 fok többszöröseinél, és egyetlen mutatóval, amely egy irányba mutat. A középső panel ennek a forrásnak a linpolar újravetítését mutatja: egy téglalap alakú kimeneti kép, ahol a tizenkét osztásjel egyenletesen elosztott függőleges vonásként jelenik meg a felső sorban, a két koncentrikus kör két vízszintes vonalként jelenik meg különböző függőleges pozíciókban, az óramutató pedig egyetlen függőleges vonalként jelenik meg a forrásban lévő szögének megfelelő pozícióban. A legjobb oldali panel a logpolar újravetítést mutatja: ugyanaz a szögeloszlás a vízszintes tengely mentén, de a belső és külső kör közötti rés össze van nyomva, mert a távolságtengely logaritmikus.

Egy óralap a linpolar() és a logpolar() által újravetítve. A forrásban lévő koncentrikus körök vízszintes vonalakká válnak a kimenetben; a szögosztásjelek egyenletesen elosztott függőleges vonalakká válnak a szögtengely mentén. A log-poláris változat összenyomja a sugárirányú távolságokat.

5.24.2. Mikor melyiket válasszuk

A linpolar() és a logpolar() közötti választás annak a választása, hogy az alkalmazásnak melyik invarianciára van szüksége. Önmagában a forgásinvariancia esetén – annak észlelésére, hogy ugyanaz a jelenet két képkockán is megjelenik, a második ismeretlen szöggel elforgatva – a linpolar() elegendő: a forgatás vízszintes eltolássá válik a poláris képen, és egy csak eltolásra képes illesztő, mint a find_displacement(), az eltolás nagyságaként visszanyeri a szöget. Amikor a skálainvariancia is számít – a második képkocka el van forgatva és nagyítva is – a logpolar() mindkét ismeretlent eltolásra redukálja: a forgatást vízszintesre, a skálát függőlegesre.

Ez a szokásos recept egy olyan követőhöz, amely ellenálló a forgatás- és skálaváltozásokkal szemben: vetítsd újra a referencia-képkockát és minden élő képkockát log-poláris koordinátákba ugyanazon középpont körül, futtasd a find_displacement() metódust a páron, és olvasd ki az eredményből a rotation és scale mezőket.

5.24.3. Körkörös jellemzők kiterítése

A poláris transzformációk egy másik felhasználása a képen természetükből adódóan körkörös jellemzők kiterítése. Egy óralap, egy műszer számlapja, egy tervezésénél fogva körkörös ellenőrzési cél – mindegyik lineárissá válik a poláris vetületben, ami a legtöbb algoritmus számára könnyebben kezelhető forma.

A fenti ábra ezt közvetlenül szemlélteti: az óralapon lévő tizenkét osztásjel, amelyek a derékszögű ábrázolásban egyenletesen oszlanak el a kerület mentén, tizenkét egyenletesen elosztott függőleges vonallá válnak a poláris képen. A poláris képen bármelyik osztásjel köré rajzolt téglalap azonosítja az adott osztásjel pozícióját, függetlenül attól, hogy a felvételkor merre volt elforgatva az óralap. A poláris képen végigfuttatott sablonillesztő egyetlen menetben megtalálja az összes osztásjelet.

5.24.4. Az inverz leképezés

A reverse=True az előrefelé történő poláris vetítés inverzét futtatja: egy poláris képet kapva előállítja azt a derékszögű képet, amelynek poláris vetülete az. Az alkalmazás meghívja az előrefelé történő formát, hogy poláris koordinátákban futtasson egy algoritmust, majd meghívja a fordított formát, hogy az eredményt visszavetítse derékszögűbe, bármilyen későbbi szakasz számára, amelynek látnia kell azt.

A leggyakoribb felhasználás egy poláris kép módosítása és visszavetítése: egy a poláris képre alkalmazott szűrő – egy vízszintes simítás, amely poláris értelemben a szögek mentén elmosódást okoz, de megőrzi a sugárirányú szerkezetet – olyan derékszögű eredményt állít elő, amely szög szerint van elmosva, amit egy derékszögű szűrő közvetlenül nem tud megtenni.