OpenDroneMap och WebODM är primärt inriktat mot bearbetning av drönarbilder (RPAS), men en av grundprogrammen som används, OpenSFM utvecklat av Mapillary, är byggt för att hantera mängder av olika kameratyper, inklusive 360graders kameror. Detta fungerar så pass bra att jag beställt en ny kamera med 360 linser, men tills jag fått den så provar jag med en äldre Richo Theta.
Handhållen fotogrammetri fungerar bra, det har jag provat tidigare, men vad är det som gör att det fungerar och vilka fallgropar finns det. Med fotografi från ovan riktat nedåt i samma generella riktning så behövs det inte speciellt många bilder för att det skall vara tillräckligt överlapp för att skapa bra resultat. Det vanligaste felet jag gjorde med handhållet var att jag tog på tok för få bilder. Tänk själv när du fotar på 80 meters höjd och det är kanske 10 meter mellan bilderna. Det är drygt sju graders vinkelskillnad i bilderna. Om man skall ha samma förhållande med en handhållen kamera på kanske två meters höjd så behöver man ta en bild var 25 centimeter… Om man bara kan få upp kameran ett par meter till fyra meter så behöver det vara en halv meter mellan bilderna. Detta är lite mer än vad som behövs, men någonstans mellan en till två meter mellan bilderna om kameran är minst tre till fyra meter upp är nästan nödvändigt, om marken är det som är fokus. Om det är byggnadsfasader så får man räkna på avståndet till dessa i stället. Om du tar bilder med en meters mellanrum så bör du inte vara närmare än ca fem meter från det som avbildas.
Är man sedan inomhus och fotar så blir avstånden väldigt korta från kamera till motiv, inte minst om man använder 360 kameror. För att testa så tog jag 30 bilder i vardagsrummet.
Bilderna togs med runt 30 centimeters intervall, kanske något längre än så, i en båge runt bordet i mitten av rummet. Det som ser ut som luckor i punktmolnet är skuggor av möbler som antingen inte avbildades speciellt bra, eller inte syns så tydligt i denna vinkeln. Att jag har helt vita väggar i detta rum hjälpte inte till med avbildningen, men 1.5 miljoner punkter är inte dåligt. Att det sedan ”bara” behövdes 30 bilder för att få detta resultat gjorde också att beräkningen bara tog fem minuter i WebODM för att bli klart. Bilderna är inte speciellt högupplösta heller, vilket säkert påverkar såväl resultatet som tiden som krävdes.
För att testa ytterligare så tog jag en GoPro kamera inställd på en sekunders intervallfotografering och gjorde samma sak men i källaren. För att vara någorlunda säker på god täckning så blev det 95 bilder i betydligt högre upplösning, men med ungefär samma avstånd mellan bilderna. Skillnaden här var att jag fick röra mig i utrymmets ytterkanter och rikta kameran ”genom” rummet för att säkerställa att överlapp mellan bilderna blev så bra som möjligt och vinklarna mot objekten så långt det gick.
Om det blev ett resultat? Oj, oj, oj. Närmare 10 miljoner punkter med superhög upplösning i vissa områden. Det går nästan att läsa titlarna på DVD filmerna i hyllorna. Det är också ganska tydligt att ljus spelar stor roll. Väl upplysta platser, gärna med varierande texturer, avbildas riktigt bra, medan mörkare områden och sådant som inte har så varierad textur avbildas sämre. Titta bara på det lilla runda bordet i förgrunden i bilden ovan. Kanter på skivan avbildas bra, benen skapligt (mörkare) och mitten på skivan inte alls (ingen tydlig textur).
Sedan är det ju också 3D data som det går att ha lite roligt med.
Vissa situationer kommer en vanlig vidvinkelkamera som GoPro att fungera bättre, men speciellt inomhus där det som skall avbildas finns i alla riktningar så är nog 360 det som är mest effektivt. Det betyder dock inte att det behöver bli ”dåligt” med en vanlig kamera, men man behöver vara medveten om de olika förutsättningar som olika linstyper innebär. Man kan även behöva vara beredd på att det kan ta lite olika lång tid att beräkna, beroende på vilken målsättning man har för resultatet.
Eftersom jag inte haft GPS täckning i bilderna så är inte punktmolnet georefererat eller skalenligt. Därför har jag fått mäta ett objekt i varje punktmoln i verkligheten och i CloudCompare. Kvoten mellan dessa mått används sedan för att sätta korrekt skala i punktmolnet. Dessutom så har jag fått rotera punktmolnen så att golvplanet hamnar nedåt. Det senare är riktigt enkelt i CloudCompare.
Markera bara det punktmoln som skall justeras och använd verktyget ”Pick three points…” för att klicka på tre punkter i punktmolnet som ligger i samma horisontalplan. Inställningarna för skala görs under menyn ”Edit” och ”Multiply/Scale”. Svårare än så är det inte att ”skanna” inomhusmiljöer och göra resultatet mätbart i ett punktmoln.
Det hade också gått att skapa en ”GCP” fil med i förväg inmätta punkter som är synliga i fotografierna och låta den beräknas tillsammans med bilderna. Då hade ingen efterbearbetning varit nödvändig, men att göra det för hundratals bilder kan ta lite tid eftersom WebODM inte har inbyggd bildanalys med automatisk igenkänning av markörer.
Att man kan bearbeta resultatet vidare med JSON-filer för kamerapositioner, länkar till originalfoton, etc gör det inte sämre. Men det är ganska fantastiskt vad som går att åstadkomma med några bilder och en rimligt kraftfull dator.
Efter dessa tester så gjordes även en inhämtning utomhus runt huset och då fanns det GPS täckning. Det resulterande punktmolnet kunde i CloudCompare kombineras med punktmolnen från inomhus och ett samlat georefererat punktmoln skapas.
I filmen ovan visas allt i en animation skapad i CloudCompare, men komprimering, bitrate och liknande gör inte resultatet riktigt rättvisa. I CloudCompare ser det riktigt bra ut.
Punktmolnet kunde även läsas in i QGIS 3.17 (nästa release) och då kunde man tydligt se hur bra georefereingen faktiskt fungerade, i alla fall jämfört med OpenStreetMap. I 3D har som jag nämnt i tidigare inlägg, QGIS ganska långt kvar innan det är användbart på riktigt.
Men det går att visa punktmoln i 3D, även om man måste ha rejält med tålamod och begränsa sig till ganska små 3D fönster.
[Updatering]
Testerna med QGIS ovan är gjorda i en virtuell maskin utan dedikerat grafikkort. När samma data används på fysisk dator med ett rejält grafikkort så är det inga problem att visa stora punktmoln. Däremot är det fortfarande problem med renderingen i 3D.