Varför skall det vara så svårt att hitta ett Open Source program för detta?
Vad jag är ute efter är ett program som kan bearbeta bilder tagna från en rigg med dubbla kameror (stereo) med känt avstånd emellan. Om man vet var riggen är placerad geografiskt och i vilken riktning den pekar så borde det inte vara så svårt att räkna ut positionen för samtliga matchade pixlar i bilderna.
Som jag ser det så består problemet av följande delar:
- Kalibrering av kameror, för att fastställa optiska egenskaper med vinklar i varje pixel från kamerorna och kamerornas inbördes placering.
- Matchning av bilder, en process för att identifiera alla punkter som är synliga i båda bilderna.
- Beräkning av avstånd och vinklar till varje pixel.
- Omvandla vinklar och avstånd till geografiska positioner utifrån kamerornas position och riktning.
När alla stereobilder är beräknade så vill jag kunna peka ut punkter i bilderna och skapa geografiska objekt i en GIS databas.
En avancerad (och mycket dyr) lösning som gör det jag är ute efter, fast med 360° panoraman är EarthMine (TM). Deras produkt bygger på erfarenheter från NASA JPL och de robotar som skickades till Mars för några år sedan.
Även om det finns många källor på Internet som nosar på det jag är ute efter så kan jag inte hitta en lösning som blir användbar för mina syften, så kom igen alla envisa programmerare gör en ansats att få fram en Open Source lösning som vi alla kan använda för att utföra karteringsarbeten med fordonsmonterade sensorer.
När jag funderat lite på hur man praktiskt skall lösa detta för att göra det möjligt att utbyta data mellan olika program så har jag en liten idé.
Fotografier har redan i dag stöd för GPS information i EXIF data (latitud, longitud, höjd och fotoriktning) så detta är inga konstigheter att utnyttja.
För att skapa djupbilder så används normalt en gråskalebild men då tar man inte hänsyn till objektivvinklar och riktningar till alla pixlar. Varför inte använda samtliga tre färgkanaler i en RGB bild för att lagra sidvinkel, höjdvinkel och avstånd, där vinklar är värdet i hela grader med 90° rakt fram. Avstånden anges i hela meter, vilket begränsar längdmått till 255 meter, men felet i sida när man använder hela grader för vinklar blir upp till knappt 5 meter på det avståndet. På 100 meter kan felet hållas inom 2 meter, vilket för många ändamål får anses tillräckligt.
Data utgörs då av två bildfiler, där den ena är ett vanligt foto och den andra en bild med data för djup och vinklar för varje pixel. Pixlar som inte kan beräknas ges naturligtvis värdet noll.
Det kan finnas andra alternativ där exempelvis fotot kompletteras med en fjärde kanal för djupinformation enbart (RGB-D, se exemplevis Intel Labs), och linsegenskaper lagras i EXIF data, för att därefter räkna ut vinklar i varje pixel med mjukvaran.
Vilket som är bäst av förslagen ovan vet jag inte, men jag kommer att fortsätta bevaka utvecklingen när jag har tid.