Tag Archive | Fotogrammetri

Mera fotogrammetri

Jag kunde inte hålla mig, så jag gjorde några tester till. Den här gången provade jag betydligt flera bilder, men även att använda en GoPro kamera och filma i 4k.

Läs mer…

Fotogrammetri uppföljning

Då följer jag upp ett tidigare inlägg om fotogrammetri där jag testade olika Open Source alternativ för att skapa punktmoln och 3D modeller från fotografier tagna med en handhållen kamera.

Finns det möjlighet att använda metoden och få fram mätbara modeller och punktmoln som kan användas med ett skapligt resultat? Det tänkte jag titta närmare på.

Läs mer…

Fotogrammetri

Oj vad hett fotogrammetri är! Det handlar om att använda foton för att skapa punktmoln, 3D modeller och från drönare ortofoto samt höjddata. Ur ett geo-perspektiv så handlar det mycket om drönare, men för branschen som helhet så är det framför allt för att skapa 3D modeller som kan användas i andra sammanhang, exempelvis VR, filme och spel.

Jag har skrivit om Open Drone Map och WebODM tidigare, vilket är perfekt om man ”bara” vill hantera drönarbilder. Om man vill använda bilder tagna från marken, för att undvika regelverk och bestämmelser förknippade med drönare, så får man göra på ett annat sätt.

Läs mer…

ODM med egna bilder

För att koppla tillbaka till inlägget om OpenDroneMap, där de exempelbilder jag använde inte riktigt stämde med verkligheten, eller med resultatet från ett professionellt fotogrammetriprogram, så har jag nu fått tag på lokala bilder från en DJI Phantom som jag vet exakt var de är tagna.

Om det blev någon skillnad tänker jag undersöka i detta inlägg.

Läs mer…

Dåligt väder…

Jaha, då har det varit långhelg men av allt planerat trädgårdsarbete blev det inte mycket. Så blir det när man vaknar en morgon i Maj och det ligger snö på marken… Nåja allt är inte dåligt, mitt nysådda gräs har faktiskt börjat titta upp nu efter 14 dagar, så nu kanske gräsmattan blir lite bättre i sommar.

När det är dåligt väder så frigörs tid till annat och vad gör man då om man har geosupport som intresse. Man förbättrar kanske tidigare arbete.

Sagt och gjort, det blev närmare 30 timmar framför datorn (usch), men ett resultat är att jag uppdaterat min webbapplikation för att mäta i panoramabilder.

En förbättring är att det nu går att göra uppskattningar av storlek direkt i bilderna. Jag säger uppskattning då mätningarna enbart baseras på ett mätvärde, och därför inte medger mätningar i 3 dimensioner.

helpMeasurePanoramat förutsätts vara 360 x 180 grader. Allt behöver inte vara täckt av bilder, men vinklarna måste vara korrekta. Ur två panoraman så räknar jag fram ett avstånd till en markerad punkt. Det nya är att det går att sätta denna punkt som referens för en ny punkt.

Den nya punkten använder den gamla och det beräknade avståndet för att i praktiken räkna fram längden på den motstående sidan i en rätvinklig triangel. En förutsättning för att det skall bli någorlunda rättvisa värden är att antingen referenspunkten eller mätpunkten representerar en rät vinkel mellan panoramapunkten och det objekt som skall mätas (se bild ovan).

Bland övriga nyheter är att jag även lagt till en hjälpfil, som ännu så länge bara finns på engelska. Gränssnittet startar på engelska, men det är enkelt att byta till svenska genom att klicka på den svenska flaggan. Vill man byta mer permanent så öppnar man ”pangeox.html” och redigerar en av de första raderna där man ändrar ”false” till ”true”.

Skärmbild från 2015-05-03 09:49:47Öppnar du koden så märker du också en annan ändring, nämligen att jag komprimerat så mycket av HTML- och JavaScript-koden som möjligt för att få ner storleken och därmed kanske snabba upp applikationen. Den var i och för sig inte särskilt långsam från början, men det är ingen ursäkt för att inte göra det.

Sådant jag tror att ”normala” användare kan tänkas vilja ändra i koden har jag låtit vara okomprimerat, vilket förhoppningsvis skall göra det enklare att hitta i och med att man inte behöver bläddra bland hundratals rader kod. Vill du exempelvis översätta allt till ett annat språk än engelska (eller svenska) så är det nu förhållandevis enkelt.

Se ”live” på: http://geosupportsystem.altervista.org/pangeox eller ladda ner paketet direkt (LÄNK ca 200 kB).

Som tidigare så skall applikationen packas upp i samma katalog där man har panoramabilderna och om man inte har Firefox så behöver man en webbserver (och en modern webbläsare) för att använda förhandsgranskningen av panoraman (dock inte nödvändigt för funktionen).

3D i bilder

Detta inlägg är något av ett återbesök av tidigare inlägg och handlar om hur man kan använda foton för att skapa 3D modeller med datorer.

Det finns flera kommersiella program som gör detta väldigt bra, men här handlar det om öppen källkod, och en av anledningarna till att jag gör ett återbesök är att jag helst jobbar med Linux.

Programmen jag använder är VisualSFM och Meshlab.

Screenshot from 2014-08-23 10:13:42

VisualSFM är ett GUI, eller användargränssnitt, för en mängd andra program som det är mer eller mindre beroende av. Det är detta som gör det lite krångligt att installera, speciellt på Linux. För Windows så finns det färdiga paket som går att hämta hem och packa upp, sedan är det mer eller mindre bara att köra.

Nu har jag dock hittat en instruktion som jag kunnat följa nästan helt utan att göra några anpassningar och därmed fått VisualSFM att fungera på min dator utan Nvidia grafikkort (eller annan avancerad GPU för den delen).

Jag kombinerar Scott Sawyers instruktion (länk) och de generella instruktionerna för Linux (länk), det senare mest för att jag som sagt inte har ett Nvidia grafikkort. Det är lite pilligt och man måste redigera konfigfiler och kompilera källkod upprepade gånger, men om man läser instruktionen och kommentarerna längre ner så borde det med lite tålamod gå att få allt att fungera.

Screenshot from 2014-08-23 10:27:23

Börja med att lägga in några bilder (Open Multiple Images). Här har jag valt ett enkelt objekt från Sveriges centrala delar, men det skulle lika gärna kunnat vara överlappande bilder tagna från en UAV/UAS. Att tänka på är att ju mer överlapp det är bland bilderna, desto bättre blir det.

Bilderna matchas (Compute Missing Matches) så att programmet vet vilka som hör ihop. Sedan är det bara att köra 3D rekonstruktionen (Compute 3D Reconstruction).

Screenshot from 2014-08-23 10:34:24

Detta skapar ett ”glest” punktmoln (Sparse point cloud) där punkterna och kamerapositionerna visas i 3D. Använd höger och vänster musknapp för att flytta runt modellen. Skrollhjulet zoomar och om man håller inne CTRL så ändras storleken på bilderna vid kamerapositionerna och med ALT så ändras storleken på punkterna.

Har man många bilder så kan det ta ett litet tag men hela processen går att följa i realtid i 3D.

Nästa steg blir att skapa ett ”tätt” punktmoln (Dense point cloud) genom att köra ”Run Dense Reconstruktion” (knappen med texten ”CMVS”).

I detta steg får man peka ut var man vill spara resultatet och det är även detta steg som brukar ta längst tid. Det går heller inte att följa resultatet i realtid så här gäller det helt enkelt att ha tålamod och vänta.

Screenshot from 2014-08-23 10:47:10

Växla mellan ”glest” och ”tätt” punktmoln med TAB och tänd och släck kamerapositioner med knappen ”f”.

Nästa steg blir att öppna modellen i Meshlab, vilket görs genom att helt enkelt öppna (CTRL+O) filen ”bundle.rd.out” som ligger i katalogen ”00” i den katalog som skapades i det förra steget. Man får också peka ut filen ”list.txt” som innehåller sökvägar till de bilder som används.

Som standard visas det glesa punktmolnet. I lagerdialogen (menyn View – Show Layer Dialog) kan man radera detta glesa punktmoln genom att högerklicka på modellen och välja ”Delete Current Mesh”. Nästa steg blir att importera den ”täta” modellen med CTRL-I (Import Mesh). Denna ligger i undermappen ”00/models” och heter i mitt fall ”option-0000.ply”.

Screenshot from 2014-08-23 11:02:07

I det täta punktmolnet finns en hel del punkter som är fel, men dessa kan enkelt markeras och tas bort med ”Select Vertexes” och ”Delete the current set of selected vertices…”.

I detta steg så kan Meshlab krascha då och då så det gäller att som vanligt spara sitt arbete med jämna mellanrum, men framför allt ha tålamod och låta datorn jobba färdigt.

Screenshot from 2014-08-23 11:18:58

Här skulle man kunna vara nöjd med något som bara är ”häftigt”, men låt oss ta det ett steg till. Genom att beräkna ”normals” så ger man programmet instruktioner om vad som är ”insida” och ”utsida”. Blir det fel så kan den lilla kryssrutan i bilden ovan användas. Inställningarna kan man justera i alla dialoger, men jag kör på standard i detta exempel.

Du startar dialogen under ”Filters – Point Set – Compute Normals for point set”.

Modellen består fortfarande av punkter (zooma in i din modell så får du se). Nästa steg blir att göra om den till ”ytor”. Det finns flera filter för detta och vilket som passar bäst kan variera. Här väljer jag ”Filters – Point Set – Surface Reconstruction: Poisson”, med standardvärden.

Screenshot from 2014-08-23 11:29:27

Det är nu man märker om man varit noggrann med att rensa bland punkterna tidigare (jag har inte varit så noggrann).

Vill man nu använda modellen för att skriva ut den med en 3D-skrivare så går det att exportera STL-filer från Meshlab, men detta har jag inte testat. Modellen kan även exporteras i mängder av andra format för fortsatt bearbetning.

Vill man lägga på texturer från fotografierna så går det också.

Använd ”Filters – Texture – Parameterization from registered rasters” och välj att hänsyn skall tas till det beräknade avståndet till kameran och bildernas kanter (bild nedan).

Screenshot from 2014-08-23 12:51:20

Klicka på ”Apply” och gå sedan till menyn ”Filters – Camera – Project Active Rasters ….” och klicka på ”Apply” i dialogrutan.

Screenshot from 2014-08-23 13:10:04

Beroende på vad du använder för motiv och vilka filter du använder så kan du nu få fram en bättre eller sämre textur på din modell. I bilden ovan så har jag fuskat och draperat en av bilderna ovanpå så att det skall bli extra tydligt i artikeln, men man får testa en hel del för att det skall bli ett skapligt resultat.

Samma princip som beskrivits ovan går som sagt att använda för att hantera UAV/UAS bilder och sedan skapa ortorektifierade bilder samt höjddata, men detta är något jag själv inte provat så det ger jag mig inte in på att förklara. Sök på YouTube efter VisualSFM och UAV eller motsvarande så går det att hitta massor av filmer (mer eller mindre bra). Använder du Windows och är intresserad av att skapa ortofoton och höjddata så kanske CMPMVS är ett alternativ att titta närmare på (YouTube exempel).

Mäta i fotografier – Uppföljning

Om du inte läst gårdagens inlägg så tycker jag att du börjar där. Här beskriver jag hur inmätningen på lite längre håll fungerade, och jag hoppar över alla matteförklaringar.

Den här gången använde jag en bättre kamera, men i övrigt ungefär samma metod. Tre panoramaplatser, räkna ut vinkeln för vänsterkanten i bilderna och platserna inmätta med Garmin GPS.

pano2_lr

Det var skapligt lätt att återfinna platserna där jag tagit bilderna ifrån i panoramabilderna. Jag kunde därför använda dessa platser som referens tillsammans med GPS punkter för att som jag uppfattar det få till en bättre orientering.

I bilderna valde jag ut en punkt nära (ca 100 m), en punkt långt borta (över 500 m) och en punkt med väldigt dåliga vinklar också längre bort.

Resultatet i noggrannhet blir ungefär som i från gårdagen, kanske lite bättre, men då avstånden är betydligt längre så rör sig felet om enstaka procent av avståndet, vilket jag anser vara riktigt bra.

Screenshot from 2014-06-01 15:06:04

Det som jag visste skulle bli svårt var den punkt som ligger med väldigt liten vinkelskillnad mellan mätpunkterna ( ca 1.1 grad). Trots detta så är felet ”bara” ca 10 % av avståndet. Det är dock tydligt att skall metoden användas längs väg så bör man begränsa utpekningen av objekt till sektorer åt vänster och åt höger.

Jag är faktiskt ganska imponerad av vad man kan uppnå med såhär enkla tekniker. Det är lite pillrigt så nästa steg blir att försöka automatisera så mycket som möjligt, kanske framför allt med någon form av formulär och skript. Ytterligare ett steg framåt blir att försöka samla in data medan man kör, vilket dock kräver en annan typ av kamera, eller flera synkade kameror.

Kan man sedan få till det så att alla punkter man märker ut åskådliggörs i en kartbild så blir det desto bättre. Jag tror faktiskt att det mesta går att utföra i javascript, men jag skulle föredra ett QGIS-plugin för att göra det lite mera automatiserat.