Mäta i fotografier

Jag har länge velat få till ett system där jag genom att markera punkter i bilder kan få fram deras position i verkligheten på ett enkelt sätt.

Nu finns det vad jag känner till ingen mjukvara som gör detta åt mig så därför tänkte jag experimentera lite med komponenter som finns, och se hur bra en eventuell produkt kan bli.

  1. Jag använder 360 graders panoraman som jag skapar i Hugin och exporterar till jpg-filer som är 3600 pixlar breda. Då blir det enkelt att omsätta punkter i bilden till vinklar.
  2. Jag mäter panoramapositionerna med enkel Garmin GPS, men det är framför allt principen och inte precisionen som är viktig nu.
  3. Orienteringen av panoraman görs manuellt i QGIS där jag tar ut en riktning som motsvarar vänsterkanten i varje panorama.

Panoraman väljer jag då dessa i en perfekt värld ger korrekta vinklar till alla objekt som går att observera. Jag har använt en GoPro kamera och Hugin för att skapa dessa, så precisionen är nog sådär. Det är naturligtvis bättre om man kan ha en sensor som fångar hela panoramat i ett ögonblick och därmed slippa förstörande bearbetning i ett bildbehandlingsprogram.

Positionsnoggrannheten blir framför allt intressant när objekten ligger nära mätpunkten. Jag kommer sannolikt att testa metoden även på lite längre avstånd för att se vad det blir för skillnad.

I en färdig sensorplattform så skall naturligtvis någon form av kompass finnas med som ger panoramats orientering. Antingen så att det framgår var norr är, men helst vilken riktning ”skarven” i panoramat har.

panoramaB

Jag använde två panoraman för försöket. Bilden ovan och en 10 meter bort. Jag började med att fastställa riktningen för varje bilds vänsterkant. Om man känner till riktningen i valfri punkt så är det bara att minska denna vinkel med en tiondel av pixelpositionen från vänster ( Vvänster = Vpunkt – Pixelvärde/10 ), eftersom panoramat som sagt är 3600 pixlar brett.

Sedan blir det matematik! Här får jag be alla mattegenier om ursäkt, men det var ett tag sedan jag gick i skolan och jag fick riva mig ordentligt i huvudet innan jag fick till alla formler. Det kan finnas bättre/enklare sätt att räkna och då får ni gärna höra av er.

vinklar

Jag har i punkt A och B mätt in positionen (Xa/Ya och Xb/Yb) och vinkeln till ett punktobjekt. Detta objekt vill jag nu ha reda på koordinaterna för.

Det sätt jag valt är att använda mig av ”räta linjens ekvation” där man relativt enkelt kan ta reda på var två linjer skär varandra, så länge man har formeln för båda linjer. En rät linje i ett koordinatsystem har formen:

y = k*x + m

Konstanten k beskriver lutningen på linjen och m beskriver var linjen skär y-axeln.

Eftersom jag har vinkeln så kan jag räkna ut k med trigonometri:

k = tan(90 - V)

Det jag vill är att hitta en konstant att multiplicera x (närliggande katet) för att få y (motstående katet) och vinkeln är 90-v eftersom vinkeln mäts mot norr och inte i x-led.

rakna90grader

Eftersom formeln är likadan längs hela linjen så kan jag använda min kända punkt (A) för att räkna ut m.

m = y - k*x

Ovanstående görs för varje linje (punktobservation) och eftersom båda linjerna har samma X och Y i skärningspunkten så kan man kombinera ihop dessa.

y1 = x1 * k1 + m1
y2 = x2 * k2 + m2
x1 = x2, y1 = y2
x * k1 + m1 = x * k2 + m2
x = ( m2 - m1 ) / ( k1 - k2 )

För att använda formeln ovan så räknas k och m ut för varje linje och sedan sätts dessa in för att först räkna ut punktens x, och därefter kan man använda valfri linjeekvation för att räkna ut punktens y.

y = x * k + m

Jag skapar en tabell i ett kalkylark där jag kan fylla i koordinaterna för punkt A och B, samt riktningar från A och B till fyra objekt.

Screenshot from 2014-06-01 09:58:36

När jag sedan matar in de beräknade koordinaterna i QGIS och märker ut de faktiska punkterna (hämtat från google maps) så ser det ut som följande:

Screenshot from 2014-06-01 10:00:30Objekten är cirklar och beräknade punkter från panoraman kryss.

Som analys kan jag väl säga att överensstämmelsen finns där, men noggrannheten är för dålig i detta lilla område. Det går också att konstatera att alla punkter är inmätta öster om de angivna punkterna, vilket kan vara ett GPS problem (eller Google Maps problem). ”Felet” i mätningen ligger mellan en och sju meter och med tanke på att avståndet till mätpunkterna som längst är ca 40 meter, så är det inte helt imponerande.

Nåja, det var inte tänkt att det skulle bli mättekniskt helt korrekt utan som test av ett koncept. För att det skall bli bättre så måste följande förbättras:

  • GPS noggrannheten måste bli bättre, framför allt när avstånden är korta.
  • Riktningen är kritisk varför en exakt angivelse mot norr i varje panorama är avgörande.
  • Metoden för att skapa panoramat måste vara icke destruktiv så att vinklar bibehålls.

Nu tror jag att jag skall testa lite längre avstånd…

Annonser

Taggar:, ,

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: