5.24. Napamuunnokset¶
Napakoordinaatit nimeävät jokaisen pikselin kulman avulla suhteessa vertailusuuntaan ja etäisyytenä valitusta keskipisteestä sen sijaan, että käytettäisiin vaaka- ja pystysuuntaisia poikkeamia vasemmasta yläkulmasta. Esitystapa ansaitsee paikkansa yhden ominaisuuden ansiosta: kierto valitun keskipisteen ympäri muuttuu siirtymäksi kulma-akselilla, mikä antaa kierrosta riippumattomalle algoritmille mahdollisuuden etsiä paljon yksinkertaisemmasta parametriavaruudesta kuin suoraan kierroksista. linpolar() ja logpolar() suorittavat uudelleenprojisoinnin.
5.24.1. Kaksi menetelmää¶
linpolar() suorittaa kartesiolaisesta napakoordinaatistoon tapahtuvan uudelleenprojisoinnin lineaarisella etäisyysakselilla. Jokainen ulostulosarake vastaa kiinteää kulmaa keskipisteen ympäri; jokainen ulostulorivi vastaa kiinteää etäisyyttä keskipisteestä.
img.linpolar()
logpolar() suorittaa saman uudelleenprojisoinnin logaritmisella etäisyysakselilla. Kulman käsittely on identtinen; erona on, että etäisyydet kasvavat eksponentiaalisesti ulostulon rivejä alaspäin lineaarisen kasvun sijaan. Ero on merkityksellinen toisen geometrisen ominaisuuden vuoksi, jonka napakoordinaatit paljastavat: lähteen skaalaaminen valitun keskipisteen ympäri muuttuu siirtymäksi etäisyysakselilla – mutta vain silloin, kun akseli on logaritminen. Lineaarisella etäisyysakselilla skaalaus venyttää napakuvaa; logaritmisella etäisyysakselilla skaalaus siirtää sitä kiinteän verran.
img.logpolar()
Molemmat menetelmät ottavat x=- ja y=-avainsanat, jotka asettavat napauudelleenprojisoinnin keskipisteen lähdepikselikoordinaateissa ja joiden oletusarvona ovat puolet kuvan leveydestä ja puolet kuvan korkeudesta. Keskipisteen valinta on merkityksellinen: väärän pisteen ympäri tehty napamuunnos päätyy sekoittamaan sisällön tavoilla, jotka tuhoavat kierto-/siirtymäominaisuuden.
Kellotaulu uudelleenprojisoituna menetelmillä linpolar() ja logpolar(). Lähteen samankeskisistä ympyröistä tulee ulostulossa vaakaviivoja; kulmaviivamerkeistä tulee tasaisin välein olevia pystyviivoja kulma-akselilla. Logaritminen napamuunnos tiivistää säteittäisvälin.¶
5.24.2. Milloin kumpaakin kannattaa käyttää¶
Valinta linpolar()- ja logpolar()-menetelmän välillä on valinta siitä, mitä invarianssia sovellus tarvitsee. Pelkkään kiertoinvarianssiin – sen havaitsemiseen, että sama näkymä esiintyy kahdessa kehyksessä, joista toinen on kiertynyt tuntemattoman kulman verran – riittää linpolar(): kierto muuttuu vaakasuuntaiseksi siirtymäksi napakuvassa, ja pelkkä siirtymän tunnistava sovitin kuten find_displacement() palauttaa kulman siirtymän suuruutena. Kun myös skaalausinvarianssi on tärkeä – toinen kehys on kierretty ja zoomattu – logpolar() typistää molemmat tuntemattomat siirtymiksi: vaakasuuntaiseksi kierron osalta ja pystysuuntaiseksi skaalauksen osalta.
Tämä on vakiomenetelmä seurantalaitteelle, joka kestää kierto- ja skaalausmuutoksia: uudelleenprojisoi vertailukehys ja jokainen reaaliaikainen kehys logaritmiseen napakoordinaatistoon saman keskipisteen ympäri, suorita find_displacement() parille ja lue rotation- ja scale-kentät tuloksesta.
5.24.3. Ympyrämäisten piirteiden suoristaminen¶
Napamuunnosten erillinen käyttötapa on luonnostaan ympyrämäisten piirteiden suoristaminen kuvassa. Kellotaulu, mittarin numerotaulu, suunnitellusti ympyrämäinen tarkastuskohde – niistä kaikista tulee napaprojektiossa lineaarisia, mikä on muoto, jonka useimmat algoritmit kokevat helpommaksi käsitellä.
Yllä oleva kuva osoittaa sen suoraan: kellotaulun kaksitoista viivamerkkiä, jotka ovat tasaisin välein kehää pitkin kartesiolaisessa esityksessä, muuttuvat kahdeksitoista tasavälein olevaksi pystyviivaksi napakuvassa. Suorakulmio yhden viivamerkin ympärillä napakuvassa tunnistaa kyseisen viivamerkin sijainnin riippumatta siitä, mihin suuntaan kellotaulu oli kiertynyt kuvaushetkellä. Mallisovitin, joka ajetaan koko napakuvan yli, löytää jokaisen viivamerkin yhdellä läpikäynnillä.
5.24.4. Käänteinen kuvaus¶
reverse=True suorittaa eteenpäin tehtävän napaprojektion käänteistoiminnon: annetusta napakuvasta tuotetaan kartesiolainen kuva, jonka napaprojektio se on. Sovellus kutsuu eteenpäin-muotoa suorittaakseen algoritmin napakoordinaatistossa ja kutsuu sitten käänteismuotoa projisoidakseen tuloksen takaisin kartesiolaiseen koordinaatistoon, jotta seuraava vaihe näkee sen.
Yleisin käyttötapa on napakuvan muokkaaminen ja takaisinprojisointi: napakuvaan sovellettu suodatin – vaakasuuntainen pehmennys, joka napakoordinaateissa sumentaa kulmien yli mutta säilyttää säteittäisrakenteen – tuottaa kartesiolaisen tuloksen, joka on kulmittain sumennettu, mitä kartesiolainen suodatin ei voi tehdä suoraan.