5.24. Polární transformace

Polární souřadnice pojmenovávají každý pixel pomocí úhlu od referenčního směru a vzdálenosti od zvoleného středu namísto vodorovného a svislého posunu vůči počátku v levém horním rohu. Tato reprezentace se vyplatí díky jedné vlastnosti: rotace kolem zvoleného středu se stává posunem podél osy úhlu, což umožňuje algoritmu nezávislému na rotaci prohledávat mnohem jednodušší prostor parametrů než přímo rotace. Přepočet provádějí metody linpolar() a logpolar().

5.24.1. Tyto dvě metody

linpolar() provádí přepočet z kartézských souřadnic do polárních s lineární osou vzdálenosti. Každý sloupec výstupu odpovídá pevnému úhlu kolem středu; každý řádek výstupu odpovídá pevné vzdálenosti od středu.

img.linpolar()

logpolar() provádí stejný přepočet s logaritmickou osou vzdálenosti. Zpracování úhlu je shodné; liší se to, že vzdálenosti rostou po řádcích výstupu exponenciálně, nikoli lineárně. Tento rozdíl je důležitý kvůli druhé geometrické vlastnosti, kterou polární souřadnice odhalují: změna měřítka zdroje kolem zvoleného středu se stává posunem podél osy vzdálenosti – ale pouze tehdy, když je tato osa logaritmická. Při lineární ose vzdálenosti změna měřítka polární obraz roztáhne; při logaritmické ose vzdálenosti jej posune o pevnou hodnotu.

img.logpolar()

Obě metody přijímají klíčová slova x= a y=, která nastavují střed polárního přepočtu v souřadnicích zdrojových pixelů, přičemž ve výchozím nastavení odpovídají polovině šířky obrazu, respektive polovině výšky obrazu. Volba středu je důležitá: polární transformace kolem nesprávného bodu skončí s obsahem přeházeným tak, že to zničí vlastnost rotace / posunu.

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.

Ciferník hodin přepočítaný metodami linpolar() a logpolar(). Soustředné kružnice ve zdroji se ve výstupu stávají vodorovnými čarami; úhlové rysky se stávají rovnoměrně rozmístěnými svislými čarami podél osy úhlu. Logaritmicko-polární varianta stlačuje radiální rozestupy.

5.24.2. Kdy sáhnout po které

Volba mezi linpolar() a logpolar() je volbou toho, jakou invarianci aplikace potřebuje. Pro samotnou invarianci vůči rotaci – zjištění, že se tatáž scéna objevuje ve dvou snímcích, přičemž druhý je otočen o neznámý úhel – postačí linpolar(): rotace se v polárním obrazu stane vodorovným posunem a porovnávač pracující pouze s posunem, jako je find_displacement(), získá úhel jako velikost tohoto posunu. Když záleží i na invarianci vůči měřítku – druhý snímek je otočen a přiblížen – logpolar() převede obě neznámé na posuny: vodorovný pro rotaci a svislý pro měřítko.

To je standardní postup pro sledovač, který je odolný vůči změnám rotace a měřítka: přepočtěte referenční snímek a každý živý snímek do logaritmicko-polárních souřadnic kolem stejného středu, spusťte na dvojici find_displacement() a z výsledku odečtěte pole rotation a scale.

5.24.3. Rozvinutí kruhových příznaků

Samostatným využitím polárních transformací je rozvinutí příznaků, které jsou v obrazu přirozeně kruhové. Ciferník hodin, stupnice měřidla, kontrolní cíl, který je z principu kruhový – ty všechny se v polární projekci stávají lineárními, což je forma, se kterou se většině algoritmů pracuje snáze.

Obrázek výše to ukazuje přímo: dvanáct rysek na ciferníku hodin, rovnoměrně rozmístěných po obvodu v kartézských souřadnicích, se v polárním obrazu stává dvanácti rovnoměrně rozmístěnými svislými čarami. Obdélník kolem kterékoli jedné rysky v polárním obrazu identifikuje pozici této rysky bez ohledu na to, jak byl ciferník při snímání otočen. Porovnávač šablon spuštěný napříč polárním obrazem najde každou rysku v jediném průchodu.

5.24.4. Inverzní mapování

reverse=True provádí inverzi dopředné polární projekce: z polárního obrazu vytvoří kartézský obraz, jehož je daný polární obraz projekcí. Aplikace volá dopřednou formu, aby spustila algoritmus v polárních souřadnicích, a poté volá obrácenou formu, aby promítla výsledek zpět do kartézských souřadnic pro jakoukoli navazující fázi, která jej potřebuje vidět.

Nejčastějším využitím je úprava polárního obrazu a jeho zpětná projekce: filtr aplikovaný na polární obraz – vodorovné vyhlazení, které v polárních termínech rozmazává napříč úhly, ale zachovává radiální strukturu – produkuje kartézský výsledek, který byl úhlově rozmazán, což není něco, co by kartézský filtr dokázal přímo.