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.

Three panels in a row. The leftmost is a Cartesian source image showing a clock face -- two concentric circles with twelve tick marks around the outer rim at multiples of 30 degrees, and a single hand pointing in one direction. The middle panel shows the linpolar re-projection of that source: a rectangular output image where the twelve tick marks appear as evenly spaced vertical strokes along the top row, the two concentric circles appear as two horizontal lines at different vertical positions, and the clock hand appears as a single vertical line at the position corresponding to its angle in the source. The rightmost panel shows the logpolar re-projection: the same angular distribution along the horizontal axis, but with the gap between the inner and outer circles compressed because the distance axis is logarithmic.

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.