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.
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.