Orthorectificatie: 2D versus 3D


Let op, dit is een concept en sterk onderhevig aan aanvullingen en wijzigingen.

“Orthorectificatie” (“orthorectografie”) kan je omschrijven als het ontdoen van perspectief in een foto waardoor een exact haaks bovenaanzicht ontstaat met een uniforme x- en y-schaal. Als gevolg kan zo’n “gerectificeerde” foto geplaatst worden in een CAD-programma. Je krijgt dan een platte projectie waarin je kan meten, de foto is op de juiste schaal. Dit proces kan gezien worden als een onderdeel van fotogrammetrie.

In het Nederlands, en andere talen, zijn er soms geen termen beschikbaar. Daarom worden de volgende termen gebruikt:
Orthorectification (Engels)
Van “haaks” en “richten”, haaks uitlijnen, orthorectificatie (~Anglisisme), haakse of loodrechte correctie of uitlijning. Feitelijk is “orthorectificatie” een Latinisme van “ortho” als in haaks en “rectificatie” als in correctie, aanpassing. Het resultaat van orthorectificatie bestaat uit een “orthofoto”.

Introductie

Sommige programma’s om foto’s te ontdoen van hun perspectief negeren 3D-coordinaten, ze gebruiken alleen 2D-coordinaten zodat de foto uiteindelijk een betrouwbaar beeld geeft van een bovenaanzicht. Dat is in veel gevallen voldoende.

Echter, CAD-gebruikers dienen ervan bewust te zijn dat deze foto’s niet bruikbaar zijn in afgeleide coördinaatsystemen (User Coordinate System, UCS). Meer precies, in een UCS parallel aan het wereldcoördinaatsysteem (WCS) zijn dergelijke foto’s prima te gebruiken maar als de hoek tussen de z-as van het WCS en het UCS groter wordt, dan wordt de afwijking ook groter. Die hoek is belangrijk en bepaalt of de fout acceptabel is of zelfs totaal onacceptabel is. Het eventuele criterium daarbij is een procentuele foutmarge.

In de werkelijke, niet platte, wereld dient een foto goed gepositioneerd te worden, dwars door de punten die verzameld zijn middels bijvoorbeeld een total station. Meestal worden hier per foto vier (4) punten voor gebruikt en daarmee ontstaat meteen een dilemma. Immers, die vier punten liggen wel min of meer in één vlak maar nooit exact in één vlak.

Dit probleem is op twee manieren op te lossen:

  • Methode I, vier-punts orthorectificatie: Laat de foto “zo goed mogelijk” samenvallen met de vier punten:
    • Haaks op de foto kijkende vallen alle (vier) referentiepunten in de foto samen met de vier gemeten punten. Echter,
    • Evenwijdig aan de foto kijkende zal geen enkel coördinaat samenvallen met de foto. De foto zal echter wel door een virtueel vlak lopen waarbij een zo klein mogelijke en gemiddelde afwijking de locatie van dat virtuele vlak in de ruimte bepaalt.
    • Dit vereist een nieuw wiskundig algoritme, zie hierna.
  • Methode II, drie-punts orthorectificatie: Vier punten vormen een vierhoek. In die vierhoek passen twee driehoeken. Laat de foto exact samenvallen met die driehoeken.
    • Het betekent dat de foto twee keer geplaatst wordt waarbij iedere foto samenvalt met een driehoek en met een snijlijn (ImageClip) over de diagonaal van de vierhoek.

De implementatie van bovenstaande twee methoden vereisen controle over de gebruikte API van de CAD-omgeving en de orthorectificatie-omgeving.

  • Methode III, coördinaatmanipulatie: Een derde methode bestaat uit het “manipuleren” van bestaande orthorectificatie-software. Die software werkt goed in 2D. Het is wiskundig mogelijk om vier 3D-punten “plat te slaan” zoals hiervoor beschreven bij de “vier-punts haakse uitlijning”. Er ontstaat dan een nieuwe set 2D-coördinaten die als invoer voor die bestaande software gebruikt wordt. Het resultaat zal dan ruimtelijk goed geplaatst moeten worden.

Al met al zijn er mogelijkheden om 3D te benutten om de best mogelijke resultaten te bereiken. Bij ongevalsanalyse is dit bijvoorbeeld belangrijk omdat de kwaliteit van een CAD-model van een proces verbaal op een hoger niveau komt te liggen en, belangrijker, om onacceptabele fouten te voorkomen.

Voor wat betreft de wiskunde zijn functies als beschreven in “Applied Mathematics concerning CAD Faces” onontbeerlijk en in geval van forensische toepassingen, zoals ongevalsanalyse, zullen de wiskundige methoden en algoritmen publiek moeten zijn en uitlegbaar moeten zijn voor justitie – een van de achterliggende redenen om deze post te publiceren. Aan de slag maar eerst een belangrijk intermezzo.

Intermezzo ijking en vervorming

Orthorectografie zal altijd ijking vereisen waarbij lensparameters overeenkomen met software-instellingen. Als dat gedaan is dan maakt het binnen het proces niet uit onder welke hoek de ondergrond staat. Echter, als z-coördinaten van de referentiepunten onderling veel verschillen, bij een hellend vlak bijvoorbeeld, en als daarbij de software die z-coördinaten negeert, dan kunnen er aanzienlijke en ontoelaatbare vervormingen ontstaan tussen de referentiepunten en buiten de referentiepunten.

Dat is een reden om uitermate zorgvuldig om te gaan met de toepassing van 3D-coordinaten binnen programmatuur die z-waarden negeert.

De beschreven methoden in deze post nemen de z-waarden wel volledig mee waardoor dit probleem niet speelt.

Algoritmen en wiskunde

Coördinaatmanipulatie

Theorie

Dit, methode III, is een logische eerste stap en vormt ook een belangrijke basis voor vier-punts orthorectificatie (methode I).

Het proces is als volgt:

  • Een vierhoek heeft ruimtelijke coördinaten.

  • Er kan een zwaartepunt Z bepaald worden. Dit levert 4 driehoeken op: AZB, BZC enzovoorts.
  • Van alle vier de driehoeken kunnen normalen bepaald worden volgens de rechterhandregel:
    \vec {ZA} \times \vec {ZB} dan \vec {ZB} \times \vec {ZC} enzovoorts, zie Calculate the normal of a face.
  • Deze normalen liggen dicht bij elkaar qua richting.
  • De magnitude van een normaal komt overeen met het oppervlak van zo’n driehoek en is daarmee een maat voor het “gewicht” van iedere normaal op de gemiddelde vector, richting.
  • Er wordt vervolgens een gemiddelde normaal bepaald.
  • Om de geprojecteerde coördinaten in een plat vlak te bepalen kan de gemiddelde normaal verdraaid worden over een (ruimtelijke) hoek, zodanig dat de normaal samenvalt met de z-as. Vervolgens kunnen de coördinaten over dezelfde hoek gekanteld worden. De nieuwe x- en y-coördinaten van ABCD vormen de plat, haaks, geprojecteerde coördinaten. Dit proces levert enkele uitdagingen op:
    • Een verdraaiing van coördinaten om een punt staat hier beschreven: Calculate rotation of a coordinate in 2D. Door een 2D-verdraaing evenwijdig aan het x-y-vlak uit te voeren en daarna een verdraaiing over het y-z-vlak uit te voeren verkrijgen we in twee stappen de 3D-verdraaiing.
    • Het punt waarover verdraaid wordt (“base point”) is het zwaartepunt “Z” van de vierhoek en is het midden tussen de middens van de diagonalen.

      Dit komt overeen met het gemiddelde van de coördinaten van ABCD.
  • Dan volgt de eindfase:
    • De gevonden geprojecteerde x- en y-coördinaten kunnen (al dan niet getransleerd) verder verwerkt worden in het fotogrammetrie-programma.
    • ABCD ligt niet in een vlak. In de geprojecteerde toestand kunnen punten A’, B’, C’ en D’ gedefinieerd worden door ze allemaal de z-coördinaat van zwaartepunt Z te geven. Door nu A’B’C’D’ terug te draaien ontstaan iets aangepaste punten die echter exact in één vlak liggen waarbij dat vlak precies door het zwaartepunt Z van de meting loopt.
    • Zie bijvoorbeeld deze post met codes voor bitmaps. De bitmap kan vervolgens met de juiste DXF-codes ingevoegd worden, de waarde van het invoegpunt en de U- en V-vectorwaarden van de nieuwe bitmap zijn immers voorhanden. De verwerkte bitmap zou eventueel begeleid kunnen worden met een bestand met een identieke naam voorzien van metadata.

Praktijk

Op basis van een fictief voorbeeld wordt het bovenstaande uitgevoerd. Hieronder staat een voorbeeld tot en met de normaalvectoren:

  • Punten ABCD liggen net niet in één vlak. Coördinaten:
    A:10,10,5
    B:30,10,10
    C:30,45,35
    D:10,35,30
  • Het zwaartepunt Z is het gemiddelde van die coördinaten:
    Z:20,25,20
  • Er zijn vier driehoeken zichtbaar, AZB, BZC, CZD en DZA.
  • Vier vectoren spelen een rol:
    ZA:-10,-15,-15
    ZB:10,-15,-10
    ZC:10,20,15
    ZD:-10,10,10
  • Normaalvectoren zijn getekend als 20% van werkelijke magnitude.
  • De volgende kruisproducten vormen een normaal (magenta) vertrekkend vanaf het zwaartepunt van iedere driehoek:
    \vec {ZA} \times \vec {ZB}: -75,-250,300
    \vec {ZB} \times \vec {ZC}: -25,-250,350
    \vec {ZC} \times \vec {ZD}: 50,-250,300
    \vec {ZD} \times \vec {ZA}: 0,-250,250
  • De gemiddelde normaalvector vertrekt vanaf punt Z:
    -12.5,-250,300

De volgende stap is de verdraaiing van de punten en de normaalvector, zodanig dat de x- en y-coordinaat van de normaal (0,0,m) wordt waarbij m de magnitude is. Dat laatste impliceert dat de lengte van de vector gelijk blijft.

  • De verdraaiing kan gesplitst worden in twee verdraaiingen, één verdraaiing in het x-z-vlak en één in het y-z-vlak.
  • Normaalvector: Normal: -12.5,-250,300
  • Het x-z-vlak: De hoek van de normaalvector: =atan(-12.5/300)=~0.04164 rad.
  • y-z-vlak: =ATAN(-250/300)=~-0.6947 rad.
    • De verdraaiing van ABCD over Z

Leave a Reply

Your email address will not be published. Required fields are marked *