Van panoramafoto tot 3D-mesh en puntenwolk

28 februari 2018

Ladybug5 en ContextCapture

Panoramafoto’s zijn een belangrijk onderdeel van het geodata-landschap. Niet voor niets hoor je vaak ‘kijk eens op StreetView’ op de vraag hoe iets er nou precies uitziet. Met panoramafoto’s kan echter meer dan kijken. Als er overlap is tussen de foto’s, zijn het in feite stereobeelden en kan er dus ook in gemeten worden. Sterker nog, uit deze foto’s kan geautomatiseerd zeer gedetailleerde 3D-informatie worden afgeleid in de vorm van puntenwolken en 3D-meshes (driehoeksnetten).

Door Tobias Wittwer

Trimble MX7 Mobile Mapping Imaging-systeem, dat de Ladybug5-camera met een GNSS/INS-module van Trimble combineert. Foto: Trimble.

Dit artikel laat zien hoe dit in z’n werk gaat met foto’s van de Ladybug5-panoramacamera en Bentley ContextCapture als software. De getoonde principes zijn uiteraard ook toepasbaar op andere sensoren en softwarepakketten, bijvoorbeeld het populaire Pix4D.

Sensor
De Ladybug5 van Point Grey Research is een panoramacamera voor mobiele toepassingen. Vijf camera’s, elk met een 5MP-sensor, bedekken een horizontaal bereik van 360 graden. Een zesde camera kijkt recht omhoog, waardoor 90 procent panoramadekking behaald wordt. De opnamesnelheid is maximaal tien foto’s per seconde, het gewicht bedraagt drie kilogram. De Ladybug5 wordt vaak als onderdeel van een uitgebreider Mobile Mapping-systeem gebruikt. De hier gebruikte foto’s zijn gemaakt met het Trimble MX7 Mobile Mapping Imaging-systeem, dat de Ladybug-camera met een GNSS/INS-module van Trimble combineert. Hierdoor is directe georeferentie van de foto’s met hoge nauwkeurigheid (enkele centimeters) mogelijk.

Processing van panoramafoto’s in LadybugCapPro.

Genereren van foto’s
De eerste stap in het verwerkingsproces is het genereren van de foto’s. De Ladybug-camera slaat gedurende de inwinning geen losse foto’s op, maar een ruwe fotostream. Hieruit kunnen allerlei verschillende fotobestanden worden gegenereerd, los per camera of gestitcht tot een panorama, met verschillende algoritmes voor kleurprocessing en resampling. De foto’s worden met het programma LadybugCapPro van Point Grey Research gegenereerd, dat onderdeel is van de Ladybug SDK. Bij het starten hiervan wordt naar het te gebruiken fotostreambestand (extensie .pgr) gevraagd. Onder Type (bij 1) dient ‘6 Processed’ gekozen te worden, om zes afzonderlijke foto’s per opname te verkrijgen. Voor ‘Color Processing’ (bij 2) is het zinvol om ‘High Quality Linear’ of ‘High Quality Linear on GPU’ te kiezen. De overige instellingen kunnen op de standaardwaardes blijven staan. Via ‘Convert’ (bij 3) wordt in het vervolg de conversie aangezet. Het resultaat zijn per opname zes foto’s van 5MP-resolutie. Door ‘Processed’ in plaats van ‘Rectified’ te kiezen wordt niet voor het fisheye-effect gecorrigeerd, waardoor het beeld de volledige afbeelding blijft bedekken.

Instellingen voor het gebruik van bekende posities en paspunten gedurende de aerotriangulatie.

Import
In de volgende stap worden de foto’s in ContextCapture geïmporteerd. Hierbij is het belangrijk de foto’s van de verschillende camera’s in aparte ‘Photogroups’ binnen hetzelfde block te zetten. Reden hiervoor is dat het programma de beweging van de camera probeert te bepalen, via het ‘Structure from Motion’-algoritme. Als alle foto’s in een Photogroup zitten, kan de beweging niet goed worden bepaald. Dat komt doordat er steeds een draai van 360 graden wordt gemaakt alvorens de beelden naar de volgende camerapositie springen. Het importeren in aparte Photogroups gaat het gemakkelijkst als de foto’s van de verschillende camera’s in aparte mappen worden verplaatst. Bij afwezigheid van hoge gebouwen zal camera 5 (de eerste camera is camera 0), die recht naar boven kijkt, alleen de hemel gefotografeerd hebben. Deze foto’s importeren is dan weinig zinvol.

De foto’s worden nu per map/camera op het tabblad ‘Photos’ geïmporteerd, wat automatisch in losse Photogroups resulteert. Voor elke Photogroup moet het lenstype (‘Camera model type’) op ‘Fisheye’ gezet worden. Ook moet de brandpuntsafstand (‘Focal length’) ingevoerd worden. Point Grey specificeert een brandpuntsafstand van 4,4 millimeter, maar gezien de aerotriangulatie altijd een waarde rond 5 millimeter levert, is het zinvoller dit als startwaarde in te stellen. Mits beschikbaar, kunnen nu ook de (benaderde) cameraposities worden geïmporteerd. ContextCapture verwacht hiervoor een tekstbestand met bestandsnaam, de coördinaten en eventueel de oriëntatiehoeken. De coördinaten kunnen geografische coördinaten (lengte/breedte in WGS84 of ETRS89) of een geprojecteerd stelsel als RD zijn. Het toevoegen van coördinaten is zeker geen vereiste, maar vergemakkelijkt de aerotriangulatie.

Aerotriangulatie
In de stap aerotriangulatie wordt zowel de uitwendige oriëntatie van alle beelden bepaald, alsook een camerakalibratie uitgevoerd. De aerotriangulatie wordt opgestart door op het tabblad ‘General’ op ‘Submit aerotriangulation…’ te klikken. De instellingen onder ‘Settings’ kunnen in de meeste gevallen op de standaardwaardes blijven staan. Belangrijk zijn echter de instellingen onder Positioning/georeferencing. Welke opties hier beschikbaar zijn, is afhankelijk van het al dan niet toevoegen van cameraposities en paspunten (control points).

Arbitrary:
Er is geen informatie beschikbaar over locatie en oriëntatie van de foto’s.

Automatic vertical:
De verticale richting wordt uit de foto’s bepaald (bij loodrecht naar beneden genomen foto’s). Use photo positioning data for adjustment: Als nauwkeurige cameraposities bekend zijn, kan deze optie gekozen worden. De cameraposities worden dan vastgezet. De auteur heeft hiermee echter geen goede resultaten kunnen bereiken.

Use photo positioning data for rigid registration:
Hierbij worden bekende cameraposities als benaderd aangenomen en de waarnemingen in de foto’s als nauwkeuriger, dit komt overeen met een vrije netwerkvereffening. Bij voldoende overlap tussen de foto’s levert dit goede resultaten.

Use control points for adjustment:
De posities van de paspunten worden hiermee vastgezet, wat zinvol is als deze nauwkeurig bekend zijn.

Use control points for rigid adjustment:
Ook hier wordt een vrije netwerkvereffening uitgevoerd, waarbij het beeldverband niet vervormd wordt door de gekozen paspunten. Zinvol als die paspunten van lage nauwkeurigheid zijn. In eerste instantie, zonder paspunten, zal dus in de meeste gevallen voor ‘Arbitrary’ of, zoals in het geval van de hier gebruikte dataset, voor ‘Use photo positioning data for rigid registration’ gekozen worden. Na het starten van de aerotriangulatie worden eerst in alle foto’s geschikte verbindingspunten gezocht. Daarna wordt de aerotriangulatie berekend. Als deze voltooid is, is links in de projectenboom een nieuw block te zien. Op het tabblad ‘3D view’ van dit block zijn de berekende cameraposities en verbindingspunten weergegeven.

Paspunten en verbindingspunten
De handmatige koppeling kan plaatsvinden met punten mét bekende coördinaten (paspunten, control points) of zonder bekende coördinaten (verbindingspunten, tie points). Beide zijn te vinden op het tabblad ‘Survey’. De coördinaten van paspunten kunnen handmatig worden toegevoegd of vanuit een tekstbestand geïmporteerd. Hierbij is het belangrijk eerst het coördinatenstelsel juist in te stellen en daarna het bestand te importeren. Paspunten kunnen uit verschillende bronnen komen. Bij een project met hogere nauwkeurigheidseisen zullen dit met GPS gemeten punten zijn, die bijvoorbeeld met verfstippen op het asfalt gemarkeerd zijn. Zo zijn deze in de foto’s goed te herkennen. Soms is het echter voldoende als het blok ‘ongeveer’, dat wil zeggen met 10 tot 20 centimeter nauwkeurigheid, gepositioneerd is, bijvoorbeeld voor visualisatiedoeleinden. Dan kunnen geschikte paspunten, zoals hoeken van huizen, ook uit de puntenwolken van het Actueel Hoogtebestand Nederland (AHN) worden gehaald. Dat is in dit geval gedaan.

Import van foto’s in aparte photogroups in ContextCapture.

‘Prikken’ van pas- en verbindingspunten
Het  ‘prikken’ van paspunten en verbindingspunten werkt op dezelfde manier. Eerst wordt het te prikken punt geselecteerd. Dan wordt in het overzicht van alle foto’s de foto gekozen waarin het punt geprikt dient te worden. Als de foto’s bekende posities en oriëntaties hebben, geeft het programma aan in welke foto’s een punt te zien zou moeten zijn. Zonder deze informatie moet de gebruiker zelf op zoek gaan naar de juiste foto’s. De positie van een punt wordt met shift + linker muisklik bepaald. Reeds aanwezige/geprikte andere punten worden als blauw vierkant weergegeven. Voor de hier gebruikte dataset zijn zeven uit AHN bepaalde paspunten gebruikt. Omdat hiermee op een locatie nog steeds  twee losse reeksen ontstonden, zijn daarnaast twee handmatige verbindingspunten toegevoegd. Door deze in enkele foto’s in het problematische gebied te prikken, kon een mooie kloppende aerotriangulatie behaald worden, waarbij alle foto’s op de juiste plek liggen, geen sprongen optreden, en ook de paspunten juist ten opzichte van het blok liggen.

Genereren van producten
Als de aerotriangulatie het gewenste resultaat heeft geleverd, kunnen producten gegenereerd worden. Dit gebeurt op het tabblad General van het blok met de aerotriangulatie die toegepast dient te worden, met de knop ‘New Reconstruction’. Binnen een ‘Reconstruction’ kunnen dan een of meerdere ‘Productions’ uitgevoerd worden, via de knop ‘Submit new production…’. Bij het aanmaken van een production wordt naar het doel hiervan gevraagd. In de meeste gevallen zijn drie opties relevant: 3D-mesh, een getextureerd 3D-driehoeksnetwerk. 3D point cloud, een ingekleurde puntenwolk. Orthophoto/DSM, een orthofoto en hoogtemodel. Deze optie is vooral van toepassing bij gebruik van nadir (‘recht-naar-beneden’) luchtfotografie.

Resultaat van de eerste aerotriangulatie − deze is niet helemaal goed gelukt, er zijn drie losse fotoreeksenontstaan, die onderling niet gekoppeld zijn. Hier dient dus een handmatige koppeling gemaakt te worden.

Puntenwolk of mesh
De keuze tussen mesh en puntenwolk is afhankelijk van het gebruiksdoel. Een mesh levert het betere resultaat voor visualisatiedoeleinden. Een puntenwolk is gemakkelijk te gebruiken met software die beschikt over functionaliteit voor het werken met laserscanbestanden, zoals de meeste CAD-pakketten. Na selectie van het gewenste resultaat kan het bestandsformaat gekozen worden. Voor een puntenwolk worden alleen LAS en POD aangeboden, maar voor een mesh is een grote verscheidenheid aan formaten beschikbaar, waaronder een formaat dat in een webbrowser bekeken kan worden (ContextCapture 3MX – web ready). Ook het gewenste referentiestelsel wordt hier gekozen. Na selectie van de opslaglocatie wordt de productie opgestart. Afhankelijk van het aantal foto’s en de snelheid van de computer kan dit proces vrij lang duren. Als echter voor een reconstruction een keer het onderliggende 3D-model aangemaakt is, gaan andere producties (zoals het berekenen van een puntenwolk als eerst een mesh is berekend) een stuk sneller.

Aanwijzen van paspunten in de foto’s.

Conclusie
Met panoramacamera’s en de passende software is het relatief eenvoudig mogelijk in een grotendeels geautomatiseerd proces 3D-informatie te genereren. Het voordeel ten opzichte van (dynamische) laserscanning is dat de sensoren een stuk goedkoper zijn, en dat met name een getextureerde 3D-mesh veel beter geschikt is voor visualisatiedoeleinden dan een puntenwolk uit laserscanning. Laserscanning daarentegen resulteert meestal in hogere geometrische nauwkeurigheid en is dus beter geschikt voor toepassingen waarbij nauwkeurige maatvoering uit de data het doel is.

Resultaat van de definitieve aerotriangulatie, alle foto’s liggen op de juiste plek.

Tobias Wittwer tobias.wittwer@geonext.nl is directeur/eigenaar, adviseur Geodesie & Geoinformatie bij GeoNext. De uit de hier gebruikte dataset gegenereerde 3D-mesh is online te vinden op

http://webviewer.geonext.nl/MX7/App/

Website GeoNext

Comments are closed.