Gå til innhold

Triangulere data

I Gemini Terrain har vi fire ulike trianguleringsmetoder for data i gmi-lag.

  1. 2D-triangulering (Delaunay)
  2. Triangulering langs linje
  3. 3D-triangulering
  4. Triangulering av 3D-polygoner

Den første metoden bruker vi for konstruerte og innmålte modeller uten overheng, typisk landmålte terrengmodeller. Med den andre metoden kan vi ved hjelp av en linje få 3D-triangulert punktdata. Metoden kommer mest til sin rett i forbindelse med tunnelmålinger der vi har målt data langs en senterlinje. Den tredje metoden er en ren 3D-triangulering og kan brukes til alt fra skannede terrengmodeller til konstruksjoner.

2D-triangulering (Delaunay)

For å bygge opp triangelnettet bruker programmet en triangelmetode som kalles Delaunay-triangulering. Dette er en anerkjent metode som også tar hensyn til bruddlinjer.

Denne metoden bruker følgende inngangsdata:

  1. Punkt-, linje- og polygonobjekter (polygoner fungerer som begrensningskontur)
  2. Punktskyobjekt

Funksjonen finner vi under Verktøy på hurtigmenyen i kartvinduet. Den heter 2D-Delaunay triangulering.

Alle linjer i inngangsdataene blir behandlet som bruddlinjer. For bruddlinjer kan vi sette et ekstrakriterium. Med valget Maks. lengde på en bruddlinjeelement vil programmet splitte opp bruddlinjene etter innlagt verdi.

Figurtekst: Uten maks. lengde kriterium

Figurtekst: Med maks. lengde kriterium

Et annet kriterium vi kan sette i funksjonen er Maks. lengde på triangellinje. Med dette valget vil programmet fjerne triangellinjer som er lengre enn verdien for dette kriteriet.

Figurtekst: Uten maks. lengde kriterium

Figurtekst: Med maks. lengde kriterium:

Vi kan også sette en Minimum punktavstand. Er avstanden mellom punktene mindre enn denne, betrakter programmet punktene som like.

Merk

Vi kan ikke sette 0 som minimum punktavstand.

Et vanlig spørsmål er hva programmet gjør med bueelement i linjer. Disse vil programmet splitte opp i mange små linjeelementer. Maksimal pilhøyde er satt til 5 mm.

Resultatet av en triangulering er et triangelnettobjekt.

Figurtekst: Triangelnettobjekt vist i horisontalt listefelt

Figurtekst: Illustrasjonen viser et eksempel med mange punkter, uten bruddlinjer og begrensningskontur, og resultatet fra trianguleringen.

I tilfeller der begrensningskontur ikke er med i utvalget vil programmet opprette en begrensningskontur rundt triangelnettet. Merk at begrensningskonturen får samme Id som triangelnettet.

Vi ser imidlertid at trianguleringsmetoden har problemer med konkave former. Dette medfører at programmet oppretter triangellinjer der vi ikke har data. Slike tilfeller kan vi løse på forskjellige måter:

  1. Digitalisere en begrensningskontur manuelt før triangulering
  2. Slette uønskede triangellinjer i triangelnettet
  3. Slette lange kanter

I det første tilfellet digitaliserer vi en begrensningskontur ved å snappe til de ytterste punktene. I dette tilfellet vil programmet bruke den digitaliserte begrensningskonturen under trianguleringen.

Figurtekst: Triangulering innenfor begrensningskontur

I det andre tilfellet bruker vi funksjonen Slett triangler eller Slett lange kanter for å slette triangellinjer i triangelnettobjekt. Vi kan med disse funksjonene slette triangellinjer i randsonen, det vil si starter ytterst og går innover.

Vi kan også definere hull i et triangelnett.

Figurtekst: Hull i triangelnett

Hull løser vi ved å sammenføye to polygoner: hovedpolygon og polygon som bestemmer hullet (øyen). Bruker vi funksjonen for å sammenføye to polygoner, må vi sørge for at retningene på polygonene er slik at hovedpolygonet har positivt areal og øy-polygonet har negativt areal.

Alternativt kan vi bruke funksjonen Lag øy i polygon på hurtigmenyen.

Denne kopierer øy-polygonet inn i hovedpolygonet (beholder øy-polygonet som selvstendig polygon), samtidig som den sørger for at retningene er korrekte.

Merk

Vi skal ikke bruke linjetype Hullkontur for øy-polygonet.

Vi kan også hente begrensningskonturen fra et triangelnett. Vi finner valget Hent begrensningskontur fra triangelnett på hurtigmenyen. Hvis det eksisterer en begrensningskontur med samme ID som triangelnettet, vil du få spørsmål om å enten:
Ja: Overskrive dette * Nei: Opprette et nytt * Avbryt*: Ikke gjøre noe

Registrering i felt (tradisjonell landmåling)

Landmåling bruker vi ofte til datafangst for terrengmodeller. For at modellen skal bli god, må vi registrere data på rett måte. Det viktigste ved registreringen er å få med alle knekkpunkt og bruddlinjer i terrenget. Bruddlinjene i terrenget bør måles inn i sammenheng. Hensikten er at triangler ikke skal krysse disse linjene under trianguleringen.

Figurtekst: A = Knekkpunkter, B = Bruddlinjer

I figuren over har vi en modell uten bruddlinjer og en modell med bruddlinjer. Disse modellene beskriver terrenget forskjellig. Hvis vi legger modellene over hverandre, vil det fremkomme fylling og skjæring på grunn av at terrenget er definert forskjellig. Det er viktig å forstå dette siden datafangsten er avgjørende for hvor nøyaktig modellen kan gjengi terrengformen.

Ser vi på modellene i 3D, får vi en god visualisering av dette.

Figurtekst: Uten bruddlinje

Figurtekst: Med bruddlinje

Registrering av data i felt (punktskyer)

Skanning og fotogrammetri gir punktskyer med høy punkttetthet. Med denne type data er det normalt ikke hensiktsmessig å bruke alle punktene i trianguleringen.

For denne type data kan vi kjøre en iterativ triangulering. Vi må oppgi parametre for cellestørrelse og maksimalt avvik mellom resultat og originale punkter som i 3D-trianguleringen beskrevet nedenfor. Vi vil da automatisk få fjernet punkt som er unødvendige sett i forhold til inngitte parametre. Dette vil i praksis si færre punkt i plane områder.

Triangulering langs linje

Triangulering langs linje er en metode vi kan bruke hvis inngangsdataene beskriver overheng, eksempelvis i tunneler. Metoden i Gemini Terrain kan bruke følgende inngangsdata:

  1. Enkeltpunkter og linje
  2. Punktskyer og linje

Linjen kan enten være en linje i et applikasjonslag eller en linje i en SFI-modell. Vi kan si at metoden i Gemini Terrain er en indirekte Delaunay-triangulering. Med basis i linjen blir punktene brettet ut til et matematisk plan, påført en standard triangulering og brettet tilbake.

Funksjonen Trianguler punkt langs linje... finner vi under Verktøy på hurtigmenyen i kartvinduet.

Forenklet kan vi si at trianguleringsmetoden i Gemini Terrain ser det samme som skanneren. Vi kan derfor legge inn cirka offset-verdier for senterpunkt til skanner (profiler). Vi har negativ sideoffset på venstre side når vi ser fremover i linjen (stigende profilnummer).

Figurtekst: A = Profiler senterpunkt, B = Linje

Huk av for Beregn normalt på vertikalkurvatur for data målt inn med instrument i lodd. Dette valget krever horisontal- og vertikalkurvatur uten brudd. Valget er ikke aktivt dersom vi bare har en 3D-linje.

Merk

Dersom vi har en linje med brudd (ingen avrundinger i knekkpunktene) i horisontalplanet, vil vi få følgende melding:

"Horisontal linje inneholder et eller flere vinkelbrudd! Dette kan forårsake problemer i operasjonen. Fortsett?"

Problemene er knyttet til knekkpunktene i linjen. Programmet foretar en matematisk "mapping" av punktene før en 2D-triangulering blir utført. I denne operasjonen beregner programmet blant annet profilnummer og avstand. Som vi ser av figuren under får vi en "blindsone" rundt knekkpunktene der punktene vil få samme profilnummer.

Dette vil kunne medføre at triangellinjene går på kryss og tvers i dette området. I tillegg vil du på motsatt side få noen punkter som hører til to forskjellige profilnumre og samme effekt oppstår her.

I tunneler er bruk av skanning dominerende, men i noen tilfeller måler vi også inn profiler med kikkert. Da vil det oppstå problemer hvis de innmålte punktene i profilet ikke ligger omtrentlig på linje. Vi må sannsynligvis snu en del av trianglene som trianguleringsmetoden gir direkte. For slike målinger har vi et valg, Rydd triangler ved profilert innmåling, som ordner dette automatisk. Figurene nedenfor viser hvordan funksjonen virker.

Figurtekst: Uten valget Rydd triangler ved profilert innmåling huket av

Figurtekst: Med valget Rydd triangler ved profilert innmåling huket av

3D-triangulering

For å rekonstruere overflater fra punktskyer kan vi bruke en ren 3D-trianguleringsmetode. Funksjonen finner vi under Verktøy på hurtigmenyen i kartvinduet.

Det er viktig å pre-prosessere punktskyene før vi 3D-triangulerer disse. Støy og andre uønskede objekter bør fjernes på forhånd. Gemini Terrain har både manuelle metoder for å redigere punktskyer og automatisk metode for å fjerne støy.

Selve trianguleringen utføres normalt i to eller flere iterasjoner, men det er fullt mulig å kjøre kun 1. iterasjon hvis vi bare ønsker en kjapp og grov triangulering.

Triangulering 1. iterasjon

I første iterasjon oppgir vi en cellestørrelse for å redusere antall punkter i trianguleringen. På grunnlag av cellestørrelsen velger algoritmen et vilkårlig punkt til å representere hver celle. Hvilken cellestørrelse er det så naturlig å bruke? Dette vil jo være avhengig av innholdet i skannet. En tommelfingerregel kan være halvparten av to flater du ønsker å skille. Dersom du eksempelvis skanner begge sider av en mur som er 50 cm tykk, så bør cellestørrelse være 0.25 eller mindre. Hvis du har mange forskjellige typer områder så kan det med andre ord være fornuftig å dele opp punktskyen for å oppnå minst mulige triangelnett.

I første iterasjon har vi to tilleggsvalg som kan være nyttige. Disse er spesielt aktuelle for skanndata med skarpe kanter, eksempelvis konstruksjoner.

Det første valget er en statistisk metode der programmet plukker ut sannsynlige kantpunkter. Det er ikke alle typer skann der bruk av metoden er hensiktsmessig. En fjellskjæring er et typisk eksempel på skanndata der formen ofte gjør at vi ikke anbefaler denne metoden.

En annet valg er å ta med bruddlinjer i 3D-trianguleringen. Hvis utvalget også inneholder 3D-linjer blir valget for dette aktivt i dialogen. Programmet simulerer bruddlinjer med å generere tett med punkter langs linjene (punktavstand lik nøyaktigheten). Bruddlinjene kan være målt inn med tradisjonell landmåling eller digitalisert direkte i punktskyen. Merk at denne metoden må brukes med forsiktighet. Det er fort gjort å tilføre "støy" med dette valget.

Punktene fra disse tilleggsvalgene inkluderes i punktutvalget før trianguleringen i 1. iterasjon kjøres.

Triangulering 2. iterasjon

I andre trinn setter vi nøyaktigheten vi ønsker på triangelnettet. Dette gjør vi ved å oppgi en verdi for Maksimal avstand fra originale punkt. Alle punkt i den originale punktskyen med større avstand fra triangelnettet fra 1. iterasjon vil bli inkludert i punktutvalget for trianguleringen.

Denne prosessen kan vi gjenta flere ganger. Vi oppgir ikke antall iterasjoner, men legger inn et stoppkriterium. Kriteriet er en %-verdi for antall punkt lagt til sammenlignet med original punktmengde. I tillegg er maksimalt antall iterasjoner satt til 10.

Valget for å kjøre flere iterasjoner er aktuelt når vi har punktskyer med lite støy. Da vil vi kunne få en modell der ingen punkt er utenfor nøyaktighetskravet. Hvis modellen inneholder støy vil mange iterasjoner medføre at flere og flere støypunkt blir tatt med i trianguleringen.

Vi kan også huke av for å fylle hull. Denne prosessen kjøres etter siste iterasjon. Kriteriene for opsjonen er Maksimal omkrets og Maksimalt 3D-areal. Først sjekker programmet hullet sin omkrets mot oppgitt kriterium. Hvis omkretsen er mindre, sjekkes neste kriterium. Hvis også 3D-areal er mindre enn kriteriet, så fylles hullet. Begge kriteriene må med andre ord være oppfylt for at hullet skal bli fylt. To kriterier er lagt inn da kvadratiske og rektangulære hull kan ha omtrent samme areal, men store forskjeller i omkrets.

Resultat fra trianguleringen

Brukeren bestemmer selv hvor resultatet skal havne med valget for Resultatapplag. Som standard foreslår programmet aktivt lag. Det er kun applikasjonslag som er åpne for redigering som blir listet i nedtrekksmenyen.

I trianguleringen påføres egenskaper til triangelnettet:

Attributt Kode Beskrivelse
S_JOBRESULT S01 3D-triangulert Kodeverdi som angir hvordan triangelnettet er opprettet
3DTri_Cellstart Cellestørrelse for forenkling av triangelnett
3DTri_MaxDist Maks. avstand fra originale punkt (påkrevd nøyaktighet)

Eksempel på hvilken effekt noen av innstillingene har på resultatet

Cellestørrelse: 0.1

Påkrevd nøyaktighet: 0.025

Med sannsynlige kantpunkter

Med bruddlinjer

Triangulering av 3D-polygoner

Dette trianguleringsverktøyet støtter også vertikale polygoner, samt polygoner med eller uten hull. Vi kan også triangulere mange polygoner i én operasjon, og funksjonen vil slå triangelnettene sammen til ett objekt. Dersom vi i utvalget også merker et eksisterende triangelnett, så vil en kopi av dette bli slått sammen med de nye.

Funksjonen finner vi under Verktøy i det horisontale listevinduet for polygoner.

Eksempel på triangulering av 3D-polygoner

Et utgangspunkt med seks polygoner:

Gir et triangelnett med volum: