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