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.

Tři panely v řadě. Nejlevější je kartézský zdrojový obraz zobrazující ciferník hodin -- dvě soustředné kružnice se dvanácti ryskami kolem vnějšího okraje v násobcích 30 stupňů a jednou ručičkou směřující jedním směrem. Prostřední panel zobrazuje linpolar přepočet tohoto zdroje: obdélníkový výstupní obraz, kde se dvanáct rysek objevuje jako rovnoměrně rozmístěné svislé čárky podél horního řádku, dvě soustředné kružnice se objevují jako dvě vodorovné čáry v různých svislých pozicích a ručička hodin se objevuje jako jediná svislá čára na pozici odpovídající jejímu úhlu ve zdroji. Nejpravější panel zobrazuje logpolar přepočet: stejné úhlové rozložení podél vodorovné osy, ale s mezerou mezi vnitřní a vnější kružnicí stlačenou, protože osa vzdálenosti je logaritmická.

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.