Un encrypted

922 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
922
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Un encrypted

  1. 1. POGLAVJE 4. PREBIRNI ALGORITEM CDT 46 Slika 4.1: Točke in robovi po urejanju v fazi inicializacije. Zadnji korak inicializacije prebirnega algoritma za navadno DT v faziinicializacije ustvari še prvi trikotnik, s katerim zgradi začetno napredujočo fronto inzačetno spodnjo konveksno lupino. Glede na položaj prvih k točk (k ≥ 3) je možnihveč začetnih konfiguracij, ki so prikazane v prejšnjem poglavju (slika 3.14). Če si obvseh teh primerih poskušamo predstavljati še robove, je različnih situacij še velikoveč. Zato uvedemo rešitev, ki spretno zaobide inicializacijsko raznovrstnost tako, davpeljemo umetni začetni trikotnik, kot kaže slika 4.2. Ustvarimo dve umetni točkip−1 in p−2 , ki ležita levo oz. desno od skrajne leve oz. skrajne desne točke iz množiceP , njuna koordinata y pa je manjša od najnižje točke p0 . Koordinate določimo ponaslednji formuli: p−1 = (xmin − δx , ymin − δy ) p−2 = (xmax + δx , ymin − δy ) δx = 0.3(xmax − xmin ) δy = 0.3(ymax − ymin )
  2. 2. POGLAVJE 4. PREBIRNI ALGORITEM CDT 47 Slika 4.2: Tvorba velikega trikotnika. Umetni trikotnik se tekom triangulacije ne spreminja, saj algoritem legalizacije,ki ga uporabljamo za vzdrževanje Delaunayevega pravila v fazi prebiranja, v umetnitrikotnik ne poseže. Tudi vse trikotnike, ki jih tvorimo s pomočjo umetnih točkp−1 in p−2 , v legalizaciji preskočimo. Z umetnim trikotnikom na enostaven in vselejenak način tvorimo začetno napredujočo fronto F = {p−1 , p0 , p−2 }. Na ta načinsmo potencialno obravnavno zaporedja kolinearnih točk prenesli v fazo prebiranja,kjer niso deležne posebne pozornosti. Z vpeljavo začetnega umetnega trikotnikapridobimo tudi pri prebiranju, saj se zmanjša število različnih obravnav točke. Z uvedbo velikega začetnega trikotnika tudi nekoliko izgubimo, ker ne gradimospodnje konveksne lupine, vendar so rezultati pokazali, da je ta strošek zanemarljiv.4.2 PrebiranjeOsrednji del algoritma predstavlja prebiranje oz. drsenje prebirne premice po ravniniv smeri naraščanja koordinate y. Na svoji poti naleti na dve vrsti dogodkov: • dogodek točke nastopi takrat, ko se premica dotakne točke pi (s točko pi ustvarimo nov trikotnik in ga dodamo v triangulacijo); • dogodek roba nastopi takrat, ko se premica dotakne točke pj , kjer pj
  3. 3. POGLAVJE 4. PREBIRNI ALGORITEM CDT 48 predstavlja končno točko roba pi pj (triangulacijo preuredimo tako, da rob pi pj predstavlja stranico trikotnikov triangulacije). Dogodka sta med seboj povezana. Vsak dogodek roba je hkrati dogodek točke,obratna implikacija ne velja. Pravimo, da dogodek roba sledi dogodku točke, četočka predstavlja končno točko oglišča roba, sicer gre le za navaden dogodek točke. Izpis 3 prikazuje ogrodje prebiranja. Glavna zanka obravnava dogodke točk, kjerv trenutno triangulacijo T vstavimo obiskano točko pi . Nato preverimo, če je točkipi pripadajoč seznam robov Ei prazen. Če ni prazen, notranja zanka poskrbi, daobravnavamo vsak rob e ∈ Ei . Ko v triangulacijo T vstavimo vse robove točke pi ,izvedemo še hevristiki za glajenje napredujoče fronte.Izpis 3 Ogrodje prebirnega algoritma za CDTprocedure Prebiranje(P) for i := 1 to size(P ) do pi = P [i]; T := VstaviTočko(pi , T ); if size(Ei ) > 0 then for j := 1 to size(Ei ) do e := Ei [j]; T := VstaviRob(e, T ); IzvediHevristiko1(); IzvediHevristiko2(); Preden nadaljujemo z natančnim opisom postopkov vstavljanja točk in robov, sipoglejmo lastnosti in implementacijo napredujoče fronte.
  4. 4. POGLAVJE 4. PREBIRNI ALGORITEM CDT 494.2.1 Napredujoča fronta in podatkovne struktureNapredujoča fronta (krajše fronta) F predstavlja zgornjo mejo trenutne triangulacijein s tem mesto dodajanja novih trikotnikov. Njena osnovna naloga je, davstavljajoči točki poišče najbližje ležeči rob, s katerim bomo zgradili nov trikotnik.Geometrijska oblika fronte je lomljenka, sestavljena iz robov mejnih trikotnikov(slika 4.3). Trikotniške robove, ki ležijo na napredujoči fronti, imenujemo rob fronte,točkam pa pravimo točke fronte. Fronta omogoča dostop do mejnih trikotnikov,ki jih potrebujemo pri vzdrževanju sosednostnih povezav vstavljenih trikotnikov strikotniki ob fronti. Napredujoča fronta je enodimenzionalna podatkovna struktura, katere ključiskanja je koordinata x, ki se skriva znotraj točke pi (slika 4.3). Točke fronteso urejene, kar je idealno za hitro iskanje. Vsaka točka fronte hrani dva osnovnapodatka, to sta oglišče fronte, ki predstavlja točko pi , in trikotnik ti , ležeč ob robufronte pi pi+1 . Tako imamo dovolj informacij, da lahko tvorimo nov trikotnik in gapovežemo z ustreznim trikotnikom dane triangulacije. Puščice na sliki predstavljajokazalec na trikotnik, ležeč ob robu fronte (trikotnik ti na sliki). Ko v fronto vstavimonovo točko p, najprej poiščemo rob fronte tako, da vstavljajoči točki poiščemonajbližjo točko pc , s pomočjo katere najdemo rob fronte (to je lahko bodisi robpc−1 pc bodisi ec,c+1 . Z novim trikotnikom fronto osvežimo, zato moramo obveznoosvežiti kazalce na trikotnike. Ker pri iskanju uporabimo le koordinato x točke p,govorimo o projekciji točke p na fronto. Žalik je fronto implementiral kot kombinacijo sekljalne tabele in dvojnopovezanega dinamičnega seznama, ki jo je poimenoval preprost seznam spreskakovanjem (angl. simple skip-list). Takšno implementacijo smo izbrali tudimi. Alternativa je uporaba uravnoteženih dvojiških iskalnih dreves, kot sta drevoAVL ali rdeče-črno drevo ali ena izmed izvedb seznamov s preskakovanjem. Njihovo
  5. 5. POGLAVJE 4. PREBIRNI ALGORITEM CDT 50 Slika 4.3: Napredujoča fronta in osnovni nivo podatkovne strukture.uporabnost je pokazal Zadravec s sodelavci [87, 88].4.2.2 Dogodek točkeOb dogodku točke z iskanjem v podatkovni strukturi napredujoče fronte poiščemoustrezen rob fronte. Projekcija točke pi lahko pade na različne dele fronte, situacijeso naslednje [92]: • Sredinski primer: projekcija točke pi pade na rob fronte; • Levi primer: projekcija točke pi pade na točko fronte; • Robni primer: gre za posebno situacijo sredinskega primera. Točka pi se nahaja na robu fronte. Sredinski primer (slika 4.4a) obravnavamo tako, da zgradimo nov trikotnik l,r,i(slika 4.4b) in osvežimo fronto tako, da vsebuje vstavljeno točko pi . Osvežimo tudikazalec na trikotnik v točki pl . Da zadostimo Delaunayevemu pravilu, pokličemopostopek legalizacije (slika 4.4c). Levi primer (slika 4.5a) obravnava situacijo, kjer projekcija točke pi pade natočko fronte. Ker vemo, da bo hevristika (opisana v nadaljevanju) zgradila dodaten
  6. 6. POGLAVJE 4. PREBIRNI ALGORITEM CDT 51trikotnik, lahko to storimo že zdaj. Zgradimo dva nova trikotnika l−,l,i in l,r,i(slika 4.5b). Točko pl bi sicer morali odstraniti iz fronte, a je hitreje, če točko pl lezamenjamo s točko pi ter osvežimo kazalec na trikotnik v točki pl− . Za oba novatrikotnika pokličemo legalizacijo.Robni primer, kjer točka pi leži neposredno na robu fronte, razdelimo, točko pi pavstavimo v fronto. Pri algoritmu klasične DT moramo obravnavati tudi situaciji, kjer projekcijatočke pi zgreši napredujočo fronto (pade levo oz. desno od F). Omenjeni situacijiza razliko od zgoraj naštetih zahtevata večji poseg v podatkovne strukture, sajvstavljanje točke spremeni tako napredujočo fronto kot tudi spodnjo konveksnolupino. Zaradi vpeljave začetnega umetnega trikotnika se situacijama izognemo.Umetni trikotnik namreč zagotavlja, da vsaka projekcija fronto vselej zadene. Po končanem vstavljanju pokličemo hevristični funkciji za preprečevanjenastajanja zarez in globeli. Postopek je enak kot v prebirnem algoritmu DT (glejpodpoglavje 3.2.1.3 in [92]).4.2.3 Dogodek robaDogodek roba poskrbi, da v triangulacijo na zahtevano mesto vstavimo vseomejujoče robove. Dogodek roba sledi dogodku točke pi , če seznam robov točkeEi ni prazen. Točka pi je torej končna točka enega ali več omejujočih robov ex,i =px pi , kjer px predstavlja začetno točko poljubnega roba iz Ei (takšen primer vidimona sliki 4.7). Če imamo opravka z vstavljanjem več robov hkrati, robove vstavimoenega za drugim. Vstavljajoč rob bomo zaradi preglednosti označili z e, njegovozačetno oglišče pa naj predstavlja točka pj (e =pj pi ). Zaradi različnih preverjanjvpeljemo vektor − , ki je obrnjen v nasprotni smeri roba e in ga definiramo kot → ve→ = pj − pi .−ve
  7. 7. POGLAVJE 4. PREBIRNI ALGORITEM CDT 52Slika 4.4: Sredinski primer: projekcija točke pade na rob fonte (a), tvorba trikotnika(b) in legalizacija (c). Načine vstavljanja robov v triangulacijo smo že opisali. Odločili smo seza implementacijo postopka vstavljanja robov z brisanjem. Ideja vstavljanja jepreprosta - v triangulaciji odstranimo vse Delaunayeve robove (in trikotnike), ki jihrob e preseka, nato pa območje ob e ponovno trianguliramo, pri tem pa upoštevamoDelaunayevo pravilo. Rob e označimo kot stalen in postane del končne CDT .Če se spomnimo dvokoračnih postopkov za CDT, vidimo, da potrebujemo iskalnopodatkovno strukturo že zaradi dostopa do oglišč roba e. Prednost našega pristopaje sprotnost vstavljanja, kar s pridom izkoristimo. Ko v triangulacijo vstavimo točkopi , ki ji sledi dogodek roba e, končnega oglišča roba sploh ni potrebno iskati. Vstavljanje robov sicer krši osnovno načelo prebirnih algoritmov, ki pravi, daje del preiskane množice podatkov že del končne rešitve, saj bomo ustvarjenotriangulacijo prerešetali, a nič zato. Že osnovni Žalikov pristop je izjema. Za vsakimnovo tvorjenim trikotnikom sledi legalizacija, značilna za inkrementalne metode, ki
  8. 8. POGLAVJE 4. PREBIRNI ALGORITEM CDT 53Slika 4.5: Levi primer: projekcija točke zadene točko fronte (a) in tvori dva trikotnika(b).Slika 4.6: Robni primer: projekcija točke zadene rob fronte (a) in razdeli priležnitrikotnik (b).preoblikuje skupino obstoječih trikotnikov za prebirno premico. Temu se ne moremoizogniti. Velja pa, da se spremembe izvajajo le v neposredni bližini napredujočefronte. Robovi lahko posežeje veliko dlje. Vstavljanje roba e poteka v naslednjem zaporedju: 1. Poiščemo prvi trikotnik, ki ga rob e seka. 2. S korakanjem po triangulaciji zbrišemo vse trikotnike, ki jih rob seka, in dobimo regijo Re = Qe,L + Qe,R . 3. Regijo Re trianguliramo. 4. Rob e označimo kot stalen.
  9. 9. POGLAVJE 4. PREBIRNI ALGORITEM CDT 54 Slika 4.7: Po točki pi vstavimo vse njene robove.4.2.3.1 Iskanje prvega trikotnikaZa začetek sprehoda po presekanih trikotnikih potrebujemo trikotnik, v katerem sesprehod prične. To je zagotovo eden izmed trikotnikov, ki vsebujejo točko pi . Vsehmožnih trikotnikov je enako stopnji oglišča pi . Ker se točka pi nahaja na fronti inne v notranjosti triangulacije, je stopnja točke v povprečju za polovico manjša, zatopri vstavljanju roba v triangulacijo preverimo zelo malo trikotnikov. Iskanje želenega trikotnika je preprosto. Postavimo se v trikotnik ob robu fronte,ki vsebuje pi . Če upoštevamo smer roba e, izberemo tisti segment ob pi , kjer smobližje robu e. Smer roba dobimo s primerjavo začetne in končne točke roba e. Čerob e označimo z e = pj pi , pogledamo razliko v koordinati x točk pi in pj . Če jexi − xj ≥ 0, izberemo segment fronte levo od pi in iščemo v nasprotni smeri urinegakazalca. Če je xi − xj < 0, iskanje pričnemo v trikotniku ob segmentu fronte desnood pi v smeri urinega kazalca. Ob sprehodu skozi trikotnike s preverjanjem vektorskega produkta takšentrikotnik najdemo v kratkem času. Primer vidimo na sliki 4.8, kjer vstavljamorob s končno točko p2 . Iskati pričnemo v trikotniku t1 , ki leži ob segmentu desnood p2 in se sprehodimo v smeri urinega kazalca do trikotnika t3 . Vektorski produkt→ × − spremeni predznak, zato se ustavimo. Rezultat iskanja je trikotnik t2 , v−v1 → vekaterem bomo pričeli korakati po triangulaciji.
  10. 10. POGLAVJE 4. PREBIRNI ALGORITEM CDT 55 t Slika 4.8: Iskanje prvega trikotnika.4.2.3.2 Brisanje sekanih trikotnikovKo imamo začetni trikotnik za sprehajanje, se pričnemo premikati. Uporabimopostopek ravnega sprehoda [6, 25] po triangulaciji od končnega do začetnega ogliščaroba e. Osnovna ideja je pomikanje po trikotnikih s sledenjem njihovih sosednostnihpovezav tako, da se pomikamo le po trikotnikih, ki jih rob e preseka. Pri tem sipomagamo z vektorskim produktom, ki nam pove, na kateri strani roba se nahajamoin v kateri trikotnik se bomo pomaknili. Dvokoračni algoritmi se srečujejo le z enimtipom ravnega sprehoda, to je sprehod, ki poteka izključno po trikotnikih, saj vsakvstavljajoč rob e leži znotraj triangulacije. Izpis 4 prikazuje psevdokod takšnegasprehoda, čigar rezultat je prazna regija ob robu Re , sestavljena iz Qe,L in Qe,R , kiju bomo kasneje triangulirali. Psevdokod prikazuje postopek brisanja robov oz. trikotnikov, kadar rob e vceloti leži znotraj triangulacije T . Primer postopka vidimo na sliki 4.9a. RegijiQe,L in Qe,R inicializiramo s točko pi (Qe,L = Qe,R = {pi }). Sprehod pričnemov začetnem trikotniku t ob točki p = pi . V vsakem koraku trikotniku t najprejpoiščemo sosednji trikotnik glede na presekan Delaunayev rob pl pr in ga označimo stn . Nato v trikotniku tn poiščemo nasprotno točko robu pl pr (točka pn ) in preverimo,na kateri strani vektorja − se točka pn nahaja. Če pn leži na levi strani, v regijo → veQe,L shranimo točko pl , ki predstavlja sosednje oglišče v trikotniku tn v nasprotnismeri urinega kazalca. Če se pn nahaja na desni strani roba pi pz , v regijo Qe,R
  11. 11. POGLAVJE 4. PREBIRNI ALGORITEM CDT 56Izpis 4 Procedura brisanja sekanih trikotnikov ob vstavitvi roba e =pi pjprocedure BrisiCDT(pi , pj , ve , t, T ) p := pi ; Qe,L := {p}; Qe,R := {p}; while not JeOgliščeTrikotnika(pj , t) do tn := NasprotniTrikotnik(p, t); pn := NasprotnoOglišče(tn , t); if LevoOd(pn , ve ) then pl := OgliščeCCW(pn , tn T ); Qe,L := Qe,L + pl ; p := pl ; else pr := OgliščeCW(pn , tn , T ); Qe,R := Qe,R + pr ; p := pr ; Odstrani(t, T ); t := tn ; Qe,L := Qe,L + pj ; Qe,R := Qe,R + pj ;end
  12. 12. POGLAVJE 4. PREBIRNI ALGORITEM CDT 57dodamo točko pr , ki jo v trikotniku tn najdemo, če se premaknemo v smeri urinegakazalca. Celoten korak ponovimo za vse trikotnike tn . Sprehod zaključimo, kotrikotnik tn vsebuje točko pj (pj dodamo v obe regiji). Rezultat sprehoda sta regijiQe,L = {pi , p0 , p1 , p5 , p6 , pj } in Qe,R = {pi , p2 , p3 , p4 , p7 , p8 , pj } (slika 4.9b), končnirezultat vstavljanja vidimo na sliki 4.9c.Slika 4.9: Sprehod po trikotnikih ob vstavljanju roba (a) v prvem koraku vrne regijiQe,L in Qe,R (b) in rezultat trianguliranja (c). Poseben primer roba se pojavi takrat, kadar je rob e navpičen oz. vodoraven.Takrat položaje točk glede na pi pz preverjamo le s primerjavo koordinate x oz. y. Ker robove vstavljamo sproti, so pogosti primeri, da rob e leži nad napredujočofronto in ne seka nobenega trikotnika (slika 4.10a). Sprehod od pi do pj poteka ponapredujoči fronti, rezultat pa je le regija Re (slika 4.10b). Najzahtevnejši primer vstavljanja nastopi, kadar se rob e ponekod nahaja nadnapredujočo fronto, ponekod pa seka trikotnike triangulacije (slika 4.11a). Takratuporabimo kombinacijo sprehoda po trikotnikih in preprostega sprehajanja potočkah fronte (način sprehoda se spremeni v točkah s0 in s1 ). Tudi tukaj sta rezultat
  13. 13. POGLAVJE 4. PREBIRNI ALGORITEM CDT 58brisanja regiji Qe,L in Qe,R (slika 4.11b), ki ju trianguliramo (slika 4.11c). Najugodneje je, da je rob e že del triangulacije. Takšne situacije odkrijemo že vkoraku iskanja začetnega trikotnika. Slika 4.10: Sprehod po točkah fronte (a) in triangulacija regije Re (b).Slika 4.11: Mešani sprehod po točkah fronte (a), rezultirajoči regiji Qe,L in Qe,R (b)in triangulacija (c).4.2.3.3 Triangulacija praznega območjaPrazno območje ob robu je potrebno triangulirati tako, da rob e zasede pravo mestov triangulaciji. Razdelitev regije Re na dve podregiji se izkaže kot zelo primerna,saj ob triangulaciji regije Re ne smemo zgraditi roba, ki bi vseboval eno ogliščev Qe,L in drugo v Qe,R . Zato vsako regijo trianguliramo posebej, lepa lastnostpristopa pa je ta, da rob e predstavlja stičišče regij. Za trianguliranje regije lahko
  14. 14. POGLAVJE 4. PREBIRNI ALGORITEM CDT 59uporabimo poljuben algoritem za Delaunayevo triangulacijo mnogokotnika [59],vendar se izkaže, da je pristop, ki ga bomo opisali, zelo praktičen. Regijo Qe bomo triangulirali s preprostim rekurzivnim algoritmom [6]. Vhod valgoritem je regija Qe = {pi , p0 , p1 , p2 , .., pr−1 , pj }, kjer je r število notranjih ogliščQe , pi in pj pa predstavljata oglišči vstavljajočega roba e. Izvajanje algoritma nakažeslika 4.12: • V Qe poiščemo točko pk , za katero velja, da očrtani krog trikotniku i,j,k ne vsebuje nobene druge točke iz Qe . • Tvorimo trikotnik i,j,k , regijo Qe pa razdelimo v Qf = {pi , p0 , .., pk } in Qg = {pk , .., pr−1 , pj }, pri čemer sta f = pi pk in g = pk pj . • Postopek rekurzivno ponovimo za obe novi regiji Qf in Qg . Slika 4.12: Triangulacija regije Qe . Pri preverjanju praznega kroga upoštevamo le točke znotraj trenutne regije Q,zato se izognemo preverjanju vidnosti. Tako preverjamo le osnovno Delaunayevopravilo. Z vsako delitvijo regije se zmanjša število iskanja ustrezne točke pk , zrekurzijo pa končamo, ko regija vsebuje le tri točke. Med izvajanjem algoritmaskrbimo, da so trikotniki med seboj povezani.
  15. 15. POGLAVJE 4. PREBIRNI ALGORITEM CDT 60 Z vstavljanjem roba zaključimo, ko smo uspešno triangulirali obe regiji ob robue. Ostane le še povezava med trikotnikoma regij Qe,L in Qe,R , ki ležita neposrednoob robu e. Rob e v obeh trikotnikih označimo kot stalen.4.3 FinalizacijaV fazi finalizacije poskrbimo, da je rezultat CDT (G), kjer so vstavljeni vsi omejujočirobovi Ec in izključno točke začetne množice točk P . V fazi inicializacije smoustvarili začetni umetni trikotnik, posledično pa so nastali tudi drugi trikotniki,ki vsebujejo dodatni točki p−1 oz. p−2 . Iz dobljene CDT moramo sedaj odstranitiobe dodatni točki p−1 in p−2 , s tem pa tudi izbrisati vse trikotnike, ki vsebujejo titočki kot svoja oglišča. Definicija triangulacije zahteva takšno delitev ravnine, ki je omejena s konveksnolupino KL(P ). Žalik v svojem algoritmu navadne Delaunayeve triangulacije zgradizgornjo konveksno lupino s sprehodom po točkah napredujoče fronte, medtem kospodnjo konveksno lupino gradi sproti. Zgornjo konveksno lupino zgradimo naenak način, kjer za sosednji rob fronte preverimo predznak vektorskega produktaza detekcijo konveksnega kota. Napredujočo fronto prehodimo od točke pL+ do pR−(slika 4.13a) in v primeru konkavnega kota vstavimo nov trikotnik. Tvorba zgornjekonveksne lupine sproti zbriše napredujočo fronto F. Spodnjo konveksno lupino zgradimo na enak način. Sprehodimo se po mejitriangulacije s pomočjo sosednostnih povezav mejnih trikotnikov od pL+ do pR− in spreverjanjem vektorskega produkta dodamo manjkajoče trikotnike. Končni rezultattriangulacije vidimo na sliki 4.13b.
  16. 16. POGLAVJE 4. PREBIRNI ALGORITEM CDT 61Slika 4.13: Finalizacija zbriše odvečne trikotnike (a) in zgradi konveksno lupino (b).4.4 Časovna analizaAnalizirali bomo hitrost izvajanja algoritma, kjer bomo določili pričakovano časovnozahtevnost. Vhod v algoritem predstavlja n točk in m robov. Faza inicializacije zahteva ureditev točk z algoritmom QuickSort (O(n log n)).Dodatno moramo poskrbeti za ohranitev pravilnega zapisa robov zaradi urejanjatočk (O(m)). Časovna zahtevnost tega koraka je T1 = O(n log n) + O(m) =O(n log n), saj je m ≤ n. Časovno zahtevnost vstavljanja točk smo povzeli po [92], saj smo osnovopostopka ohranili. V fazi prebiranja je potrebno vsako točko vstaviti v iskalnostrukturo, ki je implementirana kot sekljalna tabela. Vstavljanje je izvedeno vkonstantnem času. Predpostavimo, da je vseh vnosov nvnosov (nvnosov > 0) in daje v nekem trenutku izvajanja v napredujoči fronti l točk. Da najdemo ustrezenrob fronte, potrebujemo v povprečju l/nvnosov preverjanj. Tvorba trikotnika inpreverjanje hevristik se izvedeta v konstantnem, legalizacija pa v logaritemskem lčasu [60]. Časovna zahtevnost drugega dela algoritma je torej T2a = O(n nvnosov +n log n). Ker je običajno l n in nvnosov 1, pomeni, da je l/nvnosov n,zato je ta strošek zanemarljiv. Tako dobimo časovno zahtevnost vstavljanja točk
  17. 17. POGLAVJE 4. PREBIRNI ALGORITEM CDT 62T2a = O(n log n). Dostop do roba je takojšen, zanj pa moramo poiskati trikotnikza začetek korakanja (O(1)). Sledi korakanje po trikotnikih, pri čemer sta izbiranaslednjega trikotnika in brisanje opravljena prav tako v konstantnem času O(1). Čeje k število sekanih trikotnikov, je časovna zahtevnost korakanja O(k). V najslabšemprimeru dobimo dve regiji, ki vsebujeta skupaj približno k točk. Časovna zahtevnost 2triangulacije regij je 2 O( k4 ). Ker je k n, lahko za triangulacijo podamo ocenoO(n). Vstavljanje m robov torej opravimo v času T2b = m O(n) = O(n2 ), če jem ≈ n. Časovna zahtevnost prebiranja je torej T2 = T2a +T2b = O(n log n)+O(n2 ) =O(n2 ). Finalizacijo izvedemo v linearnem času T3 = O(n). Najslabša časovna zahtevnostalgoritma je: T = T1 + T2 + T3 = O(n log n) + O(n2 ) + O(n) = O(n2 ),pričakovana pa T = O(n log n).4.5 RezultatiPri delovanju algoritmov običajno analiziramo časovno in prostorsko zahtevnost.Časovna zahtevnost zavisi od značilnosti podatkov (število točk, število robov innjihove porazdelitve). Ponavadi napravimo analizo najslabših in pričakovanih časovizvajanja, v praksi pa uporabnike bolj zanimajo dejanski časi izvajanja na praktičnihprimerih. Zavedati se moramo, da so rezultati meritev odvisni od faktorjev, kot soprogramski jezik, izkušnje ali stil programiranja posameznika, ki je določen algoritemimplementiral, pa od operacijskega sistema ali računalnika, na katerem smo meritveizvajali. Kljub temu takšni eksperimenti podajo dragoceno informacijo o tem, kakoučinkovit je algoritem, ko ga primerjamo z drugimi. Naš algoritem (označimo ga s SL) smo primerjali s tremi znanimi algoritmi, kijih je implementiral Shewchuk v svojem paketu Triangle [77, 78]. Njegove algoritme
  18. 18. POGLAVJE 4. PREBIRNI ALGORITEM CDT 63zaradi stabilnosti in robustnosti implementacije avtorji triangulacijskih algoritmovpogosto uporabljajo kot referenčne implementacije. V paketu Triangle smo izbralitri različne algoritme omejene Delaunayeve triangulacije: • algoritem Deli in vladaj avtorjev Leeja in Schachterja [61] (označimo z LS- D&C), • prebirni algoritem, ki ga je razvil Fortune [42] (označimo z F-SL) in • naključni inkrementalni algoritem s korakanjem, ki ga je razvil Mücke [69] (označimo z M-INC). Meritve smo opravili na osebnem računalniku s procesorjem Intel Pentium M2.9 GHz z 1 GB delovnega pomnilnika, algoritme smo poganjali pod operacijskimsistemom Windows XP. Vsi algoritmi so implementirani v jeziku C ali C++ inprevedeni s prevajalnikom VisualC. Slika 4.15 prikazuje primer triangulacije podatkov iz katastra, slika 4.16 papredstavlja triangulacijo višinskih črt. Oba primera smo triangulirali z vsemi štirimialgoritmi. Rezultate smo predstavili v tabeli 4.1, hitrost delovanja pa smo uprizoriliz grafom (slika 4.14). Izvajalne čase smo pričeli meriti na manjših vhodnih množicah,kjer se je pokazalo, da algoritmi za triangulacijo potrebujejo skoraj enak čas. Ko smopovečevali število točk in robov (dejansko smo uporabili druge vhodne podatke), se jeizkazalo, da je naš algoritem v večini primerov vsaj podobno hiter ali celo hitrejši odLS-D&C. M-INC je pri množicah nad 5 mio točk in robov odpovedal, v splošnem seje izkazal za najpočasnejšega. Nekoliko hitrejši pri našem testiranju je bil algoritemF-SL, a tudi ta je za dane primere potreboval več časa. Najbolje se je odrezalalgoritem LS-D&C, ki se je v vseh testnih primerih dobro obnesel. Ponekod je bilmalenkost hitrejši, kjer je bil pa počasnejši, je bil naš algoritem tudi do dvakrathitrejši. Tabela 4.2 prikazuje izvajalne čase posameznih delov algoritma. Razvidno je,
  19. 19. POGLAVJE 4. PREBIRNI ALGORITEM CDT 64 Tabela 4.1: Primerjava izvajalnih časov z obstoječimi algoritmi. čas CPE [s] št. točk št. robov M-INC F-SL LS-D&C SL 23262 28155 0.1624 0.1030 0.0690 0.0658 93048 112620 0.7996 0.4656 0.3376 0.3227 162244 162312 1.2844 0.7848 0.5124 0.5313 372192 450480 4.5940 2.0312 1.6185 1.2397 1297360 1296020 21.1436 8.7032 4.3500 4.8907 1488768 1801920 26.5833 9.6303 7.7188 4.7813 2444700 2933200 56.5155 29.2453 22.8850 8.7660 5189440 5184080 / 64.9476 19.9814 20.4637 5955072 7207680 / 119.7030 45.0468 23.4323da faza inicializacije porabi več kot polovico izvajalnega časa v primerjavi s fazoprebiranja, medtem ko je finalizacija zanemarljivo majhen strošek. Tabela 4.2: Izvajalni časi posameznih delov algoritma SL. št. točk št. robov inicializacija prebiranje finalizacija 93048 112620 0.1093 0.2033 0.0000 1488768 1801920 1.6406 3.1976 0.0000 2444700 2933200 3.7343 5.8853 0.0053 Slika 4.14: Graf odvisnosti hitrosti izvajanja od števila omejitev.
  20. 20. POGLAVJE 4. PREBIRNI ALGORITEM CDT 65Slika 4.15: Primer vhoda pri katastrskih podatkih (a) in rezultat triangulacije (b).
  21. 21. POGLAVJE 4. PREBIRNI ALGORITEM CDT 66Slika 4.16: Primer vhoda pri triangulaciji površja (a) in rezultat triangulacije (b).
  22. 22. Poglavje 5Rekonstrukcija površja iz oblaka točkPoglavje predstavlja uvod v drugi del naše disertacije. Ker se je pristop sprebiranjem izkazal za uspešnega v primeru ravninske triangulacije, bi lahkopodobno poskusili tudi pri tvorbi triangulacije v 3D. Pravo posplošitev sicerpredstavlja tetraedrizacija [43], vendar je v praksi veliko bolj zanimiv problem tvorbetrikotniškega površja iz oblaka točk, imenovan rekonstrukcija površja. Zato bomonajprej opisali najpopularnejše rešitve za rekonstrukcijo površja in nato prešli naopis lastnega postopka, temelječega na paradigmi prebirne ravnine.5.1 UvodProblem rekonstrukcije je zelo pogosta tema v računalniški geometriji in njenihaplikacijah, kar je vsekakor posledica razvoja prebirnih naprav ali prebirnikov(angl. scanners). Cilj rekonstrukcije je ustvariti računalniški model površja iztočk v prostoru, pridobljenih z različnimi postopki prebiranja (laser, bela svetloba,mehansko prebiranje) [16]. Ker nas zanima izključno tvorba površja, se s prebirnikiin tehnikami pridobivanja točk ne bomo ukvarjali. Rekonstrukcija površja se prične z oblakom točk (angl. point cloud). Oblaktočk je množica točk P v prostoru, ki predstavlja vzorce originalnega površja S, 67
  23. 23. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 68dobljene s prebiranjem. Zato velikokrat namesto o točkah govorimo o vzorcih, vzorecpa opišemo s trojico koordinat p(x, y, z). Oblak točk je podmnožica množice točkpovršja (P ⊂ S). Včasih poleg koordinat razpolagamo še z normalami točk, odvodiin sosednostmi. Nas zanimajo izklučno oblaki točk brez dodatnih informacij. Nalogarazvijalca postopka rekonstrukcije je, da s povezovanjem točk P zgradi računalniškimodel površja S (slika 5.1). Ta bo le približek S, saj imamo končen naborvzorcev. Površje bomo predstavili s trikotniško mrežo, ki je danes najpopularnejšapredstavitev površja na področju rekonstrukcije. Pri oblakih točk se lahko pojavi šum, ki je rezultat nenatančnosti prebiranja.Točke šuma so tiste, ki ne ležijo na originalnem površju S in kot take povzročajoanomalije v rekonstruiranem površju S . Drug nezaželjen pojav pri oblakih točk sotočke, ki so bile zajete po pomoti. To so osamele točke, ki ležijo daleč od površja(angl. outliers) in motijo postopek rekonstrukcije. Med napake zajemanja vzorcevsodijo tudi luknje. Te lahko predstavljajo območja na površju, ki jih prebirnik niuspel zajeti, ali pa gre za dejanske luknje, ki so lastnost oblike. Površje lahko tvorimo na dva načina. Če površje poteka skozi vse točkeP , pravimo, da gradimo interpolacijsko površje. Tak način gradnje površja jeobčutljivejši na šum. Drug način aproksimira površje S. Za aproksimacijsko površjeje značilno, da ne poteka nujno skozi točke iz P , ampak leži blizu njih. Zaradi tegase na predelih, kjer je prisoten šum, le-ta zaradi povprečenja porazgubi. Rezultat jesicer manj natančen, vendar pa je aproksimacijsko površje odpornejše na šum. Glede na obliko lahko tvorimo vodotesna površja (angl. watertight) ali površjaz mejo (angl. boundary). Pri vodotesnih površjih za vsak rob velja, da pripadanatanko dvema trikotnikoma. Nasprotno, površja z mejo dovoljujejo robove, kipripadajo natanko enemu trikotniku. Takšni robovi predstavljajo mejo površja.Primer površja z mejo je polovica krogle brez osnovne ploskve (slika 5.2a). Če
  24. 24. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 69dodamo osnovno ploskev, dobimo vodotesno površje (slika 5.2b).Slika 5.1: Proces izgradnje površja od zajemanja vzorcev do rezultata programskerekonstrukcije.5.1.1 VzorčenjeZelo pomemben faktor pri rekonstrukciji je vzorčenje, saj bo rekonstruirano površjeiz oblaka točk le približek originalnega površja. Nemogoče je npr. rekonstruiratiostre robove. Spomnimo se Nyquistovega teorema, ki pravi, da mora biti najnižjafrekvenca vzorčenja (imenovana Nyquistova frekvenca) fny = 2fmax , kjer je fmaxmaksimalna frekvenca v frekvenčnem spektru funkcije s končno amplitudo, vsajdvakratnik le-te. Za točno rekonstrukcijo potrebujemo neskončno gosto vzorčenje,kar pa ni izvedljivo. Rezultat rekonstrukcije močno zavisi od gostote vzorčenja.Obstajata dva kriterija, ki povesta, kako je površje vzorčeno. Prvi kriterij temeljina velikosti lokalne značilnosti (angl. local feature size ali LFS), drugi pa natakoimenovani vzorčni poti (angl. sampling path).
  25. 25. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 70 (a) (b) Slika 5.2: Primer površja z mejo (a) in vodotesnega površja (b). Kriterij vzorčne poti je določen s parametrom ε, ki predstavlja polmer krogle. Zapovršje S pravimo, da je zajeto z vzorčno potjo ε, če katera koli krogla s polmeromε s centrom v vzorcu iz P vsebuje vsaj eno vzorčno točko. Primer vzorčne potiε vidimo na sliki 5.3. Če vzorčimo po kriteriju vzorčne poti, kot rezultat dobimoenakomerno porazdelitev vzorcev. Ti so pri rekonstrukciji zelo zaželjeni, vendar nisonujno optimalni za končno predstavitev objekta, saj v primeru monotonih predelovdobimo preveč vzorcev. Naravno se zdi, da je vzorcev več v bolj razgibanih predelihpovršja in manj tam, kjer je ukrivljenost površja majhna. Temu ustreza drugi kriterij. Velikost lokalne značilnosti LF S(p) točke p ∈ P jefunkcija, ki vsaki točki p priredi realno vrednost, ki predstavlja najbližjo razdaljodo srednje osi (angl. medial axis) [3]. Srednja os nad množico P je definirana kotzaprtje vseh točk v R3 , ki imajo več kot eno najbližjo točko na S, tako da se krogi,ležeči na srednji osi, vsaj dvakrat dotikajo površja S. Ker nimamo površja ampakle oblak točk, srednje osi ni mogoče zgraditi in tako izračunati pravilne LF S. Takoalgoritmi uporabljajo aproksimacijo srednje osi [4, 17].
  26. 26. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 71Slika 5.3: Vzorčenje po kriteriju vzorčne poti (a) in rekonstruiran objekt s slaborekonstruiranim robom (b).5.2 Sorodne raziskaveDo danes je bilo na področju rekonstrukcije razvitih že veliko algoritmov. Glede nanačin gradnje površja jih delimo v naslednje skupine [66]: • algoritmi z delitvijo prostora (angl. spatial subdivision), • algoritmi rekonstrukcije s funkcijo razdalje (angl. distance function), • algoritmi z ukrivljanjem površja (angl. warping), • inkrementalni algoritmi (angl. incremental algorithms).5.2.1 Algoritmi z delitvijo prostoraPostopkom, ki jih združujemo v množico algoritmov s prostorsko delitvijo, je skupno,da vhodnim podatkom podajo oklepajočo škatlo (angl. bounding box), ki jo razdelijov manjše celice. Načinov delitve prostora je več in so odvisne od pristopa, s katerimgradimo površje. Najpogostejše delitve prostora so regularne mreže, osmiška drevesaali neregularne tetraedske mreže. Cilj deljenja je najti celice, ki vsebujejo vzorce iz
  27. 27. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 72 (p) S LFSlika 5.4: Kriterij LFS in srednja os (modra barva)(a) ter rekonstruirano površje(b).P . Izbira celic je lahko usmerjena ploskovno (angl. surface-oriented) ali prostorsko(angl. volume-oriented).5.2.1.1 Ploskovno usmerjena izbira celicTa pristop se sestoji iz naslednjih osnovnih korakov: • razdelitev prostora v celice, • iskanje celic, skozi katere površje poteka, in • izračun površja v izbranih celicah. Postopek, ki so ga razvili Algorri s sodelavci [2], oklepajočo škatlo razdeli venakomerno vokselsko mrežo. V drugem koraku obdržimo le voksle, ki vsebujejovsaj 1 vzorčno točko. V tretjem koraku z zunanjimi pravokotniki izbranih vokslovsestavimo prvi približek površja. Da bi dobili zadovoljivejšo predstavitev površja,površje pretvorimo v trikotniško mrežo s povezovanjem normal v štirikotnikih. Ker jetrenutno zgrajeno površje kockasto, s pomočjo filtriranja z nizkim sitom izračunamo
  28. 28. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 73nove položaje oglišč trikotnikov, ki jih dobimo z izračunom uteženega povprečjastarega položaja točke in njenih sosednjih točk. Aproksimacijo površja izboljšamoz ukrivljanjem proti položaju vzorčnih točk. Postopek Hoppeja s sodelavci [50] temelji na funkciji razdalje, ki za vsako točkopovršja zaprtega objekta pove najmanjšo predznačeno razdaljo do površja. Točkena površju imajo oddaljenost 0, medtem ko je oddaljenost točk znotraj objektanegativna in oddaljenost točk zunaj objekta pozitivna. V prvem koraku algoritmazgradimo regularno vokselsko mrežo. Vokselske celice, ki jih izberemo v drugemkoraku, so tiste celice, ki vsebujejo nasprotno predznačene točke. To so točke,skozi katere poteka površje. V tretjem koraku zgradimo površje z algoritmomsprehajajočih kock (angl. marching cubes) [63], ki pri svojem delovanju uporabljašablone za gradnjo krp površja s pomočjo predznakov točk v vokselski celici. Nakoncu izbrane vokselske celice zamenjamo s krpami, ki jih povežemo v končnopovršje. Postopek, ki sta ga predstavila Bajaj in Bernardini [12], se od predhodnihpostopkov razlikuje v tem, da je prostorska delitev neregularna in prilagodljiva.Tudi ta metoda uporablja funkcijo razdalje. Prvotno aproksimacijo površjazgradimo v fazi predprocesiranja s pomočjo alfa-teles (angl. alpha-solids), vsakitočki pa izračunamo oddaljenost do tega površja. Ko so znane oddaljenostiza vsako točko, inkrementalno razdelimo prostor v tetraedre, kjer začnemo stetraedrom, ki oklepa celotno množico vzorcev. Nato z opazovanjem predznakovfunkcije razdalje v posameznih točkah poiščemo vse tetraedre, skozi katere potekapovršje, in zgradimo aproksimacijo površja. Ker površje ni točno, v vsakitočki izračunamo aproksimacijsko napako. Velike napake zahtevajo izboljšavotetraedrizacije, zato v takšne tetraedre vstavimo njihova središča in jih razdelimo.Postopek inkrementalnega dodajanja središč ustavimo, ko je aproksimacijska napakazadovoljivo majhna. Tetraedrizacija je Delaunayeva, kar zagotavlja uravnoteženost
  29. 29. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 74tetraedrov. Edelsbrunner in Mücke [34] sta predstavila algoritem alfa-oblik (angl. alpha-shapes). Prostor v prvem koraku razdelimo v Delaunayeve tetraedre, kjer so vzorčnetočke del Delaunayeve tetraedrizacije. V drugem koraku odstranjujemo tetraedre,trikotnike in robove z uporabo tako imenovanih α-krogel, ki nastopajo kot orodjeza brisanje. Vsak rob, trikotnik ali tetraeder je izbrisan, če je njegova minimalnaoklepajoča krogla manjša od α-krogle. Tako dobimo alfa-obliko, ki jo sestavljamnožica preostalih robov, ploskev in tetraedrov. V tretjem koraku algoritma izalfa-oblike izluščimo trikotnike, ki pripadajo površju z upoštevanjem pravila praznihkrogel. Trikotniku očrtamo dve krogli s polmerom α in če vsaj ena izmed njiju nevsebuje nobene druge točke, je trikotnik sprejet kot del površja. Največja težavaalgoritma je primerna izbira polmera α. Premajhen α vodi do nepovezanega površja,prevelik pa izpusti detajle.5.2.1.2 Prostorsko usmerjena izbira celicProstorski pristop sestavljajo naslednji koraki: • razdelitev prostora v celice, • odstranitev celic, ki ne vsebujejo vzorcev površja, in • izračun površja iz izbranih celic. Boissonatov volumetričen pristop [21] začne z Delaunayevo tetraedrizacjo.Tetraedri z dvema licema, s petimi robovi in s štirimi točkami ali tetraedri z enimlicem, tremi robovi in tremi točkami na konveksni lupini poliedra so izločeni. Zaraditega pravila je moč rekonstruirati le objekte brez lukenj. Tetraedre te vrste iterativnoodstranimo glede na zmanjševanje odločitvenih vrednosti. Odločitvena vrednostpredstavlja maksimalno razdaljo lica tetraedra od njegove očrtane krogle. Tako
  30. 30. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 75odstranimo tanke tetraedre Delaunayeve tetraedrizacije, saj običajno ležijo zunajobjekta in pokrivajo območja z več podrobnostmi. Algoritem se ustavi, ko vsetočke ležijo na površju ali če brisanje tetraedra z največjo odločitveno vrednostjo neizboljša vsote odločitvenih vrednosti vseh tetraedrov na obrobju. Pristop z γ-indikatorjem je opisal Veltkamp [81]. Indikator γ je vrednost, ki jopriredimo krogli skozi tri mejne točke poliedra in je lahko pozitivna ali negativna. rNjegovo absolutno vrednost izračunamo kot 1 − R , kjer je r polmer kroga, ki gaočrtamo mejnemu trikotniku, in R polmer krogle, ki jo očrtamo mejnemu tetraedru.Vrednost je pozitivna, če središče krogle leži znotraj poliedra in negativna, če jesredišče zunaj. Indikator γ je neodvisen od velikosti trikotnika oz. tetraedra na mejiin se tako prilagaja območjem spreminjajoče gostote točk. Lice, ki ga odstranimo, jelice s pozitivno vrednostjo indikatorja γ. Prvi korak algoritma je tvorba Delaunayevetetraedrizacije. V drugem koraku tvorimo uravnoteženo dvojiško drevo s tetraedri, kibodo odstranjeni, te pa uredimo po velikosti indikatorja γ. Tetraedri za odstranitevso istega tipa kot pri Boissonatovi metodi [21]. Iz tetraedrizacije odstranimotetraeder z največjo vrednostjo γ in osvežimo površje. Postopek ponavljamo, doklerne zmanjka tetreadrov, ki jih lahko odstranimo. Prednost algoritma je, da jeindikator γ prilagodljiv različnim gostotam porazdelitev, algoritem pa je primerenza gradnjo objektov brez lukenj. Prvi algoritem s teoretičnim zagotovilom za pravilnost površja je razvila Amentas sodelavci [3]. Predstavili so ε-vzorčenje oz. kriterij LFS in z uporabo srednje osipokazali, da je rekonstrukcija geometrijsko blizu originalnemu površju. Algoritemso poimenovali CRUST in je danes vsekakor najbolj popularen algoritem zarekonstrukcijo površja. Zanj obstajata dve osnovni različici, enoprehodna indvoprehodna. Pri dvoprehodni različici najprej zgradimo podmnožico Delaunayevetetraedrizacije in dobimo množico polov, iz katerih v kombinaciji z Voronoijevimdiagramom v drugem prehodu zgradimo novo Delaunayevo tetraedrizacijo. Nato
  31. 31. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 76poiščemo trikotnike, ki ležijo na površju (njihova oglišča so točke iz P ). Tistetrikotnike, ki vsebujejo vsaj eno oglišče pola, odstranimo. Pri enoprehodni različicialgoritma lahko izberemo trikotnike, ki ležijo na površju, že iz prvotne Delaunayevetetraedrizacije. Izhajamo iz dejstva, da so Voronoijeve celice pri ε-vzorčenjupodolgovate in tako dokaj natančno aproksimirajo normalo trikotnika znotraj celice.Nadgradnja algoritma, ki izboljša predvsem časovno zahtevnost in se spopade sšumom ter robnimi primeri, se imenuje PowerCRUST [4]. Razširitev algoritmaCRUST je razvil tudi Dey [26] in ga poimenoval COCONE. Osredotočil se je navelike množice vhodnih podatkov, na podvzorčenost, šum in robne primere (ostrirobovi, luknje).5.2.2 Rekonstrukcija površja s funkcijo razdaljeFunkcija razdalje vrne najkrajšo razdaljo katerekoli točke v prostoru do površja.Za zaprto površje so lahko razdalje pozitivne ali negativne, odvisno od tega, alitočka leži znotraj ali zunaj podprostora, omejenega s površjem. Poleg algoritmasprehajajočih kock je razdalja pomembna tudi pri algoritmih, ki uporabljajo srednjoos. Hoppe in sodelavci [50, 51] so predstavili algoritem, kjer površje predstavljamnožica ničel funkcije predznačene razdalje. V prvem koraku ocenimo normalnevektorje z uporabo k-najbližjih sosedov. Na podlagi tega zgradimo graf, izkaterega izluščimo evklidsko minimalno vpeto drevo, s katerim določimo orientacijonormalnih vektorjev, saj morajo le-ti biti usmerjeni bodisi v notranjost bodisi vzunanjost telesa. Na koncu izračunamo funkcijo razdalje za vsako točko, množiconičel funkcije razdalje pa vstavimo v algoritem sprehajajočih kock [63], ki zgradikončno površje. Pristop, ki so ga predstavili Bittar in sodelavci [17], prostor razdeli v voksle,s pomočjo funkcije razdalje pa aproksimira srednjo os. S postavitvijo krogel na
  32. 32. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 77srednjo os in s presečišči med kroglami opišemo končno površje. Učinkovit algoritem, ki je zmožen rekonstruirati površje z luknjami v fazipostprocesiranja in deluje na velikih oblakih točk, sta predstavila tudi Curless andLevoy [24].5.2.3 Rekonstrukcija površja z ukrivljanjemRekonstrukcija z ukrivljanjem površja (angl. warping) zgradi površje tako, danajprej tvori prvotno različico površja in ga nato ukrivi tako, da se čim bolj prilagodivhodni množici točk P . Proces si lahko predstavljamo kot napihnjeno žogo, v kateropostavimo točke P . Nato pričnemo iz žoge spuščati zrak, zato se žoga manjša, vsedokler se v celoti ne prilagodi iskanemu površju. Geometrijsko žogo predstavimokot trikotniško mrežo okrog oblaka točk. Za vsako točko začetne mreže poiščemozvezo s točko iz P , nato pa točke začetne mreže postavimo na položaj točke iz P .Med premikom točk na njihove nove lokacije se preoblikuje tudi preostanek mreže,rezultat pa je aproksimacija originalnega površja. Ideja je že relativno stara. Med zgodnjimi postopki najdemo aproksimacijo 2.5Dtrikotniške mreže, ki jo je predstavil Muraki [70]. Fizikalno orientiran pristop stapredstavila Szelinski in Tonnensen [80]. Pristop uporablja delce (angl. particles), kiso povezani z vzmetmi, vsak delec pa vsebuje nekaj parametrov, katerih vrednosti sespreminjajo med modeliranjem. Vsaka točka je predstavljena kot delec s parametri,površje pa se tvori z modeliranjem interakcije med delci (privlačnost in odbojnost).Nekatere metode za rekonstrukcijo površja uporabljajo nevronske mreže. Metoda, kista jo predstavila Baader in Hirzinger [11], uporablja Kohonenove nevronske mrežeza rekonstrukcijo v 2.5D, kjer je vsaka točka predstavljena kot nevron. Yu [86] jepredstavil robustnejši pristop, ki deluje tudi v 3D.
  33. 33. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 785.2.4 Inkrementalni algoritmi za rekonstrukcijo površjaOsnovna ideja inkrementalnih postopkov je zgraditi interpolacijsko ali aproksimacij-sko površje z upoštevanjem ploskovno usmerjenih lastnosti točk. Nekateri algoritmipričnejo graditi površje s poljubnim robom površja, ki ga tvorimo s povezavo dvehtočk, za kateri verjamemo, da sta sosednji točki na površju. Začetnemu robu innadaljnim robovom dodajamo trikotnike in tako iterativno širimo mejo tvorjenegapovršja. Ploskovno usmerjen algoritem [21] prične s tvorbo površja z najkrajšim robom,ki ga dobimo s povezavo točk iz P . Temu in nadaljnim robom, ki ležijo naobrobju površja, dodamo nov trikotnik tako, da lokalno ocenimo tangentno ravninos pomočjo robu sosednjih točk. Sosednje točke projiciramo na izračunano tangentnoravnino, potem pa tvorimo trikotnik tako, da eno izmed teh točk povežemo zobravnavanim robom. Izberemo tisto točko, ki z robom tvori trikotnik, katereganotranji koti so maksimalni. Algoritem se zaključi, ko ne najdemo več nobenegaprostega roba. Drug način tvorbe napravi grobi približek površja, nato pa površjedokončno oblikuje s sprotnim dodajanjem točk [66, 67]. Zelo popularni inkrementalni algoritmi so zagotovo algoritmi, temelječi nanapredujoči fronti. Najbolj znan algoritem te vrste je algoritem z vrtečo kroglo(angl. ball-pivoting), ki ga je predstavil Bernardini s sodelavci [15], kjer površješirimo z vrtenjem krogle okrog mejnih robov. Algoritem, kjer fronte predstavimo strodimenzionalno mejo delnega površja, je predstavil Scharf s sodelavci [75]. Začetnefronte ustvarimo kot zaprte trikotniške mreže, ki z dodajanjem točk rastejo in seraztezajo proti površju, dokler le-tega v celoti ne opišejo.
  34. 34. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 795.2.5 GručenjeZgodi se lahko, da en oblak točk predstavlja več ločenih oblik, kar lahko obstoječimpostopkom povzroči težave. Oblak točk razdelimo na posamezne dele, kjer vsakdel oblaka opiše samostojen objekt. Med postopki najdemo algoritem Fua inSanderja [44] ter Mencla in Müllerja [66, 67].
  35. 35. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 805.3 Algoritem PowerCrustAlgoritem PowerCrust je razvila Amenta s skupino [4] leta 2001 in je razširitevprvotne ideje [3]. Sodi v skupino algoritmov z delitvijo prostora. Algoritemzgradi površje tako, da najprej aproksimira srednjo os objekta, nato pa z inverznotransformacijo iz srednje osi rekonstruira površje. Algoritem je prvi rekonstrukcijskialgoritem z močnim teoretičnim ozadjem, ki zagotavlja, da lahko iz kakršnega koli(slabo vzorčenega, neenakomerno porazdeljenega) oblaka točk zgradimo površje.Teorija zagotavlja tudi, da je rezultat rekonstrukcije vodotesno površje, ki nepotrebuje dodatnega koraka krpanja lukenj po sami rekonstrukciji. Implementacijaalgoritma je robustna, algoritem je odporen tudi na šum. Trenutno je PowerCrusteden najpopularnejših algoritmov, zato bomo opisali osnove njegovega delovanja.Za opis postopka moramo razložiti pojme, kot so srednja os in transformacija srednjeosi, poli, srednja krogla in diagram moči.Srednja os objekta je množica točk, ki imajo vsaj dve najbližji točki na površju objekta, tako da se krogla, ki leži na srednji osi, površja dotakne vsaj dvakrat.Transformacija srednje osi (angl. medial-axis transform) ali MAT je pred- stavitev skeleta objekta, kjer objekt namesto s točkami na površju predstavimo s kroglami, ki v celoti ležijo v njegovi notranjosti. Prazna krogla je krogla, ki v svoji notranjosti ne vsebuje nobene točke površja S, srednja krogla pa je maksimalna prazna krogla, ki ni v celoti vsebovana v nobeni drugi prazni krogli. Transformacija srednje osi površja S je definirana kot množica vseh srednjih krogel. Središča srednjih krogel opišejo srednjo os objekta (slika 5.5).Voronoijev diagram v 2D smo opisali že v prvem delu naše disertacije. Voronoijev diagram v 3D razdeli prostor v konveksne poliedrične celice. Točka p ∈ P definira Voronoijevo celico kot delitev prostora v množico točk px , za katere velja, da je razdalja dist(px , p) manjša ali enaka razdalji med p in katero
  36. 36. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 81 koli drugo točko iz P . Točke p predstavljajo Voronoijeva središča, oglišča Voronoijevih celic pa Voronoijeve točke.Pol označuje skrajni Voronoijevi točki glede na Voronoijevo središče p, ki ležita na nasprotnih straneh površja (znotraj in zunaj objekta). Označimo ju s p+ oz. p− . Zanju velja, da je skalarni produkt med − − in − + negativen. − → pp pp −→Slika 5.5: Črna krivulja prikazuje površje, modra srednjo os in krožnicetransformacijo srednje osi. Če P predstavlja dovolj gost vzorec (ustreza vzorčenju LFS), so Voronoijevecelice na predelih večje gostote točk ozke, dolge in skoraj pravokotne na površje.Množica polov izloči vse Voronoijeve točke, ki so blizu površja S. Tako vektorja − + − → ppin − − aproksimirata normalo površja v točki p (slika 5.6). − → pp Ker je dual Voronoijevega diagrama Delaunayeva triangulacija oz. Delaunayevatetraedrizacija v 3D, Voronoijeve točke predstavljajo središča praznih krogel, kijih imenujemo tudi Voronoijeve krogle. Voronoijeva krogla je razpeta nad točkepodmnožice točk P Delaunayevega tetraedra, znotraj katere se ne nahaja nobenadruga točka iz P . Voronoijeve krogle s središči v polih imenujemo polarne krogle(angl. polar ball), množica polarnih krogel pa aproksimira transformacijo srednjeosi. MAT vsebuje krogle zunaj in znotraj objekta. Unija notranjih polarnih krogelopiše dober približek objekta, omejenega s površjem S, unija zunanjih krogel pa
  37. 37. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 82Slika 5.6: Voronoijeva celica točke p, pola p− in p+ ter normala površja v točki p.komplement objekta.Diagram moči (angl. power diagram) je utežen Voronoijev diagram, ki ga zgradimoiz množice polov z uteženo razdaljo, imenovano razdalja moči (angl. power distance).Z Bc,ρ označimo kroglo s središčem v c in polmerom ρ. Kroglo si predstavljajmokot točko c z utežjo ρ2 . Razdalja moči med običajno točko px v prostoru in Bc,ρ jedefinirana kot: dpow (px , Bc,ρ ) = d2 (c, px ) − ρ2 ,kjer d predstavlja navadno evklidsko razdaljo. Diagram moči v 2D in njegov dualnigraf, uteženo Delaunayevo triangulacijo (imenovano tudi regularna triangulacija),prikazuje slika 5.7. Ko se px nahaja znotraj krogle Bc,ρ , je dpow negativna, sicerpa pozitivna. Skorja moči (angl. power crust) predstavlja mejo med zunanjimiin notranjimi celicami diagrama moči. Dvodimenzionalno lice skorje ločuje celici,ki pripadata zunanjemu oz. notranjemu polu. Lica skorje moči ležijo med unijozunanjih in notranjih polarnih krogel blizu površja S. Z izrekom [3] je dokazano,da skorja moči interpolira površje S. Aproksimacija srednje osi je površje, kije podmnožica regularne triangulacije v 3D. Imenujemo jo oblika moči (angl.power shape), ki jo dobimo s povezovanjem polov sosednjih celic v diagramu moči(slika 5.8).
  38. 38. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 83Slika 5.7: Diagram moči (polne črte) in dualna regularna triangulacija (črtkane črte).Krogi predstavljajo polarne kroge v 2D.5.3.1 AlgoritemAlgoritem PowerCrust poteka v naslednjih korakih: 1. Zgradimo Voronoijev diagram iz točk P . 2. Izračunamo pole za vsako točko p ∈ P . 3. Iz polov zgradimo diagram moči. 4. Vsak pol označimo glede na to, ali leži zunaj ali znotraj objekta. 5. Določimo lica diagrama moči, ki ločujejo celice zunanjih in notranjih polov oz. skorjo moči (površje). 6. Določimo lica, ki povezujejo notranje pole in določajo obliko moči (aproksi- macija MAT). Pomemben korak je označevanje polov na zunanje in notranje z opazovanjemdiagrama moči. Definiramo naravni graf (angl. natural graph) nad celicamidiagrama moči. Dve celici povežemo, če si delita skupno dvodimenzionalno lice ali čepripadata poloma istega vzorca. Če velja predpostavka o dobrem vzorcu, označimo
  39. 39. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 84 Slika 5.8: Objekt in približek srednje osi (vir: Amenta).pole z upoštevanjem dveh dejstev. Prvo je to, da se zunanja in notranja polarnakrogla komaj dotikata druga druge, če se. Drugo dejstvo pa je, da sta dva polanad istim vzorcem vselej eden zunanji in drug notranji. Ker velikost celic omejimo sškatlo, ki zaobjame ves objekt (implementacija uporabi petkratnik oklepajoče škatleobjekta, je pol, ki leži na škatli, zagotovo zunanji. Če p1 predstavlja zunanji pol, kimeji na celico še neoznačenega pola p2 in je kot med tangentama njunih polarnihkrogel skozi presečišče velik, označimo pol p2 kot zunanji (slika 5.9). Sicer pol p2označimo kot notranji. Podobno velja, če je pol p1 že označen kot notranji in če jekot med tangentama v presečišču velik, je p2 prav tako notranji, sicer pa zunanji.Ker v praksi vzorec ni nujno dober, lahko takšno označevanje privede do napak,kar vodi do nepravilnega površja. V tem primeru uporabimo hevristike, s katerimi
  40. 40. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 85najprej označimo tiste pole, pri katerih lahko z gotovostjo ugotovimo njihov položajin šele nato označimo preostale. Slika 5.10 prikazuje notranje rekonstruiran objektnoge. Slika 5.9: Polarna kroga sosednjih celic in kot α med presečiščem. Algoritem Crust predpostavlja, da je površje gladko in vodotesno ter vzorčeno pokriteriju LFS. Če temu ni tako, lahko nastanejo težave pri označevanju polov in kotrezultat dobimo slabo aproksimacijo srednje osi ter posledično slabšo rekonstrukcijopovršja. Algoritem PowerCrust je odporen na šum. Z analizo polarnih krogel je napovršju možno puščati tudi luknje (če luknje predstavljajo lastnost objekta), nekajtežav pa ima algoritem pri rekonstrukciji ostrih robov. Slabost algoritma so nekolikivišji časi izvajanja.
  41. 41. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 86Slika 5.10: Notranje polarne krogle objekta (a) in skorja moči kot rekonstruiranopovršje (b) (vir: Amenta).
  42. 42. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 875.4 Algoritem BPAAlgoritem z vrtenjem krogle BPA (angl. ball-pivoting) spada v skupinoinkrementalnih algoritmov. Tvori interpolacijsko površje, ki ga širi z napredovanjemfronte s pomočjo vrtenja krogle, kjer površje nastaja z rastjo regij. Algoritem,ki ga bomo opisali, je predstavil Bernardini [15], temelji pa na ideji algoritma α-oblik [34]. Na vhodu poleg koordinat točk prejme še točkovne normale, s katerimi sipomagamo pri tvorbi trikotnikov in v situacijah slabega vzorčenja. Algoritem BPAbomo predstavili zato, ker je trenutno eden najuspešnejših algoritmov z napredujočofronto. Predpostavljamo, da je površje S vzorčeno dovolj gosto, tako da v množici točkP z vrtenjem krogle vselej najdemo točko (kriterij vzorčne poti). Algoritem prične spostavitvijo krogle tako, da na njenem obodu ležijo natanko tri točke. Veljati mora,da se znotraj krogle ne nahaja nobena druga točka iz P . Tri začetne točke pripadajozačetnemu ali semenskemu trikotniku (angl. seed triangle), kjer njegovi robovipredstavljajo napredujočo fronto. Fronti dodajamo trikotnike tako, da vzamemoenega izmed njenih robov in okrog njega zavrtimo kroglo. Pri tem mora krogla vesčas na svojem obodu ohraniti položaj točk roba, saj ta predstavlja os vrtenja. Medvrtenjem lahko najdemo več točk, vzamemo pa tisto, pri kateri krogla ne vsebujenobene druge točke. Nato tvorimo trikotnik in fronto razširimo z novimi robovi.Postopek ponavljamo, dokler ne zmanjka robov. Slika 5.11 prikazuje delovanjealgoritma BPA na ravnini. Krog s polmerom ρ vrtimo od točke do točke in gradimorobove (slika 5.11a). Če je gostota vzorčenja premajhna, nekaterih robov ni mogočeustvariti, zato nastanejo luknje (slika 5.11b). Če zaradi ukrivljenosti nekaterih točkni mogoče obiskati, se zgodi, da ne rekonstruiramo detajlov (slika 5.11c). Napredujoča fronta je predstavljena kot zbirka povezanih seznamov robov.Začetna fronta nastane ob tvorbi semenskega trikotnika kot skupek njegovih robov.
  43. 43. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 88Slika 5.11: Delovanje algoritma BPA v 2D pri dovolj gostem vzorčenju (a), pripremalo gostem vzorčenju (b) in pri preveliki ukrivljenosti površja (c).Vsak rob pi pj je predstavljen s točkama pi in pj . Poleg tega rob hrani še nasprotnotočko po , ki je središče očrtane krogle K priležnega trikotnika, in povezave dososednjih robov na fronti. V algoritmu nastopajo tri vrste robov: • aktivni robovi so tisti, ki še niso bili uporabljani za širitev površja z vrtenjem krogle, • mejni robovi so tisti, pri katerih z vrtenjem krogle nismo našli nobene točke, in • zamrznjeni robovi služijo za pohitritev delovanja algoritma, zato se lahko obnašajo kot aktivni ali neaktivni.5.4.1 Preiskovanje prostoraAlgoritem za svoje delovanje potrebuje iskanje v prostoru. Gre za preiskovanjebližnje okolice, zato algoritem BPA uporablja enakomerno delitev prostora, kjer je
  44. 44. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 89vsaka celica prostorska kocka oz. voksel s stranico δ = 2ρ. Točke so shranjene vurejenem seznamu, točke znotraj voksla pa tvorijo povezan podseznam. Vsak vokselvsebuje kazalec na začetek seznama točk ali kazalec do naslednjega podseznama,če je le-ta prazen. Če imamo dano točko p, lahko voksel, v katerem se p nahaja,najdemo tako, da koordinate točke delimo z ρ. Točke, ki so kandidati za tvorbonovega trikotnika, so tiste, ki so od p oddaljene za 2ρ. Podatkovna struktura zvokselsko mrežo omogoča konstanten dostop do točk.5.4.2 Izbira semenskega trikotnikaSemenski trikotnik predstavlja začetek rasti površja. Izberemo ga na sledeč način: • poiščemo poljubno točko pi , ki še ni del površja, • vsi pari pa in pb naj bodo ustrezno oddaljeni od pi , • zgradimo potencialne semenske trikotnike pi pa pb , • preverimo, če je normala trikotnika konsistenta z normalami točk (enaka usmeritev izven objekta), • preverimo, če se krogla s polmerom ρ in s središčem v zunanjem delu polprostora dotakne vseh treh točk in ne vsebuje nobene druge točke, • ustavimo se, ko smo našli ustrezen semenski trikotnik. Ker lahko imamo nepopolne podatke ali pa je prisoten šum, je pomembnoizbrati učinkovito strategijo za iskanje semenskega trikotnika. Dobra izbirasemena omogoča, da algoritem lokalno zgradi največje možno površje. Problempredstavljajo točke šuma, ki so od rekonstruiranega površja oddaljene za nekolikoveč kot 2ρ. Če z njimi tvorimo seme, postopoma zgradimo neželjene dele površja,ki ležijo blizu pravilnega površja. Neželjena površja je sicer možno odstraniti v fazipost-rekonstrukcije, vendar je bolje, če se lahko temu izognemo in prihranimo čas.
  45. 45. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 90Rešitev je, da se pri iskanju semenskega trikotnika omejimo le na eno točko za vsakvoksel. Tako bomo našli seme, s katerim je možno zgraditi površje, ki se raztezačez več vokslov. Za dani voksel izračunamo povprečno točkovno normalo →, ki −npredstavlja povprečno normalo površja v dani regiji. Ker želimo, da naša kroglapotuje po zunanji strani površja, se pri točkah omejimo na tiste, katerih projekcijena → so večje in pozitivne. Semenske trikotnike iščemo v nepraznih vokslih. Ko − nnajdemo semenski trikotnik, pričnemo z vrtenjem krogle graditi površje. Ko vrtenjeni več mogoče (vsi robovi fronte so mejni), nadaljujemo z iskanjem semena tam, kjersmo končali, pri čemer preskočimo vse voksle, pri katerih naletimo na točko, ki je žedel trikotniške mreže. Algoritem se zaključi, ko semena ne najdemo več.5.4.3 Vrtenje kroglePostopek vrtenja krogle se prične takoj, ko imamo semenski trikotnik. Naj bopi pj rob fronte, ki s točko po tvori trikotnik ijo z normalo − . Temu je očrtana → nkrogla s polmerom ρ (slika 5.12). Os vrtenja krogle pri vrtenju je rob pi pj , kileži na osi z in je usmerjen proti gledalcu. Krogla s središčem cijo je v začetnempoložaju prazna, zato je trikotnik ijo lahko semenski trikotnik ali pa je bil zgrajenz vrtenjem krogle v predhodnih korakih. Koordinatni sistem je postavljen tako, dacenter krogle cjio leži na pozitivni strani osi x. Vrtenje krogle je zvezno pomikanjekrogle po površju, kjer je krogla ves čas v stiku z robom pi pj . Zaradi stalnegastika z njim središče cijo oriše krožno trajektorijo γ, ki leži na ravnini, pravokotni 1na rob pi pj in poteka skozi njegovo srednjo točko pm = (p 2 i + pj ) (točka pm nasliki 5.12 leži v izhodišču koordinatnega sistema). Središče vrteče krogle je v točkipm , polmer pa dist(cijo , pm ). Med gibanjem se krogla lahko dotakne točke pk . Čeob vrtenju ne najde nobene točke, rob pi pj označimo kot mejni. Sicer s točkami pi ,pj in pk tvorimo trikotnik ijk , krogla pa v svojem zaključnem položaju ne vsebujenobene druge točke, zato je pripravljena nadaljevati vrtenje kot nova začetna krogla.
  46. 46. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 91 V praksi najdemo pk tako, da poiščemo vse točke, ki so od pm oddaljene zanajveč 2ρ. Za vsako najdeno točko px izračunamo središče krogle cx , ki se dotikaoglišč pi , pj in px , če seveda takšna krogla obstaja. Vsako središče cx leži na krožnitrajektoriji γ okrog pm , ki ga dobimo s presečiščem krogle s centrom v px s krožnicoγ. Med vsemi točkami cx izberemo tisto, ki je prva v smeri trajektorije (torej tisticx , ki vrne najmanjši kot med premico lx in trikotnikom ijo ).Slika 5.12: Vrtenje krogle okrog roba pi pj (pravokoten na sliko) najde točko pk , skatero ustvarimo nov trikotnik.5.4.4 Operatorja združevanja in lepljenjaAlgoritem BPA obdela vse možne situacije s pomočjo dveh preprostih topološkihoperatorjev, ki med dodajanjem trikotnikov skrbita za obnašanje front: • operator združevanja (angl. join), • operator lepljenja (angle. glue).
  47. 47. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 92 Slika 5.13: Operator združevanja doda trikotnik ijk in osveži fronto. Operator združevanja je preprostejši: uporabi se, ko kroglo zavrtimo okrog robapi pj in se dotaknemo še neuporabljane točke pk . Operator zgradi nov trikotnik ijkin lokalno spremeni fronto tako, da odstrani rob eij in fronti doda robova eik in ekj(slika 5.13). Če je pk že del trikotniške mreže, lahko nastopita dva primera: 1. pk je notranje oglišče trikotniške mreže, ki ne leži na fronti. Takšnega trikotnika ne moremo tvoriti, zato rob eij predstavlja mejni rob. 2. pk pripada fronti. Če je normala trikotnika ustrezna, izvedemo operator združevanja in ustvarimo trikotnik ijk . Operator lepljenja poskrbi, da se vsak rob v površju nahaja le enkrat. AlgoritemBPA tvori usmerjene robove. Zgradimo lahko trikotnik z robom, ki pripadadrugi fronti, zato moramo poskrbeti za odstranitev parov prekrivajočih se robov znasprotno usmerjenostjo (algoritem ne tvori isto usmerjenih prekrivajočih se robov).Če rob ekj že leži na fronti (slika 5.13), operator lepljenja ne naredi nič drugega kotto, da odstrani oba robova ekj in ejk ter ustrezno preuredi fronto. Možni so štirjerazlični primeri, kot prikazuje slika 5.14. Če oba robova tvorita zanko, ju odstranimo(slika 5.14a). Če robova pripadata isti zanki in sta sosednja, ju prav tako odstranimoin skrajšamo zanko (slika 5.14b). Če robova nista sosednja in pripadata različnima
  48. 48. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 93zankama, zanki združimo (slika 5.14c). Zanko razdelimo takrat, ko robova pripadataisti zanki in nista sosednja (slika 5.14d). Slika 5.14: Operator lepljenja v različnih situacijah. Če želimo algoritem uporabiti za velike količine podatkov, potrebujemorazširitev, ki varčno upravlja s pomnilnikom. V hitri pomnilnik shranimo vsepodatke, ki so trenutno v uporabi za obdelavo, in odstranimo tiste, ki jih več nepotrebujemo. Uporabimo dve osno-poravnani ravnini π0 in π1 , s katerima definiramoaktivno območje vrtenja. Začetno π0 postavimo tako, da nobena točka ne ležipod njo, π1 pa nad π0 , oddaljeno za neko uporabniško definirano razdaljo. Koustvarimo nov rob, preverimo, če sta njegovi krajišči nad π1 . Takrat rob označimo
  49. 49. POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 94za zamrznjen. Ko so vsi robovi v vrsti zamrznjeni, premaknemo ravnini π0 in π1navzgor ter pretvorimo vse zamrznjene robove v aktivne. Za rekonstrukcijo z neenakomerno vzorčenim površjem avtor predlaga večkratniprehod z različnimi polmeri krogle. Tako uporabnik kot vhodni parameter definiraseznam n polmerov {ρ0 , ..., ρn−1 }, kjer velja ρi < ρi+1 , i < n − 1. Za vsak polmerρi algoritem prične vstavljati točke v mrežo vokslov velikosti δ = 2ρi . Algoritemteče, dokler v vrsti obstajajo aktivni robovi. Ko se postopek ustavi, se postavimona naslednji polmer ρi+1 in se sprehodimo skozi vse mejne robove ter preverimo, čevsak rob s svojo nasprotno točko po tvori pravilen semenski trikotnik za kroglo spolmerom ρi . Če to drži, potem rob dodamo v vrsto aktivnih robov in nadaljujemos tvorbo površja z vrtenjem krogle.
  50. 50. Poglavje 6Prebirni algoritem za rekonstrukcijopovršjaAlgoritem, ki smo ga razvili, lahko uvrstimo v skupino algoritmov z napredujočofronto, ki fronto propagira s prebiranjem. Temelji na predpostavki, da je originalnopovršje S vzorčeno po kriteriju vzorčne poti. Parameter r mora biti takšen, davsaka krogla s središčem v p ∈ P in polmerom r vsebuje vsaj en vzorec. Našpristop na prvi pogled deluje podobno kot algoritem BPA [15], vendar se precejrazlikuje. Pri algoritmu z vrtečo kroglo naslednjo točko p poiščemo z vrtenjem krogleza vsak aktiven rob fronte. Točko p, s katero ustvarimo nov trikotnik, izberemoz upoštevanjem praznosti krogle. Kandidate med točkami iščemo v prostoru,zato potrebujemo trodimenzionalno podatkovno strukturo, primerno za iskanje(algoritem BPA uporablja delitev prostora z voksli in dinamične sezname za vsakvoksel). Naš algoritem se problema loteva iz nasprotne strani. Po shemi prebiranjanaslednjo točko p obiščemo ob pomiku prebirne ravnine, točki pa poiščemo najbližjirob fronte. Ker dejansko opazujemo projekcijo fronte na ravnino, potrebujemo zaiskanje dvodimenzionalno podatkovno strukturo. Zaradi razpršenosti vstavljanjanastopi veliko situacij, ki jih je potrebno skrbno preučiti. Algoritem tvori vodotesnopovršje. 95
  51. 51. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 96 Slika 6.1: Predogled delovanja algoritma na krogli (a) in obroču (b, c). Opazujmo drsenje prebirne ravnine skozi površji krogle in stožca, ki poteka odgledalca proti sliki pravokotno na njo (slika 6.1). Preseki med prebirno ravninoin površjem orišejo krivulje. Ob postankih v nekaj točkah vidimo, da presečiščas kroglo vrnejo le eno krivuljo (slika 6.1a). To je krožnica, ki ima na začetkupolmer 0, nato do sredine krogle njen polmer doseže vrednost r (zadnji prerez nasliki), potem pa krožnica na enak način tudi izgine. Obroč lahko opazujemo izveč gledišč. V primeru na sliki 6.1b kot presečišče najprej dobimo eno krožnico, kipredstavlja vrh obroča. Kaj kmalu se v preseku pojavita dve krivulji, kjer zunanjakrožnica predstavlja zunanji del obroča (črna barva), notranja pa njegov notranjidel (rdeča barva). Zunanja krožnica na polovici prebiranja doseže svojo maksimalnovelikost, notranja pa minimalno. Sledijo prerezi, kjer se krožnici spet bližata, doklerne dobimo spet ene krožnice, ki izgine, ko dosežemo dno obroča. Če izberemo
  52. 52. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 97gledišče na sliki 6.1c, opazimo, da prerez sprva oriše točko in nato krivuljo, kiraste ter do polovice prebiranja preide v dve ločeni krivulji. Iz opazovanja presekovkrivulj se je rodila ideja algoritma, ki bo temeljil na tvorbi krivulj in obenem tvorilpovršje. Krivulje bomo opisali z napredujočimi frontami, površje pa bo nastajaloob spremembah krivulj oz. napredujočih front. Vidimo, da je napredujoča fronta vnekem trenutku nastala, se razvijala (ožila in širila) in se zaključila. Iz opazavanjaso razvidni vsaj trije dogodki v življenju front [64]: • odprtje fronte, • spreminjanje fronte in • zaprtje fronte.V nadaljevanju naloge bomo opisali naš algoritem, ki tvori površje z obravnavoomenjenih dogodkov, se srečali z robnimi problemi in predstavili rezultate, najprejpa bomo predstavili gradnike, ki jih potrebujemo za razvoj algoritma.6.1 GradnikiGradniki, ki jih naš algoritem potrebuje, so: • napredujoča fronta, ki predstavlja mejo tvorjenega površja, • iskanje najbližje točke, ki vrne mesto vstavljanja trikotnikov, • hierarhična struktura, ki vodi vsebnostne relacij med frontami.6.1.1 Napredujoča frontaNapredujočo fronto definiramo kot množico točk F = {p0 , p1 , p2 , .., pn−1 }. Frontalahko nastopa v dveh stanjih:
  53. 53. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 98 • Fronta je neaktivna takrat, kadar s točkami F ni možno zgraditi trikotnika. Neaktivna fronta vsebuje največ dve točki (slika 6.2a). Neaktivne fronte na slikah obrobimo s črtkano elipso. • Fronta je aktivna takrat, ko množica točk F predstavlja enostavni mnogokotnik s konkavnimi in konveksnimi oglišči brez lukenj. Aktivno stanje predstavlja delujočo fronto (slika 6.2b). Aktivne fronte lahko gnezdimo. Fronte na lihem nivoju imenujemo zanke, fronte na sodem nivoju gnezditve pa prstani. Zanke orientiramo v pozitivni smeri oz. v nasproti smeri urinega kazalca (angl. counter-clockwise ali CCW), prstane pa v negativni oz. v smeri urinega kazalca (angl. clockwise ali CW). Zanke bomo risali s črno, prstane pa z rdečo barvo (slika 6.3). Aktivne fronte bomo zaradi lažje predstave večkrat narisali kot zaprte krivulje, kadar bomo razlagali splošno idejo posameznega koraka, čeprav vemo, da gre za mnogokotnike. (a) (b) Slika 6.2: Neaktivne (a) in aktivne fronte (b). Vsaka fronta zasede obe stanji, pri čemer je začetno stanje vselej neaktivno.Fronte bomo večinoma opazovali kot projekcije na ravnino xy. Izrecno bomopovedali, kdaj upoštevamo projekcijo v 2D in kdaj bomo pri delu upoštevali dejanske
  54. 54. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 99 Slika 6.3: Zanki F0 in F2 ter prstan F1 . Puščice kažejo orientacijo front.3D koordinate. Enako velja za računanje razdalj med točkami in računanje kotovmed robovi front.6.1.2 Hierarhično vodenje frontPri zelo razgibanih površjih se lahko zgodi, da imamo veliko gnezdenj, torej je velikozank in prstanov. Za uspešno rekonstrukcijo moramo poznati odnose med njimi.Slika 6.4 prikazuje možno stanje med izvajanjem algoritma. Podatkovna strukturaza predstavitev medsebojnega položaja front je drevo, ki ga poimenujemo drevorelacij RT . Relacija oče-sin označuje vsebnostni odnos med frontami (slika 6.5),kjer fronta v očetovskem vozlišču v svoji notranjosti vsebuje fronto v sinu. Korengrafa kaže na fronte 1. nivoja, povezave med frontami so dvosmerne, tako da lahkodostopamo do višjih oz. nižjih nivojev. Vozlišče vstavimo v RT takrat, ko tvorimo aktivno fronto. Mesto v RTpričnemo iskati v korenu drevesa. Z vsebnostnim testom nove fronte s frontami1. nivoja najdemo ustrezno poddrevo. Za vsebnostni test zadostuje preverjanjevsebnosti ene točke nove fronte v mnogokotniku, kjer vsebnost računamo brezupoštevanja orientacije mnogokotnikov. Če vsebnosti ne najdemo, fronto dodamona konec seznama front 1. nivoja. Nasprotno, če poddrevo najdemo, postopek
  55. 55. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 100Slika 6.4: Gnezdenje front. S črno so označe zanke, z rdečo prstani, modra barva paoznačuje fronto, ki jo vstavljamo.preverjanja rekurzivno ponovimo za naslednji nivo. Vozlišče iz drevesa odstranimoob zaprtju fronte. Spreminjanje drevesa bomo bolj natančno opisali pri posameznihdogodkih v nadaljevanju.Slika 6.5: Predstavitev front z drevesom. Z modro je prikazana vstavljena fronta,puščica prikazuje iskanje, siva oglišča pa so tista, kjer smo izvajali vsebnostni test.6.1.3 Iskanje najbližjih točkKo vstavimo točko p, moramo poiskati fronte, ki jih bomo spremenili. Iskanje točkje eno najbolj raziskanih področij računalniške geometrije, med katerimi najdemoiskanje najbližje točke [8, 14, 73], iskanje k-najbližjih točk [82, 83] ali iskanje točk
  56. 56. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 101znotraj določenega intervala [18, 19]. Nas zanimajo točke, ki ležijo znotraj krožnices središčem v p s polmerom r. Ker v algoritmu lahko nastopa več front hkrati, najbo v času iskanja prisotnih nF front. Edine točke, ki jih hranimo v iskalni strukturi,so tiste, ki ležijo na frontah. Formalno iščemo točke pk ∈ Fj , j = 0, .., nF − 1, kjerje 2D razdalja dist(pk , p) ≤ r. Za iskanje točk uporabimo dvonivojsko iskalno podatkovno strukturo z delitvijoravnine na trakove v 1. nivoju in seznamom s preskakovanjem na drugem nivoju [89].Trakovi so med seboj enaki, strukturo prikazuje slika 6.6. Oceniti moramo, kolikotočk bo v povprečju prisotnih med prebiranjem, s tem pa določiti število trakov innjihovo širino. Optimalno število trakov nT določimo s formulo, povzeto po [89]: 1 √ ln ln n nT = 0.6 n ln nŠirino traku tw določimo trivialno: bmax −bmin tw = nT ,kjer sta bmin in bmax koordinati y oklepajočega pravokotnika v prečnem prerezuoblaka točk P . Trakove predstavimo s sekljalno tabelo, kar omogoča dostop do ustreznega trakuv konstantnem času, kjer je ključ iskanja koordinata y točke p. Vsak trak jeimplementiran kot determinističen seznam s preskakovanjem, kjer končno mestotočke p v drevesu najdemo s koordinato x. Časovna zahtevnost vstavljanja inbrisanja točke p je logaritemska.Iskanje točk pk znotraj krožnice s polmerom r poteka po naslednjih korakih: 1. Točko p navidezno vstavimo v iskalno strukturo, pri čemer si zapomnimo identifikator vodoravnega traku Ti (Ti = T1 na sliki 6.6) in položaj v seznamu.
  57. 57. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 102 2. S krožnico polmera r s središčem v p ugotovimo, katere trakove bomo morali preiskati. Trak pod Ti označimo s Ti+ , trak nad Ti pa s Ti− (Ti− = T1 , Ti+ = T2 na sliki 6.6). 3. V vsakem od trakov Ti− , .., Ti , .., Ti+ poiščemo skrajni točki pmin z xmin ≥ (x − r) in pmax z xmax ≤ (x + r), ki ležita zelo blizu krožnice ali na krožnici vodoravno desno ali levo od p. Točke, ki jih v danem traku iščemo, se nahajajo med tema točkama. Sledi sprehod po seznamu od pmin do pmax za vsak trak, kjer vsaki točki pj izračunamo 2D razdaljo dist(pj , p). Če je dist(pj , p) ≤ r, točko pj dodamo v seznam rešitev. Seznam rešitev označimo z C = {pr0 , pr1 , .., prk−1 } in je urejen po oddaljenostiod p. Slika 6.6: Iskalna struktura.
  58. 58. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 1036.2 Osnovne operacije algoritmaV tem poglavju bomo opisali pogoje za nastanek, odprtje in zaprtje fronte ter kriterijza vstavljanje trikotnika v fronto.6.2.1 Odprtje fronteAlgoritmi, ki uporabljajo napredujoče fronte, zahtevajo določitev prvega elementa,s katerim se začne tvorba površja. Tak element imenujemo seme (angl. seed).Največkrat je to semenski trikotnik [15], ki ga tvori tudi naš algoritem. Pogoj zanjegov nastanek so tri nekolinearne točke. Fronta nastane, ko vstavljanje točke p ne najde točk v bližini. Začetno stanjevsake fronte je neaktivno, fronta nastopa le kot shramba točk. Odprtje fronte nastopitakrat, ko fronta preide iz neaktivnega v aktivno stanje. Takrat tvorimo semenskitrikotnik in fronto vstavimo v drevo RT . Orientacija oglišč in s tem smer normalesemenskega trikotnika zavisi od nivoja gnezdenja. Če je fronta zanka, normala kaže vpolprostor, ki ga je prebirna ravnina že obiskala, sicer pa v polprostor na drugi straniprebirne ravnine. Ker je algoritem namenjen rekonstrukciji vodotesnih površij, nepričakujemo primerov, kjer bi bil semenski trikotnik pravokoten na prebirno ravnino. Primer nastanka fronte prikazuje slika 6.7. Najprej vstavimo točko p0 , ki zaradiprazne okolice ustvari fronto F0 = {p0 } (slika 6.7a). Točka p1 pade v neposrednobližino točke p0 , zato jo dodamo fronti F0 = {p0 , p1 } (slika 6.7b). Točka p2 jenajbližje točki p1 , vendar fronta F0 ne more postati aktivna zaradi kolinearnostiprojekcij točk p0 , p1 in p2 , zato s točko p2 tvorimo novo fronto F1 = {p2 } (slika 6.7c).Ko vstavimo točko p3 , odpremo fronto F0 (slika 6.7d). Rezultat vstavljanja staaktivna fronta F0 = {p0 , p1 , p3 } in neaktivna fronta F1 = {p2 }. Vstavljanje fronte vRT vidimo na slikah 6.4 in 6.5.
  59. 59. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 104Slika 6.7: Nastanek fronte (a in c), dodajanje točke v fronto (b) in odprtje fronte(d).6.2.2 Dodajanje trikotnikaVstavljanje točke spremeni fronto. Fronto ožimo, ko vstavljajoča točka p leži vnjeni notranjosti, sicer fronto širimo. Če p pade neposredno na rob fronte, rob (inpriležen trikotnik) razbijemo na dva dela. Če p sovpada s točko fronte, vstavljanjeza točko p izpustimo. Položaj točke glede na fronto preverimo z vsebnostnimtestom točka-mnogokotnik [49, 73], pri čemer upoštevamo tudi nivo gnezdenjafronte (notranjost prstana je dejansko zunanjost mnogokotnika, notranjost zankepa navadna notranjost). Fronto spremenimo s tvorbo novega trikotnika z najbližjimrobom fronte in točko p. Kje in koliko trikotnikov dodamo, pove kot ϕ, ki je kot med → −bisektorjem b kota pc+ pc pc− in vektorjem − p (slika 6.8). S pc označimo najbližjo p→ ctočko na fronti, s pc− točko pred pc in s pc+ točko za pc glede na vrstni red v fronti. → −Kot med bisektorjem b in nosilko roba pc− pc označimo z α. Če je kot ϕ < |α|,je možno tvoriti dva trikotnika naenkrat. Ker so rezultat lahko tanki trikotniki, αpostavimo mejo s kotom β (β = 5 ), ki je določen eksperimentalno. Tvorba ima 3možnosti:
  60. 60. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 105 Slika 6.8: Določanje vstavljanja. • če je ϕ > +β (slika 6.9), tvorimo nov trikotnik pc pc+ pi in v fronto dodamo točko pi (F = {.., pc− , pc , pi , pc+ , ..}), • če je ϕ < −β (slika 6.10), tvorimo nov trikotnik pc− pc pj in v fronto dodamo točko pj (F = {.., pc− , pj , pc , pc+ , ..}), • če je ϕ ≤ |β| (slika 6.11), lahko tvorimo dva trikotnika pc− pc p in pc pc +pk , točko pc pa odstranimo iz fronte (F = {.., pc− , pk , pc+ , ..}). Enako storimo tudi v primeru, ko se p nahaja znotraj fronte. Če je p od robafronte oddaljena za manj kot toleranca ε, preverimo, ali bi morda s p razdeliliobstoječ trikotnik. Toleranca zavisi od polmera r, kjer velja ε r.6.2.2.1 Uravnavanje frontePo vstavljanju točke pokličemo hevristične funkcije, ki pomagajo zakrpati morebitneodprtine levo in desno od vstavljenega trikotnika. Želimo, da je fronta čim bližjeprebirni ravnini, da lahko brez večjih skrbi pri iskanju točk uporabljamo 2D razdalje.Uporabimo enak pristop, kot smo ga uporabili pri algoritmu omejene Delaunayeve
  61. 61. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 106 Slika 6.9: Tvorba trikotnika pc ppc+ . Slika 6.10: Tvorba trikotnika pc− ppc .triangulacije [92], kjer kote med robovi front računamo v 3D.6.2.3 Zaprtje fronteZaprtje fronte je dogodek, ki nastopi ob zaključku dela površja. Situacij, ki privedejodo zaprtja fronte, je lahko več. Slika 6.12a prikazuje situacijo, ko vstavljena točka p vsvoji bližnji okolici najde vse točke, ki ležijo na fronti F, točka p pa se nahaja znotrajF. Fronto zapremo tako, da s točko p in vsakim robom F zgradimo trikotnik. Vpraksi se lahko zgodi, da vseh trikotnikov ni možno zgraditi na preprost način, zatoraje uporabimo algoritem za triangulacijo enostavnega mnogokotnika [93]. Rezultatzaprtja vidimo na sliki 6.12b. Fronto odstranimo iz drevesa RT .
  62. 62. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 107 Slika 6.11: Tvorba trikotnikov pc− ppc in pc ppc+ . Druga situacija, ki pripelje do zaprtja fronte, je navadno vstavljanje. Gradnjitrikotnika s točko p sledi preverjanje s hevrističnimi funkcijami, ki z računanjemkotov med robovi fronte vstavijo dodatne trikotnike. Postopek lahko vstavi tolikotrikotnikov, da fronto zapremo. Tretja možna situacija nastopi ob deljenju fronte, ki ga bomo opisali vnadaljevanju. Pri deljenju lahko nastane nova fronta, ki jo, če je dovolj majhna,prav tako zapremo. Pričnemo v točki pi , ki je postavljena tako, da predstavlja prvotočko nove fronte. Če je dist(pi− , pi ) ≤ r in dist(pi+ , pi ) ≤ r, dodamo trikotnik pi− pi pi+ , pi pa zbrišemo iz fronte. Nato se postavimo v pi+ in pi− , kjer enakopreverimo za vsako točko posebej. Trikotnik tvorimo s krajšimi robovi. Postopekponavljamo, dokler obstajajo robovi z dolžino ≤ r. Če pridemo do konca, frontozapremo. Primer vidimo na sliki 6.13.6.3 Potek algoritmaPrebirni algoritem zahteva pripravo podatkov. Točke uredimo glede na koordinatoz. V primerih, ko se večja skupina točk nahaja na ravnini, je zaželjeno, da
  63. 63. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 108 Slika 6.12: Zaprtje fronte.Slika 6.13: Vstavljanje trikotnikov s preverjanjem razdalj (a in b) in zaprtje fronte(c).vstavljamo točke lokalno blizu predhodno vstavljenih točk, saj tako zmanjšamoštevilo združevanj in osamelih točkovnih front. Za točke urejene množice P najvelja: pi < pj , e(zi < zj ) ∨ (zi = zj ∧ yi < yj ) ∨ (zi = zj ∧ yi = yj ∧ xi < xj ),kjer je i < j. Prebirno premico postavimo v p0 . Trenutno obiskano točko označimos p, ki gre skozi naslednje korake: 1. Točki p poiščemo bližnjo okolico C.
  64. 64. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 109 2. Filtriramo C. 3. Točko p vstavimo.6.3.1 Filtriranje bližnjih točkIskanje bližnje okolice smo že opisali v podpoglavju 6.1.3. Rezultat iskanja bližnjeokolice vrne seznam k točk C, urejen po oddaljenosti od točke p. Bližnje točkenajprej uredimo v skupine po pripadnosti glede na fronto, zato G preoblikujemov obliko C = {C0 , C1 , .., Cn−1 }, kjer n predstavlja število različnih front. Z Ci paoznačimo skupino vseh točk, ki pripadajo fronti Fi . Upoštevati moramo dejstvo,da je lahko polmer r prevelik za dano vzorčenje. V tem primeru bomo našli prevečbližnjih točk, zato moramo nujno odstraniti tiste, ki so odveč. Točke v Ci razdelimov intervale znotraj fronte Fi , če je fronta Fi aktivna. Z Cij označimo skupino točkj−tega intervala fronte Fi , Ci pa opišemo z Ci = {Ci0 , Ci1 , .., Cimi −1 }, kjer je mištevilo podskupin v Ci . Skupino točk neaktivne fronte Fi označimo z Ci0 . Poglejmo si primer na sliki 6.14. Iskanje točk vrne množico točk C ={p2 , p1 , p3 , p4 , p0 , p10 , p11 , p7 , p8 } (slika 6.14a). Razdelitev na skupine glede napripadnost frontam vrne C0 = C, saj vse točke pripadajo fronti F0 . Nato C0razdelimo v zvezne intervale glede na vrstni red v F0 in kot rezultat dobimo 0 1 2C0 = {p0 , p1 , p2 , p3 , p4 }, C0 = {p7 , p8 } in C0 = {p10 , p11 } (slika 6.14b). Iz primeralahko sklepamo, da je edina skupina točk, s pomočjo katerih bomo fronto spreminjali 0(in pri tem ohranili enostavnost mnogokotnika), skupina C0 . Za odstranitevnezaželenih skupin točk vpeljemo pojem vidnosti, ki smo ga spoznali že pri omejeniDelaunayevi triangulaciji. Množico omejitev Ec nadomestimo z napredujočimifrontami in vidnost definiramo na naslednji način: Točki pi in pj sta medsebojno vidni, če rob pi pj ne seka nobenega robanapredujočih front.
  65. 65. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 110Slika 6.14: Razdelitev točk na intervale (a) in odstranitev točk z upoštevanjemvidnosti (b). Iz skupin Cij izločimo vse točke, ki niso vidne iz p. Izločanje v primeru na 1 2sliki 6.14a zbriše skupini C0 (p7 , p8 ) in C0 (p10 , p11 ) ter točko p0 , tako da je rezultat 0C0 = {p1 , p2 , p3 , p4 } (slika 6.14b).Rezultat iskanja bližnjih točk vrne seznam rešitev urejen po oddaljenosti, ki vsebujek točk C = {pr0 , pr1 , .., pr(k−1) }. Bližnje točke najprej uredimo v skupine popripadnosti glede na fronto, zato C preoblikujemo v obliko C = {C0 , C1 , .., Cn−1 },kjer n predstavlja število različnih front, z Gi pa označimo skupino vseh točk, kipripadajo fronti Fi . Glede na število front n ločimo: • vstavljanje točke v eno fronto, če je n = 1, • vstavljanje točke v več front, če je n > 1.6.3.2 Vstavljanje točke v eno frontoUpoštevati moramo dejstvo, da je lahko polmer r prevelik za dano vzorčenje. V temprimeru bomo našli preveč bližnjih točk, zato moramo nujno odstraniti tiste, ki so
  66. 66. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 111odveč. Vstavljanje točke p v eno fronto se lahko konča na različne načine: • navadno vstavljanje (opisano v podpoglavju 6.2.2), • zaprtje fronte (opisanu v podpoglavju 6.2.3) ali • delitev fronte. Če točke v C0 predstavljajo celotno fronto F0 , gre za zaprtje fronte. Če imamoopravka le z eno skupino točk Ci0 , zgradimo trikotnik z robovoma ob najbližji točkiintervala. Če je število skupin m > 1, bomo fronto F0 delili.6.3.2.1 Delitev fronteDelitev front je postopek, kjer fronta razpade na več manjših front, ki vsaka naprejsamostojno tvori svoj del površja. Če z nI označimo število skupin, fronta razpadena nI front, na kakšen način pa bomo delili, pove vsebnostni test: • Če p leži znotraj F0 , gre za priredno delitev fronte, rezultat pa je nI front na istem nivoju gnezdenja kot F0 . Na sliki 6.15a vidimo primer deljenja fronte F0 na dva dela. F0 delimo tako, da območje med skupinami točk zakrpamo s trikotniki (slika 6.15b), rezultat pa sta spremenjena fronta F0 in nova fronta F3 , ki ima enak nivo gnezdenja kot F0 (slika 6.15c). Spremembo v drevesu RT vidimo na sliki 6.15d, kjer leva stran predstavlja stanje pred in desna stanje po vstavljanju. Če je fronta F0 pred delitvijo vsebovala sinove, jih razdelimo med F0 in F3 . • Če p leži zunaj F0 , gre za podredno delitev, ustvarimo nI − 1 novih front na nivoju globlje od F0 . Na sliki 6.16a vidimo postopek deljenja, ki ustvari 1 novo fronto. Območje med frontama zapolnimo s trikotniki (slika 6.16b), spremenimo F0 in ustvarimo novo fronto F1 (slika 6.16c), ki jo v RT postavimo pod F0 (slika 6.16d).
  67. 67. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 112 Slika 6.15: Priredna delitev fronte. (a) (b) (c) (d) Slika 6.16: Podredna delitev fronte.
  68. 68. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 113 Natančen postopek priredne delitve v dve novi frotni prikazuje slika 6.17. Za jvse skupine točk C0 izberemo najbližje točke pcj in mesta vstavljanja razvrstimov krožnem zaporedju glede na točko p (slika 6.17a). Nato zgradimo trikotnike zvstavljanjem točke p k vsaki pcj (slika 6.17b). Rezultat vstavljanj vrne pare točk(psj , pej ), ki predstavljajo začetno oz. končno točko spremembe j−tega dela fronte.Da lahko tvorimo nove fronte, zgradimo trikotnike pej ps(j+1) p (slika 6.17c). Rezultatso fronte Fj = {pej , .., ps(j+1) } (slika 6.17d). Postopek za podredno delitev je enak,razlika je le v orientaciji novih front. Slika 6.17: Delitev fronte F0 . Delitev, bodisi priredna bodisi podredna, lahko vrne zelo majhne fronte, kise v nadaljevanju ne bodo več spreminjale. Zato takoj po deljenju poskusimo z
  69. 69. POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 114upoštevanjem razdalj med sosednjimi robovi zgraditi čim več trikotnikov. Postopeksmo opisali pri zapiranju front v poglavju 6.2.3.6.3.3 Vstavljanje točk v več frontVstavljanje v več front hkrati predstavlja dogodek združitve. Razpolagamo sskupinami točk C0 , C1 , .., Cn−1 . Združitev izvedemo s pomočjo postopka zavstavljanje točke v eno fronto, opisanega v predhodnem poglavju, opravimo pa ga vtreh korakih: 1. Skupine Ci uredimo v krožnem vrstnem redu glede na točko p. 2. Točko p vstavimo v Fi po načinu vstavljanja v eno fronto. Mesto spremembe si zapomnimo z dvojico (psi , pei ). 3. Fronte Fi združimo.Nato preverimo, kakšne fronte bomo združevali glede na njihova stanja: • združevanje neaktivnih front, • združevanje aktivnih front in • mešano združevanje. Postopek združevanja neaktivnih front je prikazan na sliki 6.18. Pričnemoz najbližjimi točkami fronte in poskusimo zgraditi prvi trikotnik (slika 6.18a).Takrat ustvarimo fronto F, ostale točke pa dodamo v krožnem zaporedju ponavadnem postopku vstavljanja (slika 6.18b-d). V primeru, da trikotnika ni možnotvoriti (slika 6.19a) zaradi kolinearnosti, s točko p ustvarimo novo neaktivno fronto(slika 6.19b).

×