5.24. Transformacje biegunowe¶
Współrzędne biegunowe nazywają każdy piksel za pomocą kąta względem kierunku odniesienia oraz odległości od wybranego środka, zamiast przesunięć poziomych i pionowych względem początku układu w lewym górnym rogu. Taka reprezentacja zyskuje na znaczeniu dzięki jednej tożsamości: obrót wokół wybranego środka staje się przesunięciem wzdłuż osi kąta, co pozwala algorytmowi niewrażliwemu na obrót przeszukiwać znacznie prostszą przestrzeń parametrów niż w przypadku bezpośrednich obrotów. Reprojekcję wykonują linpolar() i logpolar().
5.24.1. Dwie metody¶
linpolar() wykonuje reprojekcję z układu kartezjańskiego do biegunowego z liniową osią odległości. Każda kolumna wyjściowa odpowiada ustalonemu kątowi wokół środka; każdy wiersz wyjściowy odpowiada ustalonej odległości od środka.
img.linpolar()
logpolar() wykonuje tę samą reprojekcję z logarytmiczną osią odległości. Obsługa kąta jest identyczna; różnica polega na tym, że odległości rosną wykładniczo wzdłuż wierszy wyniku, a nie liniowo. Ta różnica ma znaczenie z powodu drugiej tożsamości geometrycznej, którą ujawniają współrzędne biegunowe: skalowanie źródła wokół wybranego środka staje się przesunięciem wzdłuż osi odległości – ale tylko wtedy, gdy ta oś jest logarytmiczna. Przy liniowej osi odległości skalowanie rozciąga obraz biegunowy; przy logarytmicznej osi odległości skalowanie przesuwa go o stałą wartość.
img.logpolar()
Obie metody przyjmują słowa kluczowe x= i y=, które ustawiają środek reprojekcji biegunowej w pikselowych współrzędnych źródła, domyślnie odpowiednio połowa szerokości i połowa wysokości obrazu. Wybór środka ma znaczenie: transformacja biegunowa wokół niewłaściwego punktu kończy się przemieszaniem treści w sposób niszczący tożsamość obrót / przesunięcie.
Tarcza zegara po reprojekcji przez linpolar() i logpolar(). Współśrodkowe okręgi w źródle stają się poziomymi liniami w wyniku; kątowe znaczniki stają się równomiernie rozmieszczonymi liniami pionowymi wzdłuż osi kąta. Wariant log-biegunowy kompresuje odstępy promieniowe.¶
5.24.2. Kiedy sięgnąć po którą¶
Wybór między linpolar() a logpolar() to wybór, której niezmienniczości potrzebuje aplikacja. Dla samej niezmienniczości względem obrotu – wykrycia, że ta sama scena pojawia się w dwóch ramkach, przy czym druga jest obrócona o nieznany kąt – wystarczy linpolar(): obrót staje się poziomym przesunięciem w obrazie biegunowym, a dopasowywacz operujący tylko na przesunięciach, taki jak find_displacement(), odzyskuje kąt jako wielkość przesunięcia. Gdy liczy się również niezmienniczość względem skali – druga ramka jest obrócona i powiększona – logpolar() sprowadza obie niewiadome do przesunięć: poziomego dla obrotu i pionowego dla skali.
To standardowy przepis na tracker odporny na zmiany obrotu i skali: zreprojektuj ramkę odniesienia oraz każdą ramkę na żywo do układu log-biegunowego wokół tego samego środka, uruchom find_displacement() na tej parze i odczytaj pola rotation oraz scale z wyniku.
5.24.3. Rozwijanie cech kołowych¶
Osobnym zastosowaniem transformacji biegunowych jest rozwijanie cech, które są naturalnie kołowe na obrazie. Tarcza zegara, wskaźnik miernika, cel kontrolny kołowy z założenia – wszystkie one stają się liniowe w projekcji biegunowej, co jest postacią, z którą większości algorytmów łatwiej pracować.
Powyższy rysunek pokazuje to wprost: dwanaście znaczników na tarczy zegara, równomiernie rozmieszczonych wokół obwodu w układzie kartezjańskim, staje się dwunastoma równomiernie rozmieszczonymi liniami pionowymi w obrazie biegunowym. Prostokąt wokół dowolnego pojedynczego znacznika w obrazie biegunowym identyfikuje pozycję tego znacznika niezależnie od tego, w którą stronę tarcza zegara była obrócona w momencie przechwycenia. Dopasowywacz szablonów uruchomiony na obrazie biegunowym znajduje każdy znacznik w jednym przebiegu.
5.24.4. Odwzorowanie odwrotne¶
reverse=True wykonuje odwrotność prostej projekcji biegunowej: na podstawie obrazu biegunowego tworzy obraz kartezjański, którego projekcją biegunową on jest. Aplikacja wywołuje postać prostą, aby uruchomić algorytm we współrzędnych biegunowych, a następnie wywołuje postać odwrotną, aby zrzutować wynik z powrotem do układu kartezjańskiego dla dowolnego kolejnego etapu, który musi go zobaczyć.
Najczęstszym zastosowaniem jest modyfikowanie obrazu biegunowego i rzutowanie go z powrotem: filtr zastosowany do obrazu biegunowego – poziome wygładzanie, które w kategoriach biegunowych rozmywa kąty, ale zachowuje strukturę promieniową – daje wynik kartezjański, który został rozmyty kątowo, czego filtr kartezjański nie potrafi zrobić bezpośrednio.