Stereografisk projeksjon av verdensrommet

Vi skal ta for oss litt bildeanalyse og metoder slik at vi kan man?vrere oss rundt i galaksen etter oppskytning. Vi er n?dt til ? vite hvor i solsystemet vi er og hvordan vi er orientert for at vi kan sikte oss inn p? destinasjonen v?r. Dermed m? vi knipse noen og hente noen bilder, og lage et program som kan transformere krumme bilder til flate bilder for oss slik at vi kan analysere det senere.

Koordinatsystem p? kuleform

Jeg vet at ? begynne ? snakke om koordinatsystemet n? kan virke litt umotivert, men det kommer til ? gi mening for deg etterhvert. Vi har nemlig en helt genial satellitt i bane om planeten v?r, som har tatt bilder av verdensrommet. Disse bildene kommer vi til bruke senere til ? finne ut av hvor i verdensrommet vi befinner oss, men da m? vi gj?re litt forh?ndsarbeid her n?.

  • Antakelse: Siden stjernene p? himmelen er veldig langt unna oss, kan vi f?rst anta at himmelbildet er konstant. Det vil si at bildet vi ser av himmelen ikke vil endre seg med det f?rste, f?r det har g?tt veldig lang tid. Dermed kan vi generere referansebilder i dette innlegget som vi kan bruke til ? orientere oss med i neste innlegg

Dermed kan vi se for oss at bildet av verdensrommet ligger rundt oss som en slags himmelkule (bokstavelig talt en kule med bildet av verdensrommet p?), og det er derfor vi skal snakke litt om koordinatsystemer.

Figur 1 : Slik kan en sirkel se ut dersom vi bruker polare koordinater, med  ???\(x = r\cdot\cos(\theta)\) og \(y = r\cdot\sin(\theta)\). 

Det er kanskje kjent for deg at det finnes flere koordinatsystemer enn det kartesiske (med x og y-koordinater) eller ikke. En av de mest vanlige er polare koordinater, som du kanskje gjenkjenner fra enhetssirkelen og kan skrives slik:

\(x = r\cdot\cos(\theta)\)

\(y = r\cdot\sin(\theta)\)

Som lager en sirkel avhengig av \(r\) og \(\theta\). Men vi kommer til ? trekke dette konseptet litt lenger, og se p? noe som kalles for sf?riske koordinater ogs? kalt kulekoordinater. Det betyr (som det ligger litt i ordet) at vi tar med oss denne ideen til 3D-rommet, og bruker koordinater som avhenger av nye variabler som vi kaller \(r,\;\phi,\;\theta\) som illustrert i figur 2, til ? skrive koordinater sf?risk.

Bildet kan inneholde: skr?ningen, parallell, sirkel, gj?re, diagram.
Figur 2 : Sf?riske koordinater som lager en kule.

P? denne m?ten kan vi kontrollere hvilket utsnitt av himmelen vi ?nsker ? se p? ved hjelp av vinkler, som viser seg ? v?re ganske nyttig. I figur 2 brukes parameteriseringen

\(\vec{r} = (x,y,z)\)

\(x = r\cdot\cos(\phi)\sin(\theta)\)

\(y = r\cdot\sin(\phi)\sin(\theta)\)

\(z = r\cdot\cos(\theta)\)

der hvor \(\phi\in[0, \pi],\;\theta \in [0, 2\pi)\) og \(r\) er radien til kula. Denne parameteriseringen er den vi bruker videre ogs?, med noen sm? modifikasjoner som vi kommer til senere. 

Jorda er flat! Og litt utstrukket.. 

Figur 3 : For eksempel kan vi projisere fra ene siden av sirkelen til den andre siden p? en flate tangent p? sirkelen. Kan du se at punktene strekkes ut p? flaten?

Nei vi er ikke konspirasjonsteoretikere, ikke g?! V?r s? snill ? fortsett ? lese! Dette er ikke surr skj?nner du, jeg skal komme til poenget. N? som vi har dette himmelkuleskallet v?rt, s? trenger vi en m?te ? f? dette himmelbildet ned p? et flatt vanlig bilde, slik at vi kan finne ut av hvor vi er. Det finnes flere m?ter ? mappe p?, men metoden vi skal bruke kalles for stereografisk projeksjon, som er et mye vanskeligere ord enn metode. Prinsippet g?r ut p? at vi som observat?r i projeksjonspunktet trekker linjer fra der vi observerer gjennom et kuleskall og inn p? flaten vi skal mappe p?, som vi fritt kan velge selv. Alts? finner vi oss et punkt vi st?r p?, trekker linjer gjennom et kuleskall og videre gjennom en flate vi velger oss, og setter bildet/pikslene p? skj?ringspunktet p? kuleflaten til ? v?re pikslene/bildet p? skj?ringspunktet p? flaten. Dette gj?r vi til hele kuleskallet har blitt projisert p? flaten, dvs. alle punkter p? kuleskallet, og vi sitter igjen med en stereografisk projeksjon. Det finnes forskjellige egenskaper for de ulike flatene vi projiserer p? gjennom denne metoden, som for eksempel kan v?re at vi ikke f?r med oss punktet vi observerer fra, om st?rrelser er bevart, om vinkler er bevart etc. 

Jorda som eksempel

Bildet kan inneholde: verden, kunst, gj?re, sirkel, rektangel.
Figur 4 : Vi kan for eksempelvis lage en flate i xy-planet gjennom jorda og projisere jordoverflaten p? dette planet.

La oss bruke jorda som eksempel, siden mange kjenner til den. Det finnes mange morsomme flater vi kan projisere en kule p?. For eksempel kan vi velge ? projisere p? xy-planet slik som i figur 4. Da velger vi for eksempel ? st? p? punktet (nordpolen blir da projeksjonspunktet), og trekker linjer gjennom kulen, skj?rer kuleflaten et sted, videre mot planet, og skj?rer gjennom planet. Punktet vi traff p? kuleflaten plasserer vi n? p? punktet vi traff p? planet, og dermed har vi projisert! Resultatet av akkurat denne ser du nedenfor.

Bildet kan inneholde: virveldyr, skr?ningen, gj?re, sirkel, rektangel.

 

MERK: Hva skjer med nordpolen her? Er det mulig ? projisere den gitt figurene ovenfor? Hva skjer med s?rpolen? Er de virkelige st?rrelsene p? landmassene bevart? Hva er forskjellen mellom under ekvator kontra over ekvator? Viktige sp?rsm?l ? tenke over.

Figur 5 : Vi projiserer p? en sylinder om jorda. Legg merke til hva som skjer rundt polene.

Vi kan ogs? velge ? projisere p? en annen m?te. Noen gang h?rt om Mercator-projeksjon? Om du ikke har h?rt om det, har du i alle fall sett det p? verdenskartet! De aller fleste verdenskart er projisert p? denne m?ten, som gj?res ved ? legge en lang sylinder rundt jorda, slik som i figur 5. Det som er verdt ? legge merke til her ogs? er polene, og hvordan de blir projisert. Siden kartet lages ved ? rulle ut rektangelet som binder rundt sylinderen, kommer polene til ? v?re punkter som g?r mot uendelig. Derfor kan vi heller ikke se nordpolen, og punktene rundt kommer til ? strekkes laaaangt ut. Det lages ofte egne kart for nordpolen og s?rpolen, som ikke er en del av det normale verdenskartet. Dette kan gj?res ved ? f.eks velge en flate som ligger tangent p? polen vi ser p?, slik at mest av st?rrelsen er bevart (seri?st, s?k opp kart over polene p? Google, tror de fleste mennesker aldri har sett det f?r). Effekten av utstrekningen er at landmassene ogs? strekkes ut, slik at st?rrelsen p? ulike land langs mot nord og s?r blir st?rre enn de skal v?re. Legg ogs? merke til at eneste stedet som mappes helt korrekt er ekvator. Det finnes faktisk en nettside som heter thetruesize.com som illustrerer denne effekten, og er morsom ? leke med (anbefaler ? tulle med Russland, ser mye st?rre ut enn det er!). Jeg legger til en siste illustrasjon av hvordan Mercator-projeksjonen kan se ut:

Bildet kan inneholde: verden, kart, ?koregion, hvit, lys.
Figur 6 : Bildet er hentet fra https://commons.wikimedia.org/wiki/File:Mercator-projection.jpg

V?rt tilfelle av himmelkulen

Det har v?rt mye snakk om jorda n?, men la oss se p? hvordan vi kommer til ? anvende det i v?rt tilfelle (som er hele grunnen til alt jeg forklarte ovenfor). Vi kommer til ? befinne oss inne i sentrum av himmelkulen for enkelhets skyld. Vi bruker de sf?riske koordinatene fra tidligere til ? velge ut hvor p? himmelkulen vi skal se. Et lite problem som enkelt kan fikses, er at parameteriseringen alltid starter p? samme sted slik den var ovenfor. Vi kan innf?re en \(\theta_0\) og \(\phi_0\) som skal bestemme hvor p? kulen vi starter ? parameterisere. Da kan vi sentrere parameteriseringen p? lik m?te som vi sentrerer en funksjon. Ta funksjonen f(x) = x som eksempel. Bytter vi ut x med x - 3, vil vi f? f(x - 3) = x - 3. Disse funksjonene ser like ut, men f(x - 3) er flyttet 3 enheter bort p? x-aksen slik at f(x - 3) = 0 n?r x = 3, kontra x = 0 som for f(x) = 0. Da kan vi generelt si at dersom f(x) = x vil f(x - a) = x - a sentrere f(x) rundt punktet a. Samme prinsipp bruker vi p? parameteriseringen, og dermed:

\(x = r\cdot\cos(\phi - \phi_0)\sin(\theta - \theta_0)\)

\(y = r\cdot\sin(\phi - \phi_0)\sin(\theta - \theta_0)\)

\(z = r\cdot\cos(\theta - \theta_0)\)

Figur 7 : Vi ender opp med ? se p? et lite utsnitt p? himmelkulen, og projiserer det p? en flate rundt oss. 

blir kulekoordinatene sentrert om \(\phi_0,\;\theta_0\). Vi har fortsatt noe mer ? ta hensyn til: kameraet har begrenset FOV (field of view). Det er alts? begrensningen p? hvor mye kameraet v?rt f?r med seg p? et bilde, gitt i vinkler i x og y-retning. Jeg skal ikke g? veldig mye inn p? FOV og hvorfor det begrenser bildet, og det st?r litt om det i denne setningen, men vit at bildet vi ser p? er begrenset med en vinkel i polar (\(\theta\)) og asimutal (\(\phi\)) retning \(\alpha_{\theta}=\theta_{max}-\theta_{min}\) og \(\alpha_{\phi}=\phi_{max}-\phi_{min}\) som gj?r at vi f?r et slags utsnitt av himmelen. Med andre ord f?r vi en slags utskj?ring p? himmelkulen som projiseres p? en flate, som illustrert p? figur 7. 

Det jeg gj?r n? er at jeg skal ta likningene for relasjonene mellom de sf?riske koordinatene og den stereografiske projeksjonen litt for gitt, og jeg kommer ikke til ? forklare eller utlede dem. Likningene kan man vise med litt god algebra etc. men jeg bruker ikke tid p? det her. Men jeg skal mer enn gjerne skrive dem ned for dere ?:

Bildet kan inneholde: rektangel, skr?ningen, gj?re, plott, parallell.
Figur 8 : Relasjonen mellom de sf?riske koordinatene og projeksjonen p? XY-planet.

\(X = \kappa\sin\theta\sin(\phi-\phi_0)\hspace{4.9cm}(1)\)

\(Y = \kappa(\sin\theta_0\cos\theta - \cos\theta_0\sin\theta\cos(\phi - \phi_0))\hspace{1.02cm}(2)\)

\(\kappa = \frac{2}{1 + \cos\theta_0\cos\theta + \sin\theta_0\sin\theta\cos(\phi-\phi_0)}\hspace{3.2cm}(3)\)

\(X_{max/min} = \pm\frac{2\sin(\alpha_{\phi}/2)}{1 + \cos(\alpha_{\phi}/2)}\hspace{4.65cm}(4)\)

\(Y_{max/min} = \pm\frac{2\sin(\alpha_{\theta}/2)}{1 + \cos(\alpha_{\theta}/2)}\hspace{4.75cm}(5)\)

\(\theta = \theta_0 - \arcsin\left[\cos\beta\cos\theta_0 + \frac{Y}{\rho}\sin\beta\sin\theta_0\right]\hspace{1cm}(6)\)

\(\phi = \phi_0 + \arctan\left[\frac{X\sin\beta}{\rho\sin\theta_0\cos\beta -Y\cos\theta_0\sin\beta}\right]\hspace{1.8cm}(7)\)

\(\rho = \sqrt{X^2 + Y^2}\hspace{6.18cm}(8)\)

\(\beta = 2\arctan\left(\frac{\rho}{2}\right)\hspace{6.06cm}(9)\)

Dette ser ut som h?rete uttrykk, og det er ingen fare i ? ikke vite hvor det kommer fra. Det er likevel veldig kjekt for oss ? bruke, og derfor gj?r vi nettopp det! Siden vi har en begrensning fra FOV med \(\alpha_{\phi},\;\alpha_{\theta}\) vil vi ikke lenger bevege og rundt hele kulen, med andre ord vil ikke \(\theta-\theta_0\in[0,\pi],\;\phi-\phi_0\in[0,2\pi)\). Det som skjer i stedet er at \(\theta - \theta_0,\;\phi - \phi_0\) vil ligge i intervallet mellom \(\alpha_{\phi},\;\alpha_{\theta}\), med andre ord vil

\(\theta - \theta_0\in\left[-\frac{\alpha_{\theta}}{2},\frac{\alpha_{\theta}}{2}\right],\;\phi - \phi_0\in\left[-\frac{\alpha_{\phi}}{2},\frac{\alpha_{\phi}}{2}\right]\), som er viktig at vi f?r med oss. Ideen videre her er ? bruke et numerisk XY-grid, og s? transformere koordinatene i XY-gridet til det sf?riske med likning (6) og (7) slik at vi kan hente piksler fra himmelkulen, og sette det sammen til et flatt bilde. 

Stjernetitting - litt mer om metode og resultat

N? syntes jeg det har v?rt utrolig mye snikk-snakk, uten at vi har noe bilde av verdensrommet. Jeg syntes det er p? h?y tid ? forklare hvordan vi faktisk transformerer et bilde vi tar, s? la oss gj?re nettopp dette. Vi skal generere et bilde fra himmelkulen og sammenlikne med et bilde vi allerede har tatt fra satellitten, for ? sjekke om metoden v?r fungerer. Verdiene vi bruker i f?rste omgang vil v?re \(\alpha_{\theta} = \alpha_{\phi} = 70^\circ\), og \(\phi_0 = 0^\circ\)\(\theta_0 = 90^\circ\), siden det er der bildet fra satellitten er blitt tatt ogs?. Vi tar det steg for steg:

  • Vi finner st?rrelsen p? bildet, som vil si antall piksler vi har i hver retning av bildet. Fra satellitten f?r vi at bildest?rrelsen er p? 640 x 480. Vi henter et bilde fra satellitten som vi kan sammenlikne med senere i samme sleng, og vi henter ogs?  ut himmelkulebildet fra satellitten. 
  • Vi gj?r om alle grader til radianer, slik at det blir enklere ? regne p?. Forholdet mellom radianer og grader er \(1 \deg = \frac{\pi}{180}\text{rad}\).
  • Vi lager et grid for \(X,\;Y\) p? st?rrelsen 640 x 480 s? det matcher satellittbildet, med uniformt fordelte verdier (fordi det er lett ? jobbe med) som g?r fra \(X_{min},\;Y_{min}\) til \(X_{max},\;Y_{max}\), og implementerer relasjonene mellom \(\theta,\;\phi\) og \(X,\;Y\). Vi bruker s? denne relasjonen (likning (6), (7) ovenfor) p? \(XY\)-gridet til ? lage et \(\phi\theta\)-grid. Vi looper gjennom \(\phi\theta\)-gridet og finner pikslene p? himmelkulen som vi lagrer i en array, og bruker en modul i Python kalt Pillow til ? generere et bilde ut ifra den nye dataen vi har lagret i arrayen. Resultatet av dette blir:
Bildet kan inneholde: stemning, himmel, astronomisk objekt, naturlig landskap, galaxy.
Figur 9 : Referansebildet tatt av satellitt
Bildet kan inneholde: stemning, himmel, astronomisk objekt, naturlig landskap, galaxy.
Figur 10 : Bildet vi genererte fra himmelkulen

 

 

 

 

 

 

 

Suksess! Bildene ser helt like ut, og det er jeg forn?yd med (vi kunne kj?rt en analyse for ? teste men det kommer i neste innlegg). Neste m?l n? blir ? generere bilder slik at vi kan se hvordan det ser ut 360 grader rundt oss! Prosessen blir helt lik som beskrevet ovenfor, men denne gangen m? vi sentrere bildet rundt forskjellige \(\phi_0\)-verdier. For ? f? godt nok antall bilder s? vi har god nok oppl?sning, tar vi ett bilde for hver grad, som betyr 360 (!) bilder der vi lar \(\phi_0 = 0^\circ,1^\circ,\dots,359^\circ\), mens \(\theta_0, \; \alpha_{\theta}, \; \alpha_{\phi}\) forblir de samme. Da vil vi kunne gjenkjenne hvor vi er i verdensrommet med \(1^\circ\) n?yaktighet senere (vi blir rundet til n?rmeste hele grad, dvs. fra f.eks \(56.7^\circ\) til \(57^\circ\)). Vi lar programmet kj?re.. og kj?re.. og kj?re.. og kj?re.. og kj?re (50 minutter...). Resultatene er her, og vi ?pner opp for ? se som sm? barn en tidlig julaften morgen. Vi lager en animasjon som spiller av alle de 360 bildene grad for grad, og ender opp med dette resultatet:

360 x suksess! Dette ser utroooolig kult ut! Vi lagrer alle bildene s? vi ikke trenger ? kj?re koden som genererer dem mer, og neste steget blir ? kj?re noen bildeanalyser slik at vi kan bruke resultatene v?re her til ? finne ut av hvor i verdensrommet vi befinner oss.

 

Forrige innlegg <<                                                                             Neste innlegg >>

Av Anton Brekke
Publisert 10. okt. 2021 16:10 - Sist endret 11. mai 2022 09:01