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å.
Jag kommer att använda MVE/MVS för detta och jag provar ett enkelt skript i ”bash” för att mata in värden i förväg och sedan automatiskt köra alla terminalkommandon i ett svep.
#!/bin/bash echo 'Ange filer och kataloger med relativa sökvägar' echo echo 'Sökväg till katalog med bilder' read imgpath echo echo 'Sökväg till scenens arbetskatalog' read scenepath echo echo 'Namnge punktmolnet (med sökväg), avsluta med .ply' read pointfile echo echo 'Namnge ytmodellen (med sökväg), avsluta med .ply' read surfacefile echo echo 'Namnge den städade ytmodellen (med sökväg, avsluta med .ply' read cleansurfacefile echo echo 'Namnge texturen (med sökväg), endast namn' read texturefile echo echo 'Nu kör vi igång!' echo mve.makescene -i $imgpath $scenepath mve.sfmrecon $scenepath mve.dmrecon $scenepath mve.scene2pset -F2 $scenepath $pointfile mve.fssrecon $pointfile $surfacefile mve.meshclean -t10 $surfacefile $cleansurfacefile mvs-texturing-mardy.texrecon scene::undistorted $cleansurfacefile $texturefile echo echo 'Allt är klart. Kontrollera resultatet...'
I början på skriptet matas relativa sökvägar in till foton och där jag vill att resultatet skall lagras.
Jag har varit ute och hittat en vägkorsning i Eksjös utkant där man håller på med ett vägarbete. Här tänkte jag kontrollera om jag med metoden kan få tillräckligt mycket data för att göra tänkbara mätningar i datorn i efterhand.
Förutom 64 bilder tagna runt korsningen, inåt och över mitten av korsningen, så har jag även mätt några objekt så att jag kan skapa en referens för min skala.
På plats var jag inte säker på vilka objekt som skulle räcka att mäta, så jag valde några små (bilden ovan) och några större (avstånd mellan två asfaltskanter).
Bilderna skall förhoppningsvis ha tillräckligt överlapp, men jag hat inte överdrivet. Det är kanske ett par tre meter mellan varje kameraposition, och jag har fokuserat fångandet av vägen och inte brytt mig om att lyfta kameran högre än att hus och träd på andra sidan kommit med.
Bilderna är tagna med manuell exponering och bländare för att säkerställa att bilderna är så lika som möjligt. Jag försökte även få till så liten bländare som möjligt för att ha så stort skärpedjup som möjligt.
Medan skriptet rullar på så är det inte mycket att göra mer än att vänta. Kikar man i terminalfönstret så ser man processen pågå och i katalogen skapas kataloger och filer successivt.
Meshlab
När processen är klar så kan man öppna punktmoln eller texturerad modell i Meshlab.
Här använder jag mätverktyget för att mäta hur många ”enheter” något av mina mätta objekt är. Detta används som kvot tillsammans med det uppmätta värdet för att räkna ut en skala.
Skalan sätts sedan i ett filter som återfinns under ”Filters”, ”Normals, Curvatures and Orientation”, följt av ”Transform: Scale, Normalize”.
Sedan kan jag mäta allt som går att se i modellen, eller punktmolnet. Det blev inte så heltäckande som jag önskat (kanske får ta fler överlappande bilder), men asfaltsarbetet som jag fotograferade lite extra framträdde ganska tydligt i punktmolnet.
Här kan jag inte bara konstatera att vägarbetet är drygt 20 meter långt och 3,60 brett, utan även att huset på andra sidan gatan är 8,5 x 14,5 meter stort och 9 meter högt.
Nu har jag använt Meshlab 2016.12 (nya versionsnummer) och där finns även en funktion för att ”referera” modellen mot verkliga koordinater (hoppla).
Detta skulle betyda att jag kan mäta in referenspunkter med GNSS och därmed få fram ett georefererat punktmoln, som sedan kan bearbetas vidare i GIS sammanhang…
Jag börjar se möjligheterna till ännu ett arbetsflöde helt baserat på Open Source. Men det får bli en annan gång.
Som referens så körde jag bilderna även genom Agisoft PhotoScan Pro (demo) vilket som väntat gick lite snabbare. Med mitt skript så behöver jag dock inte köra igång nästa steg på samma sätt som i PhotoScan, men det är i sammanhanget en småsak. Resultatet från PhotoScan är något bättre och lite ”renare”. Sedan blir det mycket enklare att jobba i ett program med allt, så det jag beskriver i artikeln är inte alls jämförbart om man bara fokuserar på resultat.