5.24. Polarne transformacije

Polarne koordinate imenuju svaki piksel kutom od referentnog smjera i udaljenošću od odabranog središta, umjesto vodoravnih i okomitih odmaka od ishodišta u gornjem lijevom kutu. Ovaj prikaz opravdava svoju vrijednost jednim identitetom: rotacija oko odabranog središta postaje translacija duž osi kuta, što omogućuje algoritmu neovisnom o rotaciji pretraživanje znatno jednostavnijeg prostora parametara nego izravno pretraživanje rotacija. linpolar() i logpolar() izvode reprojekciju.

5.24.1. Dvije metode

linpolar() izvodi reprojekciju iz kartezijevih u polarne koordinate s linearnom osi udaljenosti. Svaki izlazni stupac odgovara fiksnom kutu oko središta; svaki izlazni redak odgovara fiksnoj udaljenosti od središta.

img.linpolar()

logpolar() izvodi istu reprojekciju s logaritamskom osi udaljenosti. Postupanje s kutom je identično; razlikuje se to što udaljenosti rastu eksponencijalno niz retke izlaza umjesto linearno. Razlika je važna zbog drugog geometrijskog identiteta koji polarne koordinate otkrivaju: skaliranje izvora oko odabranog središta postaje translacija duž osi udaljenosti – ali samo kada je ta os logaritamska. S linearnom osi udaljenosti, skaliranje rasteže polarnu sliku; s logaritamskom osi udaljenosti, skaliranje je pomiče za fiksni iznos.

img.logpolar()

Obje metode primaju ključne riječi x= i y= koje postavljaju središte polarne reprojekcije u koordinatama piksela izvora, s pretpostavljenim vrijednostima polovice širine slike odnosno polovice visine slike. Izbor središta je važan: polarna transformacija oko pogrešne točke završava s premiješanim sadržajem na način koji uništava identitet rotacije / translacije.

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.

Brojčanik sata reprojiciran metodama linpolar() i logpolar(). Koncentrične kružnice u izvoru postaju vodoravne crte u izlazu; kutne crtice postaju ravnomjerno raspoređene okomite crte duž osi kuta. Log-polarna varijanta sažima radijalni razmak.

5.24.2. Kada posegnuti za kojom

Izbor između linpolar() i logpolar() je izbor koja invarijantnost je aplikaciji potrebna. Za invarijantnost na rotaciju samu – otkrivanje da se ista scena pojavljuje u dvije sličice, pri čemu je druga zarotirana za nepoznati kut – linpolar() je dovoljna: rotacija postaje vodoravni pomak u polarnoj slici, a usklađivač koji radi samo s translacijom poput find_displacement() rekonstruira kut kao veličinu pomaka. Kada je važna i invarijantnost na mjerilo – druga sličica je zarotirana i uvećana – logpolar() sažima obje nepoznanice u translacije: vodoravnu za rotaciju, okomitu za mjerilo.

To je standardni recept za pratitelj otporan na promjene rotacije i mjerila: reprojicirajte referentnu sličicu i svaku sličicu uživo u log-polarne koordinate oko istog središta, pokrenite find_displacement() na paru i očitajte polja rotation i scale iz rezultata.

5.24.3. Razmotavanje kružnih značajki

Zasebna upotreba polarnih transformacija je razmotavanje značajki koje su u slici prirodno kružne. Brojčanik sata, skala mjernog instrumenta, inspekcijska meta koja je po dizajnu kružna – sve one postaju linearne u polarnoj projekciji, što je oblik s kojim većini algoritama je lakše raditi.

Slika iznad to izravno prikazuje: dvanaest crtica na brojčaniku sata, ravnomjerno raspoređenih oko opsega u kartezijevim koordinatama, postaju dvanaest ravnomjerno raspoređenih okomitih crta u polarnoj slici. Pravokutnik oko bilo koje pojedine crtice u polarnoj slici identificira položaj te crtice neovisno o tome kako je brojčanik sata bio zarotiran prilikom snimanja. Usklađivač predložaka pokrenut kroz polarnu sliku pronalazi svaku crticu u jednom prolazu.

5.24.4. Inverzno preslikavanje

reverse=True izvodi inverziju izravne polarne projekcije: zadanu polarnu sliku, proizvodi kartezijevu sliku čija je ona polarna projekcija. Aplikacija poziva izravni oblik za pokretanje algoritma u polarnim koordinatama, a zatim poziva inverzni oblik za projiciranje rezultata natrag u kartezijeve koordinate za bilo koju nizvodnu fazu koja ga treba vidjeti.

Najčešća upotreba je izmjena polarne slike i projiciranje natrag: filtar primijenjen na polarnu sliku – vodoravno zaglađivanje koje, u polarnim terminima, zamućuje preko kutova ali zadržava radijalnu strukturu – proizvodi kartezijev rezultat koji je kutno zamućen, što kartezijev filtar ne može učiniti izravno.