Etikettarkiv | Fotogrammetri

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).

Fotogrammetri med Zephyr

I måndags så nämnde jag att jag skulle testa lite fotogrammetriprogram senare i veckan, så det är dags nu.

3DF Zephyr (http://www.3dflow.net/) utger sig för att vara ett mycket användarvänligt och allsidigt program som skall klara det mesta med enkelhet, om du har datorkraft för det.

Utvärderingsversionen av programmet klarar av allt som den fulla versionen gör, utom att spara och exportera data. Den verkar inte heller kunna klara av kontrollpunkter enligt informationsrutan vid uppstart.

zephyr_evaluationbox

Nedladdning av utvärderingsversionen görs genom att man fyller i ett formulär på hemsidan och så skall det skickas en länk till installationsfilen automatiskt. Jag hade problem med detta men inom 5 minuter från att jag mailat deras kontaktmail så fick jag nedladdningslänken via svarsmail.

Observera att programmet bara finns till Windows (8.1/8/7/Vista) i 32- eller 64-bitar.

zephyr_gui

Ett ganska rent och avskalat GUI är vad man möter när programmet öppnas, och det gillar jag. Stilen på programmet ger en känsla av Adobe programmen och kanske lite Blender och 3DStudio…

En av få knappar som är aktiva (de flesta går inte att trycka på, än) startar en Wizard i fem steg som om man accepterar förvalen bara handlar om att peka ut ett antal bilder som man vill bearbeta.

När bearbetningen kör så använder programmet alla resurser den kan på datorn, men jag upplever att det är minnesmängd och inte CPU som är gränssättande, så mycket minne är nog bra. Om man har Nvidia Cuda GPU så kommer denna att användas vid beräkningen (enligt hemsidan, jag har inget sådant grafikkort).

zephyr_run1Steg ett: ”Key Points”

zephyr_run2Steg två: ”Finding Neighbors”

zephyr_run3Steg tre: Bearbeta bildpar.

zephyr_run5Steg fyra: ”Merging Clusters”

Resultatet blir ett punktmoln med orienterade foton, om man har tur, men mer om det senare. Sedan kan man klicka på nästa knapp som skapar ett tätare punktmoln och därefter en tredje knapp som skapar texturer och ytor.

Principen är den samma som för Photo Scan Pro från Agisoft, men bildserier som Photo Scan Pro fixar utan problem har jag inte lyckats få igenom i Zephyr. Vid en körning med 42 bilder så lyckades programmet bara koppla ihop 8 av dessa.

Det kan vara så att jag måste ändra lite inställningar, men direkt efter installation så fungerar det sådär bra för mig.

zephyr_objekt

När jag provar att fota ett objekt (eller en hög med ”objekt” på golvet hemma, se ovan) så fungerar det däremot klanderfritt. Programmet kanske är bättre intrimmat för att hantera den här typen av fotogrammetri?

Zephyr kostar lite mindre än Photo Scan Pro, men just nu så tror jag att Photo Scan Pro är värt det, om det är orthofoton man är ute efter i alla fall. Priset är 2’900 $ per licens för Zephyr och det går att få mängdrabatt om man köper flera.

Vi får se om jag får något svar från Acute3D så småningom och kan testa även deras alternativ till fotogrammetrimjukvara.

Mera 3D-foto

Jag har tidigare skrivit om fotogrammetri och den skyddade mjukvaran Photo Scan Pro från Agisoft och Photo Modeller Scanner, men även Open Source alternativet Visual SFM.

Nu har jag hittat ännu ett par företag som erbjuder programvaror för fotogrammetri. Italienska 3DFlow (http://3dflow.net) har ett antal olika skyddade mjukvaror för detta ändamål, men de säljer även tjänster för att skapa 3D modeller. Acute 3D (http://www.acute3d.com) ligger bakom mjukvaran i Autodesks online-tjänst med 123D-Catch och erbjuder även de olika mjukvaror för fotogrammetri. Mest intressant kanske Smart3DCapture Mapper Edition är, som utlovar enkelt skapande av stora 3D modeller direkt hanterbara i GIS-program.

Något av dessa mjukvaror kommer jag att testa senare i veckan, men först ett test av en för icke-kommersiella ändamål gratis mjukvara att skapa 3Dpunkter med.

3DF Samantha går att ladda ner från 3DFlows hemsida och är ett litet program utan egentligt användargränssnitt, men som jag skall visa ganska enkelt ändå att komma igång med.

När man laddat hem mjukvaran (välj 32- eller 64-bitars windows) och packat upp den så går det direkt att köra programmet med de exempelbilder som skickats med. Bilderna ligger i mappen ”Test” och det är även här de resulterande filerna kommer att hamna.

3df_samantha_run2

För att köra med egna bilder så behöver man bara byta ut bilderna i mappen och sedan är det bara att köra programmet igen.

 

För att titta på resultatet så kan man använda exempelvis Meshlab (http://meshlab.sourceforge.net/) och öppna filen i ”*.ply” format, vilket är alla 3D-punkter.

meshlab

I Meshlab kan man sedan ”städa” lite bland punkterna och generera en ytmodell (surface) om man så önskar.

3DF Samantha kan dock leverera mer än detta och alla inställningar görs i den *.ini fil som finns i samma mapp som programmet. Här finns även en instruktion för hur man ställer in programmet, dels i *.ini filen och dels för att skapa kalibreringsfiler för kameran med mera.

Programmet kan dra nytta av Nvidia Cuda GPU:er om du har sådana i din dator, vilket avsevärt snabbar upp beräkningarna. Trots det så är fotogrammetri en tidsödande verksamhet så det hjälper med ett stort mått av tålamod.

För GIS-användning så är programmet inte helt optimalt, inte minst för att det inte skapas några direkt hanterbara filer, men vi får se hur det går senare i veckan när jag testar ett annat program.

Testa gärna programmet själva, men förvänta er inga mirakel. Det är inte helt lätt att jobba med programmet, även om det blir resultat om än små…

Ännu en drakflygning

Skärmbild från 2013-10-12 16:10:40

Bilden ovan visar fotopunkter och GPS spår.

Jag var ute och testade KAP igen. Den här gången så använde jag en GPS med GoPro kameran och georefererade alla bilder innan jag läste in dem i PhotoScan Pro.

Omedelbart så kom några fördelar, inte minst att bilderna redan var någorlunda placerade och orienterade, så matchningen i programmet gick snabbare.

Skärmbild från 2013-10-12 16:13:30Tyvärr så fick jag inte till kamerainfästningen så att kameran tittade rakt ner, jag tror det var den extra vikten av GPS mottagaren, varför alla bilderna är svagt orienterade mor väst.

Det blev skapligt i alla fall och tillräckligt bra för mina försök.

Skärmbild från 2013-10-12 19:55:34

När alla beräkningar och texturer var genererade så placerade jag ut lite markörer i modellen. Jag ville se om det med hjälp av GPS nu gick att mäta i bilden utan att mata in referensvärden. Dessutom så exporterade jag markörerna till en fil och öppnade dem i QGIS över ett lager med flygbilder. Resultatet ser du nedan.

Det är byggnadshörn och tydliga kanter på asfalt och betong som utgör mina markörpunkter. Det finns lite begränsningar i Demo versionen av PhotoScan Pro, men på det hela taget, ”Grejt Suxess”.

Skärmbild från 2013-10-12 19:44:06

Observera att felet i bilderna endast är runt 10 meter jämfört med Google. Då skall man tänka på att det endast är fotoplatserna som är geotaggade hängande från ett snöre i en drake. Hade jag tagit samma GPS och medeltalsberäknat några referenspunkter på marken och använt dessa för den slutliga georefereringen av bilden skulle felet sannolikt bli i princip försumbart.

Drakflygning, uppföljning.

OK, då har vi ett sätt att ta massor med ”flygbilder” och nu vill vi implementera en metod för att göra detta lite mera rutinmässigt, går det?

Jajjamen! Som jag visat så kan man använda Agisoft PhotoScan Pro för att göra beräkningarna och om man är villig att betala $3’499 så är det en väg att gå.

En annan väg som jag hittat exempel på YouTube är PhotoModeler Scanner, en programvara jag tittat på tidigare men lämnat lite då deras demoversioner av mjukvaran är väldigt begränsad.

Video som visar hur man kan skapa orthophoto från flygbilder med PhotoModeler Scanner.

Priset för PhotoModeler Scanner är $2’495 alltså 1’000 dollar billigare. Men jag kan som sagt inte säga om mjukvaran är bättre eller sämre än PhotoScan Pro.

Andra alternativ som kan nämnas är Pix4D (http://www.youtube.com/watch?v=cJ-nCgBXZ5I), Dronemapper, Trimble Gatewing med flera, men dessa är ganska starkt förknippade med UAV-hårdvara och har därmed en helt annan regelbok och kostnad.

Open Source då?

Jodå det finns programbibliotek som Open CV och källkod till diverse kommandoradsprogram som du får kompilera själv, men jag har inte hittat en programvara som kan göra allt som de båda kommersiella programmen (PhotoModeler Scanner och PhotoScan Pro) klarar av. På en sida läste jag detta:

”I’ll warn you: you’ll need to install packages, download academic software, and edit and compile source code. This will also require more than 2 GB of hard drive space.”

Antingen så får man kasta sig in i programmeringens värld och skriva sitt eget program (mycket av koden bakom programmen kommer från Open Source) eller så kanske man kan hitta små moduler som löser delar av problemet och på så sätt pussla ihop en komplett lösning. Det blir mycket pysslande hur som helst. Om man ändå vill göra ett försök så kan man börja titta på Bundler, VisualSFM och kanske Insight3D.

Hade det funnits ett Open Source alternativ som löste uppgiften lika bra som dessa program så hade de inte kostat flera tusen dollar…

Mäta med bilder

I detta inlägg kommer jag att testa PhotoScan från Agisoft. Jag har tidigare testat StereoScan som är gratis medan PhotoScan kostar 179$ i standardversion och 3’499$ i professionell version. Jag testar demovarianter som går att ladda hem från Agisoft, vilket har begränsningar men är tillräckligt bra för att testa de funktioner jag behöver för detta inlägg.

lekplats

Bilderna ovan är beskurna något.

För att testa så har jag tagit tre bilder från olika vinklar på lekplatsen utanför lägenheten. Dessa läser jag in i programmet och sedan är det bara att köra ”Align Photos” och sedan ”Build Geometry”.

Skärmbild från 2013-04-27 14:10:09

Genom att testa lite olika inställningar så får man olika resultat men så småningom så framträder en bild i 3D. Geometry type: ”Sharp” och Target Quality: ”High” fungerade bra för mig.

Fram till detta steg så är standard- och pro-versionerna lika, men vill man mäta i 3D modellen så behöver man det dyrare programmet.

För att mätningar skall fungera så blir det bäst med ”kalibrerade” kameror, men man måste minst kunna sätta ett referensmått i modellen som de andra måtten kan relateras till. Detta görs genom att man känner till något mått i bilderna/modellen, och sätter ut markörer på dessa platser.

Dubbelklicka på bilden där du vill sätta ut markörer som representerar det kända måttet. Högerklicka i bilden och välj ”Place Marker”. Använd verktyget ”Set Reference Distance” och klicka på dina två markörer. Skriv sedan in ditt referensmått i dialogrutan som visas.

På samma sätt går det nu att placera markörer och mäta avståndet mellan dessa.

Noggrannheten sjunker med avståndet från kameran, men i mitt lilla försök så mätte jag fönsterbredder på 20 och 47 meter (avstånd mätta i modellen) och det ena mättes till 110 cm och det andra till 113 cm. Det verkliga måttet är 110 cm!

Skärmbild från 2013-04-27 14:55:24

Om man inte har ett känt mått i bilderna så kanske man känner till det exakta avståndet mellan kameraplatserna. Jag har tagit mina tre bilder med exakt 1 meters mellanrum, så detta kan jag använda som referensmått.

Då läser man in sina bilder och växlar till ”Ground Control” fliken till vänster och fyller antingen i de faktiska koordinaterna för varje kameraposition, eller så skapar man ett lokalt system. Jag sätter Y koordinaterna till 1000 och X till 1000, 1001 och 1002. Detta är ett vanligt lantmäteritips som är användbart vid lokala fältmätningar där det är relativa avstånd som är intressant.

Sedan är det som tidigare dags för ”Align Photos” och ”Build Geometry”.

Utan att sätta ett referensmått i bilderna så mäts samma fönsterbredder som tidigare upp till 110 cm för det närmaste fönstret och 108 cm för det bortre.

Skärmbild från 2013-04-27 15:23:40

Ännu ett sätt att sätta referenser är att använda ”Ground Control” punkter. Om man i bilderna har med minst två sedan tidigare exakt mätta fältpunkter med geografiska koordinater, så kan man använda dessa för att skapa en geografisk referens i bilderna som förutom att göra allt i bilderna mätbart även gör det möjligt att ta ut exakta koordinater för alla mätpunkter.

Men det är inte allt. Har du en kamera med inbyggd GPS så kan programmet använda denna information för att automatiskt bygga upp en modell med geografiskt refererade bilder. Det kan inte bli mycket enklare, även om inbyggda GPS mottagare inte brukar vara de bästa. Vill man kan man sedan exportera ”georefererade” punktmoln och importera dessa till ett GIS program. Det blir då möjligt att i GIS programmet fortsätta inmätningen inte minst då punkter brukar koncentreras till vertikala objekt som väggar och därmed blir dessa ganska lätta att hitta igen i en 2D version av punktmolnet i exempelvis QGIS.

Vill man nu exportera eller spara sina data så får man snällt köpa en licens för mjukvaran. Som privatperson är det mycket pengar, men för ett företag där tid i fält kan kosta hur mycket som helst, så är under 25’000 kronor för en licens ganska billigt.

Gå vidare? Två kameror fast monterade på ett exakt avstånd från varandra, kanske på taket på en bil, och vips så har man allt som behövs för att snabbt kunna fånga data i fält. För ännu lättare tillämpningar så är en kompakt GPS-kamera ett alternativ. Allt som finns med i bilderna går sedan att mäta med förhållandevis hög precision i efterhand. Och med GPS eller kända positioner i bilderna så kan även koordinater plockas fram.

Nu skall jag prova att kalibrera kamerorna och se om det kan bli mycket bättre än det redan är.