un encrypted

101
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 fazi inicializacije ustvari še prvi trikotnik, s katerim zgradi začetno napredujočo fronto in začetno spodnjo konveksno lupino. Glede na položaj prvih k točk (k 3) je možnih več začetnih konfiguracij, ki so prikazane v prejšnjem poglavju (slika 3.14). Če si ob vseh teh primerih poskušamo predstavljati še robove, je različnih situacij še veliko več. Zato uvedemo rešitev, ki spretno zaobide inicializacijsko raznovrstnost tako, da vpeljemo umetni začetni trikotnik, kot kaže slika 4.2. Ustvarimo dve umetni točki p -1 in p -2 , ki ležita levo oz. desno od skrajne leve oz. skrajne desne točke iz množice P , njuna koordinata y pa je manjša od najnižje točke p 0 . Koordinate določimo po naslednji formuli: p -1 =(x min - δ x ,y min - δ y ) p -2 =(x max + δ x ,y min - δ y ) δ x =0.3(x max - x min ) δ y =0.3(y max - y min )

Upload: waldermort

Post on 30-Jun-2015

725 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Un encrypted

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 fazi

inicializacije ustvari še prvi trikotnik, s katerim zgradi začetno napredujočo fronto in

začetno spodnjo konveksno lupino. Glede na položaj prvih k točk (k ≥ 3) je možnih

več začetnih konfiguracij, ki so prikazane v prejšnjem poglavju (slika 3.14). Če si ob

vseh teh primerih poskušamo predstavljati še robove, je različnih situacij še veliko

več. Zato uvedemo rešitev, ki spretno zaobide inicializacijsko raznovrstnost tako, da

vpeljemo umetni začetni trikotnik, kot kaže slika 4.2. Ustvarimo dve umetni točki

p−1 in p−2, ki ležita levo oz. desno od skrajne leve oz. skrajne desne točke iz množice

P , njuna koordinata y pa je manjša od najnižje točke p0. Koordinate določimo po

naslednji formuli:

p−1 = (xmin − δx, ymin − δy)

p−2 = (xmax + δx, ymin − δy)

δx = 0.3(xmax − xmin)

δy = 0.3(ymax − ymin)

Page 2: Un encrypted

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 umetni

trikotnik ne poseže. Tudi vse trikotnike, ki jih tvorimo s pomočjo umetnih točk

p−1 in p−2, v legalizaciji preskočimo. Z umetnim trikotnikom na enostaven in vselej

enak način tvorimo začetno napredujočo fronto F = {p−1, p0, p−2}. Na ta način

smo potencialno obravnavno zaporedja kolinearnih točk prenesli v fazo prebiranja,

kjer niso deležne posebne pozornosti. Z vpeljavo začetnega umetnega trikotnika

pridobimo tudi pri prebiranju, saj se zmanjša število različnih obravnav točke.

Z uvedbo velikega začetnega trikotnika tudi nekoliko izgubimo, ker ne gradimo

spodnje konveksne lupine, vendar so rezultati pokazali, da je ta strošek zanemarljiv.

4.2 Prebiranje

Osrednji del algoritma predstavlja prebiranje oz. drsenje prebirne premice po ravnini

v 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

Page 3: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 48

predstavlja končno točko roba pipj (triangulacijo preuredimo tako, da rob pipj

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, če

toč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, kjer

v trenutno triangulacijo T vstavimo obiskano točko pi. Nato preverimo, če je točki

pi pripadajoč seznam robov Ei prazen. Če ni prazen, notranja zanka poskrbi, da

obravnavamo 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 CDT

procedure 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, si

poglejmo lastnosti in implementacijo napredujoče fronte.

Page 4: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 49

4.2.1 Napredujoča fronta in podatkovne strukture

Napredujoča fronta (krajše fronta) F predstavlja zgornjo mejo trenutne triangulacije

in s tem mesto dodajanja novih trikotnikov. Njena osnovna naloga je, da

vstavljajoč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 s

trikotniki 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 fronte

so urejene, kar je idealno za hitro iskanje. Vsaka točka fronte hrani dva osnovna

podatka, to sta oglišče fronte, ki predstavlja točko pi, in trikotnik ti, ležeč ob robu

fronte pipi+1. Tako imamo dovolj informacij, da lahko tvorimo nov trikotnik in ga

povežemo z ustreznim trikotnikom dane triangulacije. Puščice na sliki predstavljajo

kazalec na trikotnik, ležeč ob robu fronte (trikotnik ti na sliki). Ko v fronto vstavimo

novo točko p, najprej poiščemo rob fronte tako, da vstavljajoči točki poiščemo

najbližjo točko pc, s pomočjo katere najdemo rob fronte (to je lahko bodisi rob

pc−1pc bodisi ec,c+1. Z novim trikotnikom fronto osvežimo, zato moramo obvezno

osvež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 dvojno

povezanega dinamičnega seznama, ki jo je poimenoval preprost seznam s

preskakovanjem (angl. simple skip-list). Takšno implementacijo smo izbrali tudi

mi. Alternativa je uporaba uravnoteženih dvojiških iskalnih dreves, kot sta drevo

AVL ali rdeče-črno drevo ali ena izmed izvedb seznamov s preskakovanjem. Njihovo

Page 5: Un encrypted

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čke

Ob dogodku točke z iskanjem v podatkovni strukturi napredujoče fronte poiščemo

ustrezen rob fronte. Projekcija točke pi lahko pade na različne dele fronte, situacije

so 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 4l,r,i

(slika 4.4b) in osvežimo fronto tako, da vsebuje vstavljeno točko pi. Osvežimo tudi

kazalec na trikotnik v točki pl. Da zadostimo Delaunayevemu pravilu, pokličemo

postopek legalizacije (slika 4.4c).

Levi primer (slika 4.5a) obravnava situacijo, kjer projekcija točke pi pade na

točko fronte. Ker vemo, da bo hevristika (opisana v nadaljevanju) zgradila dodaten

Page 6: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 51

trikotnik, lahko to storimo že zdaj. Zgradimo dva nova trikotnika 4l−,l,i in 4l,r,i

(slika 4.5b). Točko pl bi sicer morali odstraniti iz fronte, a je hitreje, če točko pl le

zamenjamo s točko pi ter osvežimo kazalec na trikotnik v točki pl−. Za oba nova

trikotnika pokličemo legalizacijo.

Robni primer, kjer točka pi leži neposredno na robu fronte, razdelimo, točko pi pa

vstavimo v fronto.

Pri algoritmu klasične DT moramo obravnavati tudi situaciji, kjer projekcija

točke pi zgreši napredujočo fronto (pade levo oz. desno od F). Omenjeni situaciji

za razliko od zgoraj naštetih zahtevata večji poseg v podatkovne strukture, saj

vstavljanje točke spremeni tako napredujočo fronto kot tudi spodnjo konveksno

lupino. 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čevanje

nastajanja zarez in globeli. Postopek je enak kot v prebirnem algoritmu DT (glej

podpoglavje 3.2.1.3 in [92]).

4.2.3 Dogodek roba

Dogodek roba poskrbi, da v triangulacijo na zahtevano mesto vstavimo vse

omejujoče robove. Dogodek roba sledi dogodku točke pi, če seznam robov točke

Ei ni prazen. Točka pi je torej končna točka enega ali več omejujočih robov ex,i =

pxpi, kjer px predstavlja začetno točko poljubnega roba iz Ei (takšen primer vidimo

na sliki 4.7). Če imamo opravka z vstavljanjem več robov hkrati, robove vstavimo

enega za drugim. Vstavljajoč rob bomo zaradi preglednosti označili z e, njegovo

začetno oglišče pa naj predstavlja točka pj (e =pjpi). Zaradi različnih preverjanj

vpeljemo vektor −→ve , ki je obrnjen v nasprotni smeri roba e in ga definiramo kot−→ve = pj − pi.

Page 7: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 52

Slika 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 se

za implementacijo postopka vstavljanja robov z brisanjem. Ideja vstavljanja je

preprosta - v triangulaciji odstranimo vse Delaunayeve robove (in trikotnike), ki jih

rob e preseka, nato pa območje ob e ponovno trianguliramo, pri tem pa upoštevamo

Delaunayevo pravilo. Rob e označimo kot stalen in postane del končne CDT .

Če se spomnimo dvokoračnih postopkov za CDT, vidimo, da potrebujemo iskalno

podatkovno strukturo že zaradi dostopa do oglišč roba e. Prednost našega pristopa

je sprotnost vstavljanja, kar s pridom izkoristimo. Ko v triangulacijo vstavimo točko

pi, 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, da

je del preiskane množice podatkov že del končne rešitve, saj bomo ustvarjeno

triangulacijo prerešetali, a nič zato. Že osnovni Žalikov pristop je izjema. Za vsakim

novo tvorjenim trikotnikom sledi legalizacija, značilna za inkrementalne metode, ki

Page 8: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 53

Slika 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žni

trikotnik (b).

preoblikuje skupino obstoječih trikotnikov za prebirno premico. Temu se ne moremo

izogniti. Velja pa, da se spremembe izvajajo le v neposredni bližini napredujoče

fronte. 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.

Page 9: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 54

Slika 4.7: Po točki pi vstavimo vse njene robove.

4.2.3.1 Iskanje prvega trikotnika

Za začetek sprehoda po presekanih trikotnikih potrebujemo trikotnik, v katerem se

sprehod prične. To je zagotovo eden izmed trikotnikov, ki vsebujejo točko pi. Vseh

možnih trikotnikov je enako stopnji oglišča pi. Ker se točka pi nahaja na fronti in

ne v notranjosti triangulacije, je stopnja točke v povprečju za polovico manjša, zato

pri 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 smo

bližje robu e. Smer roba dobimo s primerjavo začetne in končne točke roba e. Če

rob e označimo z e = pjpi, pogledamo razliko v koordinati x točk pi in pj. Če je

xi− xj ≥ 0, izberemo segment fronte levo od pi in iščemo v nasprotni smeri urinega

kazalca. Če je xi − xj < 0, iskanje pričnemo v trikotniku ob segmentu fronte desno

od pi v smeri urinega kazalca.

Ob sprehodu skozi trikotnike s preverjanjem vektorskega produkta takšen

trikotnik najdemo v kratkem času. Primer vidimo na sliki 4.8, kjer vstavljamo

rob s končno točko p2. Iskati pričnemo v trikotniku t1, ki leži ob segmentu desno

od p2 in se sprehodimo v smeri urinega kazalca do trikotnika t3. Vektorski produkt−→v1 × −→ve spremeni predznak, zato se ustavimo. Rezultat iskanja je trikotnik t2, v

katerem bomo pričeli korakati po triangulaciji.

Page 10: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 55

t

Slika 4.8: Iskanje prvega trikotnika.

4.2.3.2 Brisanje sekanih trikotnikov

Ko imamo začetni trikotnik za sprehajanje, se pričnemo premikati. Uporabimo

postopek ravnega sprehoda [6, 25] po triangulaciji od končnega do začetnega oglišča

roba e. Osnovna ideja je pomikanje po trikotnikih s sledenjem njihovih sosednostnih

povezav tako, da se pomikamo le po trikotnikih, ki jih rob e preseka. Pri tem si

pomagamo z vektorskim produktom, ki nam pove, na kateri strani roba se nahajamo

in v kateri trikotnik se bomo pomaknili. Dvokoračni algoritmi se srečujejo le z enim

tipom ravnega sprehoda, to je sprehod, ki poteka izključno po trikotnikih, saj vsak

vstavljajoč rob e leži znotraj triangulacije. Izpis 4 prikazuje psevdokod takšnega

sprehoda, čigar rezultat je prazna regija ob robu Re, sestavljena iz Qe,L in Qe,R, ki

ju bomo kasneje triangulirali.

Psevdokod prikazuje postopek brisanja robov oz. trikotnikov, kadar rob e v

celoti leži znotraj triangulacije T . Primer postopka vidimo na sliki 4.9a. Regiji

Qe,L in Qe,R inicializiramo s točko pi (Qe,L = Qe,R = {pi}). Sprehod pričnemo

v začetnem trikotniku t ob točki p = pi. V vsakem koraku trikotniku t najprej

poiščemo sosednji trikotnik glede na presekan Delaunayev rob plpr in ga označimo s

tn. Nato v trikotniku tn poiščemo nasprotno točko robu plpr (točka pn) in preverimo,

na kateri strani vektorja −→ve se točka pn nahaja. Če pn leži na levi strani, v regijo

Qe,L shranimo točko pl, ki predstavlja sosednje oglišče v trikotniku tn v nasprotni

smeri urinega kazalca. Če se pn nahaja na desni strani roba pipz, v regijo Qe,R

Page 11: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 56

Izpis 4 Procedura brisanja sekanih trikotnikov ob vstavitvi roba e =pipj

procedure 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

Page 12: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 57

dodamo točko pr, ki jo v trikotniku tn najdemo, če se premaknemo v smeri urinega

kazalca. Celoten korak ponovimo za vse trikotnike tn. Sprehod zaključimo, ko

trikotnik tn vsebuje točko pj (pj dodamo v obe regiji). Rezultat sprehoda sta regiji

Qe,L = {pi, p0, p1, p5, p6, pj} in Qe,R = {pi, p2, p3, p4, p7, p8, pj} (slika 4.9b), končni

rezultat vstavljanja vidimo na sliki 4.9c.

Slika 4.9: Sprehod po trikotnikih ob vstavljanju roba (a) v prvem koraku vrne regiji

Qe,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 pipz preverjamo le s primerjavo koordinate x oz. y.

Ker robove vstavljamo sproti, so pogosti primeri, da rob e leži nad napredujočo

fronto in ne seka nobenega trikotnika (slika 4.10a). Sprehod od pi do pj poteka po

napredujoči fronti, rezultat pa je le regija Re (slika 4.10b).

Najzahtevnejši primer vstavljanja nastopi, kadar se rob e ponekod nahaja nad

napredujočo fronto, ponekod pa seka trikotnike triangulacije (slika 4.11a). Takrat

uporabimo kombinacijo sprehoda po trikotnikih in preprostega sprehajanja po

točkah fronte (način sprehoda se spremeni v točkah s0 in s1). Tudi tukaj sta rezultat

Page 13: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 58

brisanja 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 v

koraku 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čja

Prazno območje ob robu je potrebno triangulirati tako, da rob e zasede pravo mesto

v 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šče

v Qe,L in drugo v Qe,R. Zato vsako regijo trianguliramo posebej, lepa lastnost

pristopa pa je ta, da rob e predstavlja stičišče regij. Za trianguliranje regije lahko

Page 14: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 59

uporabimo 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 v

algoritem 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že

slika 4.12:

• V Qe poiščemo točko pk, za katero velja, da očrtani krog trikotniku 4i,j,k ne

vsebuje nobene druge točke iz Qe.

• Tvorimo trikotnik 4i,j,k, regijo Qe pa razdelimo v Qf = {pi, p0, .., pk} in Qg =

{pk, .., pr−1, pj}, pri čemer sta f = pipk in g = pkpj.

• 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 Delaunayevo

pravilo. Z vsako delitvijo regije se zmanjša število iskanja ustrezne točke pk, z

rekurzijo pa končamo, ko regija vsebuje le tri točke. Med izvajanjem algoritma

skrbimo, da so trikotniki med seboj povezani.

Page 15: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 60

Z vstavljanjem roba zaključimo, ko smo uspešno triangulirali obe regiji ob robu

e. Ostane le še povezava med trikotnikoma regij Qe,L in Qe,R, ki ležita neposredno

ob robu e. Rob e v obeh trikotnikih označimo kot stalen.

4.3 Finalizacija

V fazi finalizacije poskrbimo, da je rezultat CDT (G), kjer so vstavljeni vsi omejujoči

robovi Ec in izključno točke začetne množice točk P . V fazi inicializacije smo

ustvarili 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 odstraniti

obe dodatni točki p−1 in p−2, s tem pa tudi izbrisati vse trikotnike, ki vsebujejo ti

točki kot svoja oglišča.

Definicija triangulacije zahteva takšno delitev ravnine, ki je omejena s konveksno

lupino KL(P ). Žalik v svojem algoritmu navadne Delaunayeve triangulacije zgradi

zgornjo konveksno lupino s sprehodom po točkah napredujoče fronte, medtem ko

spodnjo konveksno lupino gradi sproti. Zgornjo konveksno lupino zgradimo na

enak način, kjer za sosednji rob fronte preverimo predznak vektorskega produkta

za 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 zgornje

konveksne lupine sproti zbriše napredujočo fronto F .

Spodnjo konveksno lupino zgradimo na enak način. Sprehodimo se po meji

triangulacije s pomočjo sosednostnih povezav mejnih trikotnikov od pL+ do pR− in s

preverjanjem vektorskega produkta dodamo manjkajoče trikotnike. Končni rezultat

triangulacije vidimo na sliki 4.13b.

Page 16: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 61

Slika 4.13: Finalizacija zbriše odvečne trikotnike (a) in zgradi konveksno lupino (b).

4.4 Časovna analiza

Analizirali bomo hitrost izvajanja algoritma, kjer bomo določili pričakovano časovno

zahtevnost. 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 urejanja

toč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 osnovo

postopka ohranili. V fazi prebiranja je potrebno vsako točko vstaviti v iskalno

strukturo, ki je implementirana kot sekljalna tabela. Vstavljanje je izvedeno v

konstantnem času. Predpostavimo, da je vseh vnosov nvnosov (nvnosov > 0) in da

je v nekem trenutku izvajanja v napredujoči fronti l točk. Da najdemo ustrezen

rob fronte, potrebujemo v povprečju l/nvnosov preverjanj. Tvorba trikotnika in

preverjanje hevristik se izvedeta v konstantnem, legalizacija pa v logaritemskem

času [60]. Časovna zahtevnost drugega dela algoritma je torej T2a = O(n lnvnosov

+

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

Page 17: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 62

T2a = O(n log n). Dostop do roba je takojšen, zanj pa moramo poiskati trikotnik

za začetek korakanja (O(1)). Sledi korakanje po trikotnikih, pri čemer sta izbira

naslednjega trikotnika in brisanje opravljena prav tako v konstantnem času O(1). Če

je k število sekanih trikotnikov, je časovna zahtevnost korakanja O(k). V najslabšem

primeru dobimo dve regiji, ki vsebujeta skupaj približno k točk. Časovna zahtevnost

triangulacije regij je 2 O(k2

4). Ker je k ¿ n, lahko za triangulacijo podamo oceno

O(n). Vstavljanje m robov torej opravimo v času T2b = m O(n) = O(n2), če je

m ≈ 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 zahtevnost

algoritma 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 Rezultati

Pri delovanju algoritmov običajno analiziramo časovno in prostorsko zahtevnost.

Časovna zahtevnost zavisi od značilnosti podatkov (število točk, število robov in

njihove porazdelitve). Ponavadi napravimo analizo najslabših in pričakovanih časov

izvajanja, v praksi pa uporabnike bolj zanimajo dejanski časi izvajanja na praktičnih

primerih. Zavedati se moramo, da so rezultati meritev odvisni od faktorjev, kot so

programski jezik, izkušnje ali stil programiranja posameznika, ki je določen algoritem

implementiral, pa od operacijskega sistema ali računalnika, na katerem smo meritve

izvajali. Kljub temu takšni eksperimenti podajo dragoceno informacijo o tem, kako

učinkovit je algoritem, ko ga primerjamo z drugimi.

Naš algoritem (označimo ga s SL) smo primerjali s tremi znanimi algoritmi, ki

jih je implementiral Shewchuk v svojem paketu Triangle [77, 78]. Njegove algoritme

Page 18: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 63

zaradi stabilnosti in robustnosti implementacije avtorji triangulacijskih algoritmov

pogosto uporabljajo kot referenčne implementacije. V paketu Triangle smo izbrali

tri 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 M

2.9 GHz z 1 GB delovnega pomnilnika, algoritme smo poganjali pod operacijskim

sistemom Windows XP. Vsi algoritmi so implementirani v jeziku C ali C++ in

prevedeni s prevajalnikom VisualC.

Slika 4.15 prikazuje primer triangulacije podatkov iz katastra, slika 4.16 pa

predstavlja triangulacijo višinskih črt. Oba primera smo triangulirali z vsemi štirimi

algoritmi. Rezultate smo predstavili v tabeli 4.1, hitrost delovanja pa smo uprizorili

z 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 smo

povečevali število točk in robov (dejansko smo uporabili druge vhodne podatke), se je

izkazalo, da je naš algoritem v večini primerov vsaj podobno hiter ali celo hitrejši od

LS-D&C. M-INC je pri množicah nad 5 mio točk in robov odpovedal, v splošnem se

je izkazal za najpočasnejšega. Nekoliko hitrejši pri našem testiranju je bil algoritem

F-SL, a tudi ta je za dane primere potreboval več časa. Najbolje se je odrezal

algoritem LS-D&C, ki se je v vseh testnih primerih dobro obnesel. Ponekod je bil

malenkost hitrejši, kjer je bil pa počasnejši, je bil naš algoritem tudi do dvakrat

hitrejši.

Tabela 4.2 prikazuje izvajalne čase posameznih delov algoritma. Razvidno je,

Page 19: Un encrypted

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.4323

da faza inicializacije porabi več kot polovico izvajalnega časa v primerjavi s fazo

prebiranja, 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.

Page 20: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 65

Slika 4.15: Primer vhoda pri katastrskih podatkih (a) in rezultat triangulacije (b).

Page 21: Un encrypted

POGLAVJE 4. PREBIRNI ALGORITEM CDT 66

Slika 4.16: Primer vhoda pri triangulaciji površja (a) in rezultat triangulacije (b).

Page 22: Un encrypted

Poglavje 5

Rekonstrukcija površja iz oblaka točk

Poglavje predstavlja uvod v drugi del naše disertacije. Ker se je pristop s

prebiranjem izkazal za uspešnega v primeru ravninske triangulacije, bi lahko

podobno poskusili tudi pri tvorbi triangulacije v 3D. Pravo posplošitev sicer

predstavlja tetraedrizacija [43], vendar je v praksi veliko bolj zanimiv problem tvorbe

trikotniškega površja iz oblaka točk, imenovan rekonstrukcija površja. Zato bomo

najprej opisali najpopularnejše rešitve za rekonstrukcijo površja in nato prešli na

opis lastnega postopka, temelječega na paradigmi prebirne ravnine.

5.1 Uvod

Problem rekonstrukcije je zelo pogosta tema v računalniški geometriji in njenih

aplikacijah, kar je vsekakor posledica razvoja prebirnih naprav ali prebirnikov

(angl. scanners). Cilj rekonstrukcije je ustvariti računalniški model površja iz

toč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 prebirniki

in tehnikami pridobivanja točk ne bomo ukvarjali.

Rekonstrukcija površja se prične z oblakom točk (angl. point cloud). Oblak

točk je množica točk P v prostoru, ki predstavlja vzorce originalnega površja S,

67

Page 23: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 68

dobljene s prebiranjem. Zato velikokrat namesto o točkah govorimo o vzorcih, vzorec

pa opišemo s trojico koordinat p(x, y, z). Oblak točk je podmnožica množice točk

površja (P ⊂ S). Včasih poleg koordinat razpolagamo še z normalami točk, odvodi

in sosednostmi. Nas zanimajo izklučno oblaki točk brez dodatnih informacij. Naloga

razvijalca postopka rekonstrukcije je, da s povezovanjem točk P zgradi računalniški

model površja S ′ (slika 5.1). Ta bo le približek S, saj imamo končen nabor

vzorcev. Površje bomo predstavili s trikotniško mrežo, ki je danes najpopularnejša

predstavitev 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čajo

anomalije v rekonstruiranem površju S ′. Drug nezaželjen pojav pri oblakih točk so

toč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 vzorcev

sodijo tudi luknje. Te lahko predstavljajo območja na površju, ki jih prebirnik ni

uspel 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čke

P , pravimo, da gradimo interpolacijsko površje. Tak način gradnje površja je

občutljivejši na šum. Drug način aproksimira površje S. Za aproksimacijsko površje

je značilno, da ne poteka nujno skozi točke iz P , ampak leži blizu njih. Zaradi tega

se na predelih, kjer je prisoten šum, le-ta zaradi povprečenja porazgubi. Rezultat je

sicer 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šja

z mejo (angl. boundary). Pri vodotesnih površjih za vsak rob velja, da pripada

natanko dvema trikotnikoma. Nasprotno, površja z mejo dovoljujejo robove, ki

pripadajo 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

Page 24: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 69

dodamo osnovno ploskev, dobimo vodotesno površje (slika 5.2b).

Slika 5.1: Proces izgradnje površja od zajemanja vzorcev do rezultata programske

rekonstrukcije.

5.1.1 Vzorčenje

Zelo pomemben faktor pri rekonstrukciji je vzorčenje, saj bo rekonstruirano površje

iz oblaka točk le približek originalnega površja. Nemogoče je npr. rekonstruirati

ostre robove. Spomnimo se Nyquistovega teorema, ki pravi, da mora biti najnižja

frekvenca vzorčenja (imenovana Nyquistova frekvenca) fny = 2fmax, kjer je fmax

maksimalna frekvenca v frekvenčnem spektru funkcije s končno amplitudo, vsaj

dvakratnik 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 temelji

na velikosti lokalne značilnosti (angl. local feature size ali LFS), drugi pa na

takoimenovani vzorčni poti (angl. sampling path).

Page 25: Un encrypted

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. Za

površ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 dobimo

enakomerno porazdelitev vzorcev. Ti so pri rekonstrukciji zelo zaželjeni, vendar niso

nujno optimalni za končno predstavitev objekta, saj v primeru monotonih predelov

dobimo preveč vzorcev. Naravno se zdi, da je vzorcev več v bolj razgibanih predelih

površja in manj tam, kjer je ukrivljenost površja majhna.

Temu ustreza drugi kriterij. Velikost lokalne značilnosti LFS(p) točke p ∈ P je

funkcija, ki vsaki točki p priredi realno vrednost, ki predstavlja najbližjo razdaljo

do srednje osi (angl. medial axis) [3]. Srednja os nad množico P je definirana kot

zaprtje 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 ampak

le oblak točk, srednje osi ni mogoče zgraditi in tako izračunati pravilne LFS. Tako

algoritmi uporabljajo aproksimacijo srednje osi [4, 17].

Page 26: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 71

Slika 5.3: Vzorčenje po kriteriju vzorčne poti (a) in rekonstruiran objekt s slabo

rekonstruiranim robom (b).

5.2 Sorodne raziskave

Do danes je bilo na področju rekonstrukcije razvitih že veliko algoritmov. Glede na

nač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 prostora

Postopkom, 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 razdelijo

v manjše celice. Načinov delitve prostora je več in so odvisne od pristopa, s katerim

gradimo površje. Najpogostejše delitve prostora so regularne mreže, osmiška drevesa

ali neregularne tetraedske mreže. Cilj deljenja je najti celice, ki vsebujejo vzorce iz

Page 27: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 72

LFS(

p)

Slika 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 celic

Ta 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 v

enakomerno vokselsko mrežo. V drugem koraku obdržimo le voksle, ki vsebujejo

vsaj 1 vzorčno točko. V tretjem koraku z zunanjimi pravokotniki izbranih vokslov

sestavimo 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 je

trenutno zgrajeno površje kockasto, s pomočjo filtriranja z nizkim sitom izračunamo

Page 28: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 73

nove položaje oglišč trikotnikov, ki jih dobimo z izračunom uteženega povprečja

starega položaja točke in njenih sosednjih točk. Aproksimacijo površja izboljšamo

z ukrivljanjem proti položaju vzorčnih točk.

Postopek Hoppeja s sodelavci [50] temelji na funkciji razdalje, ki za vsako točko

površja zaprtega objekta pove najmanjšo predznačeno razdaljo do površja. Točke

na površju imajo oddaljenost 0, medtem ko je oddaljenost točk znotraj objekta

negativna in oddaljenost točk zunaj objekta pozitivna. V prvem koraku algoritma

zgradimo regularno vokselsko mrežo. Vokselske celice, ki jih izberemo v drugem

koraku, 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 algoritmom

sprehajajoč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. Na

koncu izbrane vokselske celice zamenjamo s krpami, ki jih povežemo v končno

površje.

Postopek, ki sta ga predstavila Bajaj in Bernardini [12], se od predhodnih

postopkov razlikuje v tem, da je prostorska delitev neregularna in prilagodljiva.

Tudi ta metoda uporablja funkcijo razdalje. Prvotno aproksimacijo površja

zgradimo v fazi predprocesiranja s pomočjo alfa-teles (angl. alpha-solids), vsaki

točki pa izračunamo oddaljenost do tega površja. Ko so znane oddaljenosti

za vsako točko, inkrementalno razdelimo prostor v tetraedre, kjer začnemo s

tetraedrom, ki oklepa celotno množico vzorcev. Nato z opazovanjem predznakov

funkcije razdalje v posameznih točkah poiščemo vse tetraedre, skozi katere poteka

površje, in zgradimo aproksimacijo površja. Ker površje ni točno, v vsaki

točki izračunamo aproksimacijsko napako. Velike napake zahtevajo izboljšavo

tetraedrizacije, zato v takšne tetraedre vstavimo njihova središča in jih razdelimo.

Postopek inkrementalnega dodajanja središč ustavimo, ko je aproksimacijska napaka

zadovoljivo majhna. Tetraedrizacija je Delaunayeva, kar zagotavlja uravnoteženost

Page 29: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 74

tetraedrov.

Edelsbrunner in Mücke [34] sta predstavila algoritem alfa-oblik (angl. alpha-

shapes). Prostor v prvem koraku razdelimo v Delaunayeve tetraedre, kjer so vzorčne

točke del Delaunayeve tetraedrizacije. V drugem koraku odstranjujemo tetraedre,

trikotnike in robove z uporabo tako imenovanih α-krogel, ki nastopajo kot orodje

za brisanje. Vsak rob, trikotnik ali tetraeder je izbrisan, če je njegova minimalna

oklepajoča krogla manjša od α-krogle. Tako dobimo alfa-obliko, ki jo sestavlja

množica preostalih robov, ploskev in tetraedrov. V tretjem koraku algoritma iz

alfa-oblike izluščimo trikotnike, ki pripadajo površju z upoštevanjem pravila praznih

krogel. Trikotniku očrtamo dve krogli s polmerom α in če vsaj ena izmed njiju ne

vsebuje nobene druge točke, je trikotnik sprejet kot del površja. Največja težava

algoritma je primerna izbira polmera α. Premajhen α vodi do nepovezanega površja,

prevelik pa izpusti detajle.

5.2.1.2 Prostorsko usmerjena izbira celic

Prostorski 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 enim

licem, tremi robovi in tremi točkami na konveksni lupini poliedra so izločeni. Zaradi

tega pravila je moč rekonstruirati le objekte brez lukenj. Tetraedre te vrste iterativno

odstranimo glede na zmanjševanje odločitvenih vrednosti. Odločitvena vrednost

predstavlja maksimalno razdaljo lica tetraedra od njegove očrtane krogle. Tako

Page 30: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 75

odstranimo tanke tetraedre Delaunayeve tetraedrizacije, saj običajno ležijo zunaj

objekta in pokrivajo območja z več podrobnostmi. Algoritem se ustavi, ko vse

točke ležijo na površju ali če brisanje tetraedra z največjo odločitveno vrednostjo ne

izboljša vsote odločitvenih vrednosti vseh tetraedrov na obrobju.

Pristop z γ-indikatorjem je opisal Veltkamp [81]. Indikator γ je vrednost, ki jo

priredimo krogli skozi tri mejne točke poliedra in je lahko pozitivna ali negativna.

Njegovo absolutno vrednost izračunamo kot 1 − rR, kjer je r polmer kroga, ki ga

oč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 je

središče zunaj. Indikator γ je neodvisen od velikosti trikotnika oz. tetraedra na meji

in se tako prilagaja območjem spreminjajoče gostote točk. Lice, ki ga odstranimo, je

lice s pozitivno vrednostjo indikatorja γ. Prvi korak algoritma je tvorba Delaunayeve

tetraedrizacije. V drugem koraku tvorimo uravnoteženo dvojiško drevo s tetraedri, ki

bodo odstranjeni, te pa uredimo po velikosti indikatorja γ. Tetraedri za odstranitev

so istega tipa kot pri Boissonatovi metodi [21]. Iz tetraedrizacije odstranimo

tetraeder z največjo vrednostjo γ in osvežimo površje. Postopek ponavljamo, dokler

ne zmanjka tetreadrov, ki jih lahko odstranimo. Prednost algoritma je, da je

indikator γ prilagodljiv različnim gostotam porazdelitev, algoritem pa je primeren

za gradnjo objektov brez lukenj.

Prvi algoritem s teoretičnim zagotovilom za pravilnost površja je razvila Amenta

s sodelavci [3]. Predstavili so ε-vzorčenje oz. kriterij LFS in z uporabo srednje osi

pokazali, da je rekonstrukcija geometrijsko blizu originalnemu površju. Algoritem

so poimenovali CRUST in je danes vsekakor najbolj popularen algoritem za

rekonstrukcijo površja. Zanj obstajata dve osnovni različici, enoprehodna in

dvoprehodna. Pri dvoprehodni različici najprej zgradimo podmnožico Delaunayeve

tetraedrizacije in dobimo množico polov, iz katerih v kombinaciji z Voronoijevim

diagramom v drugem prehodu zgradimo novo Delaunayevo tetraedrizacijo. Nato

Page 31: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 76

poiščemo trikotnike, ki ležijo na površju (njihova oglišča so točke iz P ). Tiste

trikotnike, ki vsebujejo vsaj eno oglišče pola, odstranimo. Pri enoprehodni različici

algoritma lahko izberemo trikotnike, ki ležijo na površju, že iz prvotne Delaunayeve

tetraedrizacije. Izhajamo iz dejstva, da so Voronoijeve celice pri ε-vzorčenju

podolgovate 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 algoritma

CRUST je razvil tudi Dey [26] in ga poimenoval COCONE. Osredotočil se je na

velike množice vhodnih podatkov, na podvzorčenost, šum in robne primere (ostri

robovi, luknje).

5.2.2 Rekonstrukcija površja s funkcijo razdalje

Funkcija 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, ali

točka leži znotraj ali zunaj podprostora, omejenega s površjem. Poleg algoritma

sprehajajočih kock je razdalja pomembna tudi pri algoritmih, ki uporabljajo srednjo

os.

Hoppe in sodelavci [50, 51] so predstavili algoritem, kjer površje predstavlja

množica ničel funkcije predznačene razdalje. V prvem koraku ocenimo normalne

vektorje z uporabo k-najbližjih sosedov. Na podlagi tega zgradimo graf, iz

katerega izluščimo evklidsko minimalno vpeto drevo, s katerim določimo orientacijo

normalnih vektorjev, saj morajo le-ti biti usmerjeni bodisi v notranjost bodisi v

zunanjost telesa. Na koncu izračunamo funkcijo razdalje za vsako točko, množico

ničel funkcije razdalje pa vstavimo v algoritem sprehajajočih kock [63], ki zgradi

konč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

Page 32: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 77

srednjo 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 fazi

postprocesiranja in deluje na velikih oblakih točk, sta predstavila tudi Curless and

Levoy [24].

5.2.3 Rekonstrukcija površja z ukrivljanjem

Rekonstrukcija z ukrivljanjem površja (angl. warping) zgradi površje tako, da

najprej tvori prvotno različico površja in ga nato ukrivi tako, da se čim bolj prilagodi

vhodni množici točk P . Proces si lahko predstavljamo kot napihnjeno žogo, v katero

postavimo točke P . Nato pričnemo iz žoge spuščati zrak, zato se žoga manjša, vse

dokler se v celoti ne prilagodi iskanemu površju. Geometrijsko žogo predstavimo

kot trikotniško mrežo okrog oblaka točk. Za vsako točko začetne mreže poiščemo

zvezo 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.5D

trikotniške mreže, ki jo je predstavil Muraki [70]. Fizikalno orientiran pristop sta

predstavila Szelinski in Tonnensen [80]. Pristop uporablja delce (angl. particles), ki

so povezani z vzmetmi, vsak delec pa vsebuje nekaj parametrov, katerih vrednosti se

spreminjajo 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, ki

sta jo predstavila Baader in Hirzinger [11], uporablja Kohonenove nevronske mreže

za rekonstrukcijo v 2.5D, kjer je vsaka točka predstavljena kot nevron. Yu [86] je

predstavil robustnejši pristop, ki deluje tudi v 3D.

Page 33: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 78

5.2.4 Inkrementalni algoritmi za rekonstrukcijo površja

Osnovna ideja inkrementalnih postopkov je zgraditi interpolacijsko ali aproksimacij-

sko površje z upoštevanjem ploskovno usmerjenih lastnosti točk. Nekateri algoritmi

pričnejo graditi površje s poljubnim robom površja, ki ga tvorimo s povezavo dveh

točk, za kateri verjamemo, da sta sosednji točki na površju. Začetnemu robu in

nadaljnim robovom dodajamo trikotnike in tako iterativno širimo mejo tvorjenega

površ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 na

obrobju površja, dodamo nov trikotnik tako, da lokalno ocenimo tangentno ravnino

s pomočjo robu sosednjih točk. Sosednje točke projiciramo na izračunano tangentno

ravnino, potem pa tvorimo trikotnik tako, da eno izmed teh točk povežemo z

obravnavanim robom. Izberemo tisto točko, ki z robom tvori trikotnik, katerega

notranji koti so maksimalni. Algoritem se zaključi, ko ne najdemo več nobenega

prostega roba. Drug način tvorbe napravi grobi približek površja, nato pa površje

dokončno oblikuje s sprotnim dodajanjem točk [66, 67].

Zelo popularni inkrementalni algoritmi so zagotovo algoritmi, temelječi na

napredujoč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 s

trodimenzionalno mejo delnega površja, je predstavil Scharf s sodelavci [75]. Začetne

fronte ustvarimo kot zaprte trikotniške mreže, ki z dodajanjem točk rastejo in se

raztezajo proti površju, dokler le-tega v celoti ne opišejo.

Page 34: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 79

5.2.5 Gručenje

Zgodi se lahko, da en oblak točk predstavlja več ločenih oblik, kar lahko obstoječim

postopkom povzroči težave. Oblak točk razdelimo na posamezne dele, kjer vsak

del oblaka opiše samostojen objekt. Med postopki najdemo algoritem Fua in

Sanderja [44] ter Mencla in Müllerja [66, 67].

Page 35: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 80

5.3 Algoritem PowerCrust

Algoritem PowerCrust je razvila Amenta s skupino [4] leta 2001 in je razširitev

prvotne ideje [3]. Sodi v skupino algoritmov z delitvijo prostora. Algoritem

zgradi površje tako, da najprej aproksimira srednjo os objekta, nato pa z inverzno

transformacijo iz srednje osi rekonstruira površje. Algoritem je prvi rekonstrukcijski

algoritem 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 ne

potrebuje dodatnega koraka krpanja lukenj po sami rekonstrukciji. Implementacija

algoritma je robustna, algoritem je odporen tudi na šum. Trenutno je PowerCrust

eden najpopularnejših algoritmov, zato bomo opisali osnove njegovega delovanja.

Za opis postopka moramo razložiti pojme, kot so srednja os in transformacija srednje

osi, 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

Page 36: Un encrypted

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 −−→pp− in −−→pp+ negativen.

Slika 5.5: Črna krivulja prikazuje površje, modra srednjo os in krožnice

transformacijo srednje osi.

Če P predstavlja dovolj gost vzorec (ustreza vzorčenju LFS), so Voronoijeve

celice 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 −−→pp+

in −−→pp− aproksimirata normalo površja v točki p (slika 5.6).

Ker je dual Voronoijevega diagrama Delaunayeva triangulacija oz. Delaunayeva

tetraedrizacija v 3D, Voronoijeve točke predstavljajo središča praznih krogel, ki

jih imenujemo tudi Voronoijeve krogle. Voronoijeva krogla je razpeta nad točke

podmnožice točk P Delaunayevega tetraedra, znotraj katere se ne nahaja nobena

druga točka iz P . Voronoijeve krogle s središči v polih imenujemo polarne krogle

(angl. polar ball), množica polarnih krogel pa aproksimira transformacijo srednje

osi. MAT vsebuje krogle zunaj in znotraj objekta. Unija notranjih polarnih krogel

opiše dober približek objekta, omejenega s površjem S, unija zunanjih krogel pa

Page 37: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 82

Slika 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 zgradimo

iz 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 predstavljajmo

kot točko c z utežjo ρ2. Razdalja moči med običajno točko px v prostoru in Bc,ρ je

definirana kot:

dpow(px, Bc,ρ) = d2(c, px)− ρ2,

kjer d predstavlja navadno evklidsko razdaljo. Diagram moči v 2D in njegov dualni

graf, uteženo Delaunayevo triangulacijo (imenovano tudi regularna triangulacija),

prikazuje slika 5.7. Ko se px nahaja znotraj krogle Bc,ρ, je dpow negativna, sicer

pa pozitivna. Skorja moči (angl. power crust) predstavlja mejo med zunanjimi

in notranjimi celicami diagrama moči. Dvodimenzionalno lice skorje ločuje celici,

ki pripadata zunanjemu oz. notranjemu polu. Lica skorje moči ležijo med unijo

zunanjih 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, ki

je 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).

Page 38: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 83

Slika 5.7: Diagram moči (polne črte) in dualna regularna triangulacija (črtkane črte).

Krogi predstavljajo polarne kroge v 2D.

5.3.1 Algoritem

Algoritem 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 opazovanjem

diagrama moči. Definiramo naravni graf (angl. natural graph) nad celicami

diagrama moči. Dve celici povežemo, če si delita skupno dvodimenzionalno lice ali če

pripadata poloma istega vzorca. Če velja predpostavka o dobrem vzorcu, označimo

Page 39: Un encrypted

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 polarna

krogla komaj dotikata druga druge, če se. Drugo dejstvo pa je, da sta dva pola

nad istim vzorcem vselej eden zunanji in drug notranji. Ker velikost celic omejimo s

škatlo, ki zaobjame ves objekt (implementacija uporabi petkratnik oklepajoče škatle

objekta, je pol, ki leži na škatli, zagotovo zunanji. Če p1 predstavlja zunanji pol, ki

meji na celico še neoznačenega pola p2 in je kot med tangentama njunih polarnih

krogel skozi presečišče velik, označimo pol p2 kot zunanji (slika 5.9). Sicer pol p2

označimo kot notranji. Podobno velja, če je pol p1 že označen kot notranji in če je

kot 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

Page 40: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 85

najprej označimo tiste pole, pri katerih lahko z gotovostjo ugotovimo njihov položaj

in šele nato označimo preostale. Slika 5.10 prikazuje notranje rekonstruiran objekt

noge.

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 po

kriteriju LFS. Če temu ni tako, lahko nastanejo težave pri označevanju polov in kot

rezultat dobimo slabo aproksimacijo srednje osi ter posledično slabšo rekonstrukcijo

površja. Algoritem PowerCrust je odporen na šum. Z analizo polarnih krogel je na

površju možno puščati tudi luknje (če luknje predstavljajo lastnost objekta), nekaj

težav pa ima algoritem pri rekonstrukciji ostrih robov. Slabost algoritma so nekoliki

višji časi izvajanja.

Page 41: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 86

Slika 5.10: Notranje polarne krogle objekta (a) in skorja moči kot rekonstruirano

površje (b) (vir: Amenta).

Page 42: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 87

5.4 Algoritem BPA

Algoritem z vrtenjem krogle BPA (angl. ball-pivoting) spada v skupino

inkrementalnih algoritmov. Tvori interpolacijsko površje, ki ga širi z napredovanjem

fronte 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 si

pomagamo pri tvorbi trikotnikov in v situacijah slabega vzorčenja. Algoritem BPA

bomo predstavili zato, ker je trenutno eden najuspešnejših algoritmov z napredujočo

fronto.

Predpostavljamo, da je površje S vzorčeno dovolj gosto, tako da v množici točk

P z vrtenjem krogle vselej najdemo točko (kriterij vzorčne poti). Algoritem prične s

postavitvijo 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 pripadajo

začetnemu ali semenskemu trikotniku (angl. seed triangle), kjer njegovi robovi

predstavljajo napredujočo fronto. Fronti dodajamo trikotnike tako, da vzamemo

enega 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. Med

vrtenjem lahko najdemo več točk, vzamemo pa tisto, pri kateri krogla ne vsebuje

nobene druge točke. Nato tvorimo trikotnik in fronto razširimo z novimi robovi.

Postopek ponavljamo, dokler ne zmanjka robov. Slika 5.11 prikazuje delovanje

algoritma BPA na ravnini. Krog s polmerom ρ vrtimo od točke do točke in gradimo

robove (slika 5.11a). Če je gostota vzorčenja premajhna, nekaterih robov ni mogoče

ustvariti, zato nastanejo luknje (slika 5.11b). Če zaradi ukrivljenosti nekaterih točk

ni 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.

Page 43: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 88

Slika 5.11: Delovanje algoritma BPA v 2D pri dovolj gostem vzorčenju (a), pri

premalo gostem vzorčenju (b) in pri preveliki ukrivljenosti površja (c).

Vsak rob pipj je predstavljen s točkama pi in pj. Poleg tega rob hrani še nasprotno

točko po, ki je središče očrtane krogle K priležnega trikotnika, in povezave do

sosednjih 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 prostora

Algoritem za svoje delovanje potrebuje iskanje v prostoru. Gre za preiskovanje

bližnje okolice, zato algoritem BPA uporablja enakomerno delitev prostora, kjer je

Page 44: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 89

vsaka celica prostorska kocka oz. voksel s stranico δ = 2ρ. Točke so shranjene v

urejenem seznamu, točke znotraj voksla pa tvorijo povezan podseznam. Vsak voksel

vsebuje 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 tvorbo

novega trikotnika, so tiste, ki so od p oddaljene za 2ρ. Podatkovna struktura z

vokselsko mrežo omogoča konstanten dostop do točk.

5.4.2 Izbira semenskega trikotnika

Semenski 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 4pipapb,

• 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 pomembno

izbrati učinkovito strategijo za iskanje semenskega trikotnika. Dobra izbira

semena omogoča, da algoritem lokalno zgradi največje možno površje. Problem

predstavljajo točke šuma, ki so od rekonstruiranega površja oddaljene za nekoliko

več 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 fazi

post-rekonstrukcije, vendar je bolje, če se lahko temu izognemo in prihranimo čas.

Page 45: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 90

Rešitev je, da se pri iskanju semenskega trikotnika omejimo le na eno točko za vsak

voksel. 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 −→n , ki

predstavlja povprečno normalo površja v dani regiji. Ker želimo, da naša krogla

potuje po zunanji strani površja, se pri točkah omejimo na tiste, katerih projekcije

na −→n so večje in pozitivne. Semenske trikotnike iščemo v nepraznih vokslih. Ko

najdemo semenski trikotnik, pričnemo z vrtenjem krogle graditi površje. Ko vrtenje

ni več mogoče (vsi robovi fronte so mejni), nadaljujemo z iskanjem semena tam, kjer

smo končali, pri čemer preskočimo vse voksle, pri katerih naletimo na točko, ki je že

del trikotniške mreže. Algoritem se zaključi, ko semena ne najdemo več.

5.4.3 Vrtenje krogle

Postopek vrtenja krogle se prične takoj, ko imamo semenski trikotnik. Naj bo

pipj rob fronte, ki s točko po tvori trikotnik 4ijo z normalo −→n . Temu je očrtana

krogla s polmerom ρ (slika 5.12). Os vrtenja krogle pri vrtenju je rob pipj, ki

leži na osi z in je usmerjen proti gledalcu. Krogla s središčem cijo je v začetnem

položaju prazna, zato je trikotnik 4ijo lahko semenski trikotnik ali pa je bil zgrajen

z vrtenjem krogle v predhodnih korakih. Koordinatni sistem je postavljen tako, da

center krogle cjio leži na pozitivni strani osi x. Vrtenje krogle je zvezno pomikanje

krogle po površju, kjer je krogla ves čas v stiku z robom pipj. Zaradi stalnega

stika z njim središče cijo oriše krožno trajektorijo γ, ki leži na ravnini, pravokotni

na rob pipj in poteka skozi njegovo srednjo točko pm = 12(pi + pj) (točka pm na

sliki 5.12 leži v izhodišču koordinatnega sistema). Središče vrteče krogle je v točki

pm, polmer pa dist(cijo, pm). Med gibanjem se krogla lahko dotakne točke pk. Če

ob vrtenju ne najde nobene točke, rob pipj označimo kot mejni. Sicer s točkami pi,

pj in pk tvorimo trikotnik 4ijk, krogla pa v svojem zaključnem položaju ne vsebuje

nobene druge točke, zato je pripravljena nadaljevati vrtenje kot nova začetna krogla.

Page 46: Un encrypted

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 za

največ 2ρ. Za vsako najdeno točko px izračunamo središče krogle cx, ki se dotika

oglišč pi, pj in px, če seveda takšna krogla obstaja. Vsako središče cx leži na krožni

trajektoriji γ 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 tisti

cx, ki vrne najmanjši kot med premico lx in trikotnikom 4ijo).

Slika 5.12: Vrtenje krogle okrog roba pipj (pravokoten na sliko) najde točko pk, s

katero ustvarimo nov trikotnik.

5.4.4 Operatorja združevanja in lepljenja

Algoritem BPA obdela vse možne situacije s pomočjo dveh preprostih topoloških

operatorjev, ki med dodajanjem trikotnikov skrbita za obnašanje front:

• operator združevanja (angl. join),

• operator lepljenja (angle. glue).

Page 47: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 92

Slika 5.13: Operator združevanja doda trikotnik 4ijk in osveži fronto.

Operator združevanja je preprostejši: uporabi se, ko kroglo zavrtimo okrog roba

pipj in se dotaknemo še neuporabljane točke pk. Operator zgradi nov trikotnik 4ijk

in 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 4ijk.

Operator lepljenja poskrbi, da se vsak rob v površju nahaja le enkrat. Algoritem

BPA tvori usmerjene robove. Zgradimo lahko trikotnik z robom, ki pripada

drugi fronti, zato moramo poskrbeti za odstranitev parov prekrivajočih se robov z

nasprotno 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 kot

to, da odstrani oba robova ekj in ejk ter ustrezno preuredi fronto. Možni so štirje

različ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 odstranimo

in skrajšamo zanko (slika 5.14b). Če robova nista sosednja in pripadata različnima

Page 48: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 93

zankama, zanki združimo (slika 5.14c). Zanko razdelimo takrat, ko robova pripadata

isti 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, potrebujemo

razširitev, ki varčno upravlja s pomnilnikom. V hitri pomnilnik shranimo vse

podatke, ki so trenutno v uporabi za obdelavo, in odstranimo tiste, ki jih več ne

potrebujemo. Uporabimo dve osno-poravnani ravnini π0 in π1, s katerima definiramo

aktivno območje vrtenja. Začetno π0 postavimo tako, da nobena točka ne leži

pod njo, π1 pa nad π0, oddaljeno za neko uporabniško definirano razdaljo. Ko

ustvarimo nov rob, preverimo, če sta njegovi krajišči nad π1. Takrat rob označimo

Page 49: Un encrypted

POGLAVJE 5. REKONSTRUKCIJA POVRŠJA IZ OBLAKA TOČK 94

za zamrznjen. Ko so vsi robovi v vrsti zamrznjeni, premaknemo ravnini π0 in π1

navzgor ter pretvorimo vse zamrznjene robove v aktivne.

Za rekonstrukcijo z neenakomerno vzorčenim površjem avtor predlaga večkratni

prehod z različnimi polmeri krogle. Tako uporabnik kot vhodni parameter definira

seznam 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. Algoritem

teče, dokler v vrsti obstajajo aktivni robovi. Ko se postopek ustavi, se postavimo

na naslednji polmer ρi+1 in se sprehodimo skozi vse mejne robove ter preverimo, če

vsak rob s svojo nasprotno točko po tvori pravilen semenski trikotnik za kroglo s

polmerom ρi. Če to drži, potem rob dodamo v vrsto aktivnih robov in nadaljujemo

s tvorbo površja z vrtenjem krogle.

Page 50: Un encrypted

Poglavje 6

Prebirni algoritem za rekonstrukcijo

površja

Algoritem, ki smo ga razvili, lahko uvrstimo v skupino algoritmov z napredujočo

fronto, ki fronto propagira s prebiranjem. Temelji na predpostavki, da je originalno

površje S vzorčeno po kriteriju vzorčne poti. Parameter r mora biti takšen, da

vsaka 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 precej

razlikuje. Pri algoritmu z vrtečo kroglo naslednjo točko p poiščemo z vrtenjem krogle

za vsak aktiven rob fronte. Točko p, s katero ustvarimo nov trikotnik, izberemo

z 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 vsak

voksel). Naš algoritem se problema loteva iz nasprotne strani. Po shemi prebiranja

naslednjo točko p obiščemo ob pomiku prebirne ravnine, točki pa poiščemo najbližji

rob fronte. Ker dejansko opazujemo projekcijo fronte na ravnino, potrebujemo za

iskanje dvodimenzionalno podatkovno strukturo. Zaradi razpršenosti vstavljanja

nastopi veliko situacij, ki jih je potrebno skrbno preučiti. Algoritem tvori vodotesno

površje.

95

Page 51: Un encrypted

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 od

gledalca proti sliki pravokotno na njo (slika 6.1). Preseki med prebirno ravnino

in površjem orišejo krivulje. Ob postankih v nekaj točkah vidimo, da presečišča

s kroglo vrnejo le eno krivuljo (slika 6.1a). To je krožnica, ki ima na začetku

polmer 0, nato do sredine krogle njen polmer doseže vrednost r (zadnji prerez na

sliki), potem pa krožnica na enak način tudi izgine. Obroč lahko opazujemo iz

več gledišč. V primeru na sliki 6.1b kot presečišče najprej dobimo eno krožnico, ki

predstavlja vrh obroča. Kaj kmalu se v preseku pojavita dve krivulji, kjer zunanja

krožnica predstavlja zunanji del obroča (črna barva), notranja pa njegov notranji

del (rdeča barva). Zunanja krožnica na polovici prebiranja doseže svojo maksimalno

velikost, notranja pa minimalno. Sledijo prerezi, kjer se krožnici spet bližata, dokler

ne dobimo spet ene krožnice, ki izgine, ko dosežemo dno obroča. Če izberemo

Page 52: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 97

gledišče na sliki 6.1c, opazimo, da prerez sprva oriše točko in nato krivuljo, ki

raste ter do polovice prebiranja preide v dve ločeni krivulji. Iz opazovanja presekov

krivulj se je rodila ideja algoritma, ki bo temeljil na tvorbi krivulj in obenem tvoril

površje. Krivulje bomo opisali z napredujočimi frontami, površje pa bo nastajalo

ob spremembah krivulj oz. napredujočih front. Vidimo, da je napredujoča fronta v

nekem trenutku nastala, se razvijala (ožila in širila) in se zaključila. Iz opazavanja

so 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 obravnavo

omenjenih dogodkov, se srečali z robnimi problemi in predstavili rezultate, najprej

pa bomo predstavili gradnike, ki jih potrebujemo za razvoj algoritma.

6.1 Gradniki

Gradniki, 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 fronta

Napredujočo fronto definiramo kot množico točk F = {p0, p1, p2, .., pn−1}. Fronta

lahko nastopa v dveh stanjih:

Page 53: Un encrypted

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 bomo

povedali, kdaj upoštevamo projekcijo v 2D in kdaj bomo pri delu upoštevali dejanske

Page 54: Un encrypted

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 kotov

med robovi front.

6.1.2 Hierarhično vodenje front

Pri zelo razgibanih površjih se lahko zgodi, da imamo veliko gnezdenj, torej je veliko

zank in prstanov. Za uspešno rekonstrukcijo moramo poznati odnose med njimi.

Slika 6.4 prikazuje možno stanje med izvajanjem algoritma. Podatkovna struktura

za predstavitev medsebojnega položaja front je drevo, ki ga poimenujemo drevo

relacij 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. Koren

grafa kaže na fronte 1. nivoja, povezave med frontami so dvosmerne, tako da lahko

dostopamo 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 frontami

1. nivoja najdemo ustrezno poddrevo. Za vsebnostni test zadostuje preverjanje

vsebnosti ene točke nove fronte v mnogokotniku, kjer vsebnost računamo brez

upoštevanja orientacije mnogokotnikov. Če vsebnosti ne najdemo, fronto dodamo

na konec seznama front 1. nivoja. Nasprotno, če poddrevo najdemo, postopek

Page 55: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 100

Slika 6.4: Gnezdenje front. S črno so označe zanke, z rdečo prstani, modra barva pa

označuje fronto, ki jo vstavljamo.

preverjanja rekurzivno ponovimo za naslednji nivo. Vozlišče iz drevesa odstranimo

ob zaprtju fronte. Spreminjanje drevesa bomo bolj natančno opisali pri posameznih

dogodkih 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čk

Ko vstavimo točko p, moramo poiskati fronte, ki jih bomo spremenili. Iskanje točk

je eno najbolj raziskanih področij računalniške geometrije, med katerimi najdemo

iskanje najbližje točke [8, 14, 73], iskanje k-najbližjih točk [82, 83] ali iskanje točk

Page 56: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 101

znotraj določenega intervala [18, 19]. Nas zanimajo točke, ki ležijo znotraj krožnice

s središčem v p s polmerom r. Ker v algoritmu lahko nastopa več front hkrati, naj

bo 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, kjer

je 2D razdalja dist(pk, p) ≤ r.

Za iskanje točk uporabimo dvonivojsko iskalno podatkovno strukturo z delitvijo

ravnine 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, koliko

točk bo v povprečju prisotnih med prebiranjem, s tem pa določiti število trakov in

njihovo širino. Optimalno število trakov nT določimo s formulo, povzeto po [89]:

nT = b 10.6

√n ln ln n

ln nc

Širino traku tw določimo trivialno:

tw = bmax−bmin

nT,

kjer sta bmin in bmax koordinati y oklepajočega pravokotnika v prečnem prerezu

oblaka točk P .

Trakove predstavimo s sekljalno tabelo, kar omogoča dostop do ustreznega traku

v konstantnem času, kjer je ključ iskanja koordinata y točke p. Vsak trak je

implementiran kot determinističen seznam s preskakovanjem, kjer končno mesto

točke p v drevesu najdemo s koordinato x. Časovna zahtevnost vstavljanja in

brisanja 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.

Page 57: Un encrypted

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 oddaljenosti

od p.

Slika 6.6: Iskalna struktura.

Page 58: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 103

6.2 Osnovne operacije algoritma

V tem poglavju bomo opisali pogoje za nastanek, odprtje in zaprtje fronte ter kriterij

za vstavljanje trikotnika v fronto.

6.2.1 Odprtje fronte

Algoritmi, 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 za

njegov nastanek so tri nekolinearne točke.

Fronta nastane, ko vstavljanje točke p ne najde točk v bližini. Začetno stanje

vsake fronte je neaktivno, fronta nastopa le kot shramba točk. Odprtje fronte nastopi

takrat, ko fronta preide iz neaktivnega v aktivno stanje. Takrat tvorimo semenski

trikotnik in fronto vstavimo v drevo RT . Orientacija oglišč in s tem smer normale

semenskega trikotnika zavisi od nivoja gnezdenja. Če je fronta zanka, normala kaže v

polprostor, ki ga je prebirna ravnina že obiskala, sicer pa v polprostor na drugi strani

prebirne ravnine. Ker je algoritem namenjen rekonstrukciji vodotesnih površij, ne

pričakujemo primerov, kjer bi bil semenski trikotnik pravokoten na prebirno ravnino.

Primer nastanka fronte prikazuje slika 6.7. Najprej vstavimo točko p0, ki zaradi

prazne okolice ustvari fronto F0 = {p0} (slika 6.7a). Točka p1 pade v neposredno

bližino točke p0, zato jo dodamo fronti F0 = {p0, p1} (slika 6.7b). Točka p2 je

najbližje točki p1, vendar fronta F0 ne more postati aktivna zaradi kolinearnosti

projekcij 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 sta

aktivna fronta F0 = {p0, p1, p3} in neaktivna fronta F1 = {p2}. Vstavljanje fronte v

RT vidimo na slikah 6.4 in 6.5.

Page 59: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 104

Slika 6.7: Nastanek fronte (a in c), dodajanje točke v fronto (b) in odprtje fronte

(d).

6.2.2 Dodajanje trikotnika

Vstavljanje točke spremeni fronto. Fronto ožimo, ko vstavljajoča točka p leži v

njeni notranjosti, sicer fronto širimo. Če p pade neposredno na rob fronte, rob (in

priležen trikotnik) razbijemo na dva dela. Če p sovpada s točko fronte, vstavljanje

za točko p izpustimo. Položaj točke glede na fronto preverimo z vsebnostnim

testom točka-mnogokotnik [49, 73], pri čemer upoštevamo tudi nivo gnezdenja

fronte (notranjost prstana je dejansko zunanjost mnogokotnika, notranjost zanke

pa navadna notranjost). Fronto spremenimo s tvorbo novega trikotnika z najbližjim

robom fronte in točko p. Kje in koliko trikotnikov dodamo, pove kot ϕ, ki je kot med

bisektorjem −→b kota 6 pc+pcpc− in vektorjem −→pcp (slika 6.8). S pc označimo najbližjo

toč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 3

možnosti:

Page 60: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 105

Slika 6.8: Določanje vstavljanja.

• če je ϕ > +β (slika 6.9), tvorimo nov trikotnik 4pcpc+piin v fronto dodamo

točko pi (F = {.., pc−, pc, pi, pc+, ..}),

• če je ϕ < −β (slika 6.10), tvorimo nov trikotnik 4pc−pcpjin v fronto dodamo

točko pj (F = {.., pc−, pj, pc, pc+, ..}),

• če je ϕ ≤ |β| (slika 6.11), lahko tvorimo dva trikotnika 4pc−pcp in 4pcpc+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 roba

fronte oddaljena za manj kot toleranca ε, preverimo, ali bi morda s p razdelili

obstoječ trikotnik. Toleranca zavisi od polmera r, kjer velja ε ¿ r.

6.2.2.1 Uravnavanje fronte

Po vstavljanju točke pokličemo hevristične funkcije, ki pomagajo zakrpati morebitne

odprtine levo in desno od vstavljenega trikotnika. Želimo, da je fronta čim bližje

prebirni 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

Page 61: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 106

Slika 6.9: Tvorba trikotnika 4pcppc+ .

Slika 6.10: Tvorba trikotnika 4pc−ppc .

triangulacije [92], kjer kote med robovi front računamo v 3D.

6.2.3 Zaprtje fronte

Zaprtje fronte je dogodek, ki nastopi ob zaključku dela površja. Situacij, ki privedejo

do zaprtja fronte, je lahko več. Slika 6.12a prikazuje situacijo, ko vstavljena točka p v

svoji bližnji okolici najde vse točke, ki ležijo na fronti F , točka p pa se nahaja znotraj

F . Fronto zapremo tako, da s točko p in vsakim robom F zgradimo trikotnik. V

praksi se lahko zgodi, da vseh trikotnikov ni možno zgraditi na preprost način, zato

raje uporabimo algoritem za triangulacijo enostavnega mnogokotnika [93]. Rezultat

zaprtja vidimo na sliki 6.12b. Fronto odstranimo iz drevesa RT .

Page 62: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 107

Slika 6.11: Tvorba trikotnikov 4pc−ppc in 4pcppc+ .

Druga situacija, ki pripelje do zaprtja fronte, je navadno vstavljanje. Gradnji

trikotnika s točko p sledi preverjanje s hevrističnimi funkcijami, ki z računanjem

kotov med robovi fronte vstavijo dodatne trikotnike. Postopek lahko vstavi toliko

trikotnikov, da fronto zapremo.

Tretja možna situacija nastopi ob deljenju fronte, ki ga bomo opisali v

nadaljevanju. 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 prvo

točko nove fronte. Če je dist(pi−, pi) ≤ r in dist(pi+, pi) ≤ r, dodamo trikotnik

4pi−pipi+, pi pa zbrišemo iz fronte. Nato se postavimo v pi+ in pi−, kjer enako

preverimo za vsako točko posebej. Trikotnik tvorimo s krajšimi robovi. Postopek

ponavljamo, dokler obstajajo robovi z dolžino ≤ r. Če pridemo do konca, fronto

zapremo. Primer vidimo na sliki 6.13.

6.3 Potek algoritma

Prebirni algoritem zahteva pripravo podatkov. Točke uredimo glede na koordinato

z. V primerih, ko se večja skupina točk nahaja na ravnini, je zaželjeno, da

Page 63: Un encrypted

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 naj

velja:

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čimo

s p, ki gre skozi naslednje korake:

1. Točki p poiščemo bližnjo okolico C.

Page 64: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 109

2. Filtriramo C.

3. Točko p vstavimo.

6.3.1 Filtriranje bližnjih točk

Iskanje bližnje okolice smo že opisali v podpoglavju 6.1.3. Rezultat iskanja bližnje

okolice vrne seznam k točk C, urejen po oddaljenosti od točke p. Bližnje točke

najprej uredimo v skupine po pripadnosti glede na fronto, zato G preoblikujemo

v obliko C = {C0, C1, .., Cn−1}, kjer n predstavlja število različnih front. Z Ci pa

označ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 razdelimo

v intervale znotraj fronte Fi, če je fronta Fi aktivna. Z Cji označimo skupino točk

j−tega intervala fronte Fi, Ci pa opišemo z Ci = {C0i , C

1i , .., C

mi−1i }, kjer je mi

število podskupin v Ci. Skupino točk neaktivne fronte Fi označimo z C0i .

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 na

pripadnost frontam vrne C0 = C, saj vse točke pripadajo fronti F0. Nato C0

razdelimo v zvezne intervale glede na vrstni red v F0 in kot rezultat dobimo

C00 = {p0, p1, p2, p3, p4}, C1

0 = {p7, p8} in C20 = {p10, p11} (slika 6.14b). Iz primera

lahko sklepamo, da je edina skupina točk, s pomočjo katerih bomo fronto spreminjali

(in pri tem ohranili enostavnost mnogokotnika), skupina C00 . Za odstranitev

nezaželenih skupin točk vpeljemo pojem vidnosti, ki smo ga spoznali že pri omejeni

Delaunayevi triangulaciji. Množico omejitev Ec nadomestimo z napredujočimi

frontami in vidnost definiramo na naslednji način:

Točki pi in pj sta medsebojno vidni, če rob pipj ne seka nobenega roba

napredujočih front.

Page 65: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 110

Slika 6.14: Razdelitev točk na intervale (a) in odstranitev točk z upoštevanjem

vidnosti (b).

Iz skupin Cji izločimo vse točke, ki niso vidne iz p. Izločanje v primeru na

sliki 6.14a zbriše skupini C10 (p7, p8) in C2

0 (p10, p11) ter točko p0, tako da je rezultat

C00 = {p1, p2, p3, p4} (slika 6.14b).

Rezultat iskanja bližnjih točk vrne seznam rešitev urejen po oddaljenosti, ki vsebuje

k točk C = {pr0, pr1, .., pr(k−1)}. Bližnje točke najprej uredimo v skupine po

pripadnosti 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, ki

pripadajo 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 fronto

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

Page 66: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 111

odveč. 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 imamo

opravka le z eno skupino točk C0i , zgradimo trikotnik z robovoma ob najbližji točki

intervala. Če je število skupin m > 1, bomo fronto F0 delili.

6.3.2.1 Delitev fronte

Delitev front je postopek, kjer fronta razpade na več manjših front, ki vsaka naprej

samostojno tvori svoj del površja. Če z nI označimo število skupin, fronta razpade

na 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 drevesuRTvidimo 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 vRT postavimo

pod F0 (slika 6.16d).

Page 67: Un encrypted

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.

Page 68: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 113

Natančen postopek priredne delitve v dve novi frotni prikazuje slika 6.17. Za

vse skupine točk Cj0 izberemo najbližje točke pcj in mesta vstavljanja razvrstimo

v krožnem zaporedju glede na točko p (slika 6.17a). Nato zgradimo trikotnike z

vstavljanjem 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 trikotnike4pejps(j+1)p (slika 6.17c). Rezultat

so 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, ki

se v nadaljevanju ne bodo več spreminjale. Zato takoj po deljenju poskusimo z

Page 69: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 114

upoštevanjem razdalj med sosednjimi robovi zgraditi čim več trikotnikov. Postopek

smo opisali pri zapiranju front v poglavju 6.2.3.

6.3.3 Vstavljanje točk v več front

Vstavljanje v več front hkrati predstavlja dogodek združitve. Razpolagamo s

skupinami točk C0, C1, .., Cn−1. Združitev izvedemo s pomočjo postopka za

vstavljanje točke v eno fronto, opisanega v predhodnem poglavju, opravimo pa ga v

treh 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čnemo

z 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 po

navadnem postopku vstavljanja (slika 6.18b-d). V primeru, da trikotnika ni možno

tvoriti (slika 6.19a) zaradi kolinearnosti, s točko p ustvarimo novo neaktivno fronto

(slika 6.19b).

Page 70: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 115

Slika 6.18: Združitev neaktivnih front kot odprtje.

Slika 6.19: Združitev neaktivnih front ni mogoča zaradi kolinearnosti projekcij (a),

zato tvorimo novo neaktivno fronto (b).

Združitev aktivnih front lahko nastopa v dveh oblikah. Če združujemo fronte

na istem nivoju gnezdenja v RT , govorimo o priredni združitvi (slika 6.20), sicer

govorimo o podredni združitvi (slika 6.21).

Mešana združitev front združi aktivno in neaktivno fronto. Če združujemo

aktivno fronto F0 in aktivno fronto F1, vstavimo vse točke F0 v F1.

Slika 6.22 in slika 6.23 prikazujeta deljenje oz. združevanje front na primeru.

6.3.4 Dogodkovne točke

Dogodkovne točke so nujen mehanizem za pravilno delovanje algoritma. Njihova

naloga je medsebojno izključevanje nasprotujočih si dogodkov. Razlog leži v

parametru r polmera kroga, ki je osnovni pogoj za izbiro dogodkov. Para

nasprotujočih si dogodkov sta odprtje-zaprtje in delitev-združitev.

Page 71: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 116

Slika 6.20: Priredna združitev

Slika 6.21: Podredna združitev.

Page 72: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 117

Slika 6.22: Deljenje na primeru.

Page 73: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 118

Slika 6.23: Združevanje na primeru.

Page 74: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 119

Dogodkovno točko ep definiramo kot četverko ep = (Dx, p, F, T ), kjer Dx

označuje tip dogodka in p točko, ki je sprožila dogodek Dx. F označuje seznam

front, ki so bile vpletene v dogodek in T seznam trikotnikov, ki so bili ustvarjeni

ob vstavljanju točke p. Dogodkovno točko ustvarimo ob dogodkih odprtja (Do),

zaprtja (Dc), deljenja (Dd) in združevanja (Dj). Dogodkovno točko odstranimo, ko

je prebirna ravnina od dogodka Dx oddaljena za več kot r. Dogodkovne točke zaradi

hitrega iskanja shranimo v podatkovno strukturo za hranjenje točk fronte. Iskanje

bližnjih točk G zdaj razdelimo v C = Cp + Ce, kjer je Cp seznam navadnih točk, ki

pripadajo frontam, in Ce seznam dogodkovnih točk.

Slika 6.24: Dogodkovna točka ep (a) in vstavljanje znotraj dogodkovne točke (b).

Uporaba dogodkovne točke je preprosta. Če pri iskanju okolice seznam Ce ni

prazen, vse točke epi ∈ Ce označujejo dogodke, ki so se zgodili v okolici. Slika 6.24a

prikazuje nastanek dogodkovne točke ep = (Dx, p, {F}, {t0, t1, t2, t3, t4, t5}).Vstavljanje točke p+ vrne seznam Ce = {ep}. Če točka p+ leži znotraj trikotnika

ti ∈ T (gledamo projekcije na ravnino), ti razdelimo, nove trikotnike pa dodamo v

seznam T . Tako točka p+ razdeli trikotnik t2 v t2, t9 in t10 ter osveži dogodkovno

točko, ki je zdaj ep = (Dx, p, {F}, {t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10}) (slika 6.24b).

Page 75: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 120

Če ne najdemo vsebnosti, točko vstavimo na običajen način, kjer onemogočimo

nasprotujoč si dogodek. Če Ce vsebuje več dogodkovnih točk, pri iskanju vsebnosti

preverimo unijo⋃

i Ti. V primeru, ko točka razdeli trikotnik, ki je shranjen v

seznamu T dogodkovne točke ep, vendar točke ep ne najdemo, moramo s spremembo

trikotnika osvežiti seznam T .

6.3.4.1 Dopolnitev odprtja/zaprtja

Zaradi prevelikega r se lahko zgodi, da smo fronto zaprli predčasno (slika 6.25a).

Napaka se pojavi takoj, ko prebirna ravnina obišče naslednjo točko p+, ki pade

blizu p in bi jo v primeru še prisotne fronte F0 vanjo vstavili. Ker fronte F0 ni

več, ustvarimo novo fronto F1 (slika 6.25b), v katero ob nadaljevanju vstavimo tudi

točko p++ (slika 6.25c). Če pri zaprtju fronte F0 (slika 6.25a) ustvarimo dogodkovno

točko ep = (Dc, p, {F0}, T ), dobimo želen rezultat (slika 6.25d).

Dogodek odprtja Do preprečuje situacije, ki bi vodile do takojšnjega zaprtja

fronte.

Slika 6.25: S točko p prehitro zapremo fronto (a), zato z naslednjo točko p+ tvorimo

novo fronto (b), ki gradi nepravilno površje naprej (c) in željen rezultat (d).

6.3.4.2 Dopolnitev delitve/združitve

Podobno izključevanje potrebujemo tudi pri združitvah in delitvah front. Poteka na

povsem enak način, razlika je le pri delitvi, ko fronta Fi razpade na fronte Fi0, Fi1,

Page 76: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 121

.., Fin−1, kjer je n število front. Takrat v seznam F dogodkovne točke ep vstavimo

vse nove fronte (F = {Fi0,Fi1, ..,Fin−1}).

6.3.5 Razširitev opisa napredujoče fronte z delitvijo robov

Iskanje fronte temelji na iskanju točk znotraj krožnice s polmerom r. Fronto tako

najdemo preko točke fronte. Ob tvorbi trikotnikov se dogaja, da tvorimo robove,

ki so daljši od r. Eno od nezaželjenih situacij vidimo na sliki 6.26a, ko se točka p

nahaja blizu fronte F0, vendar rezultat iskanja ne najde točke. V tem primeru s

točko p pričnemo graditi novo fronto F1 (slika 6.26b).

Slika 6.26: Primer napake, ko fronte ne najdemo (a), rezultat vstavljanja pa je nova

fronta (b).

Drugi primer napake (slika 6.27a) nastopi, ko zaradi dolgega roba najdemo

napačno bližnjo točko. S preverjanjem vidnosti jo izločimo, čemur spet sledi tvorba

nove fronte (slika 6.27b).

V večini primerov takšni situaciji ne povročita škode, ker je velika verjetnost, da

bo vstavljanje naslednjih točk na tej lokaciji vodilo do združitve front. Vendar se

na to ne moremo zanašati. Možna rešitev je dopolnitev dolgih robov z dodatnimi

točkami. Dolžino roba pipj delimo z r, kar nam da število pomožnih točk, le-te

pa enakomerno porazdelimo po robu pipj. Vsaka pomožna točka kaže na bližnje

oglišče roba pipj, to je bodisi točka pi bodisi pj, kar je tudi rezultat iskanja.

Page 77: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 122

Slika 6.27: Primer napake, ko najdemo napačno bližnjo točko, ki jo z vidnostjo

odtranimo (a), rezultat pa je nova fronta (b).

Pomožne točke vstavimo v podatkovno strukturo za iskanje takoj, ko rob razdelimo,

in obratno, točke odstranimo takoj, ko rob ni več del fronte. Filtriranje točk

dopolnimo z izločanjem večkratnega pojavljanja točke. Rešitev obeh situacij vidimo

na slikah 6.28 in 6.29.

Slika 6.28: Ob vstavljanju najdemo pomožno točko (a) in rezultat vstavljanja (b).

Slika 6.29: Ob vstavljanju najdemo pomožno točko (a) in rezultat vstavljanja (b).

Page 78: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 123

6.3.6 Krpanje lukenj

V praksi pogosto naletimo na oblake točk, ki ne ustrezajo kriteriju vzorčne poti.

Tako se lahko pojavijo deli brez točk oz. luknje, ki jih moramo zakrpati, saj je naš cilj

vodotesno površje. Če se luknje pojavijo v smeri prebiranja, jih algoritem že v osnovi

zakrpa, kot rezultat pa dobimo dolge in ozke trikotnike. Luknje, ki jih moramo

zakrpati kasneje, se odražajo kot fronte, ki se že dalj časa niso spreminjale. S časom

mislimo na višinsko razliko med zadnjo vstavljeno točko v fronto in prebirno ravnino.

Višinsko razliko definiramo kot dvakratnik polmera krogle d = 2r. Vsaka fronta

hrani najnižjo in najvišjo točko, zato ob premiku prebirne ravnine preverimo, ali

katera izmed front predstavlja potencialno luknjo. Če jo najdemo, fronto zakrpamo

s trikotniki, pri čemer uporabimo algoritem za triangulacijo mnogokotnika [93].

6.4 Analiza časovne zahtevnosti

Prvi strošek algoritma je ureditev n točk T1 = O(n log n). Prebiranje zajema

vstavljanje točke p v iskalno strukturo, iskanje najbližjih točk znotraj polmera r,

pogosto tudi brisanje točke iz iskalne strukture in računanje vidnosti. Dostop do

izbranega traku opravimo v O(1), za iskanje točke pmin znotraj traku, ki je od

p oddaljena za ≤ |x − r|, potrebujemo O(log m), kjer je m število točk v traku.

Sprehod od pmin do pmax opravimo v času O(k), kjer je k število potencialno bližnjih

točk. Skupno iskanje bližnjih točk znotraj traku s preverjanjem oddaljenosti od p

opravimo v O(1) + O(log m) + O(k). Ker je m ¿ n in k ¿ m, lahko zapišemo,

da je pričakovana časovna zahtevnost iskanja bližnjih točk T2a = O(log m). Število

trakov, ki jih preiskujemo, je zanemarljivo majhno glede na n in ne vpliva na oceno

časovne zahtevnosti. Preverjanje vidnosti opravimo z grobim pristopom preverjanja

presečišč, kar nam da časovno zahtevnost O(l2), če je l število vseh bližnjih točk.

Ker je l ¿ m, je strošek zanemarljiv, pričakovano časovno zahtevnost tega koraka

Page 79: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 124

pa ocenimo s T2b = O(m). Skupna časovna zahtevnost algoritma je

T = T1 + n (T2a + T2b) = O(n log n) + n (O(log m) + O(m)).

6.5 Rezultati

Algoritem smo testirali na večih primerih, ki niso vsebovali šuma in ki so zadostili

kriteriju vzorčne poti. Teste smo opravljali pod operacijskim sistemom WindowsXP

na osebnem računalniku z dvojedrnim procesorjem Intel s hitrostjo 2,67 GHz in 2,62

GB delovnega pomnilnika. Naš algoritem smo primerjali z algoritmom CRUST [4],

kjer smo se osredotočili na merjenje izvajalnih časov (tabela 6.1). Primere iz

tabele vidimo na sliki 6.30. Algoritem CRUST je zaradi večje stabilnosti zmožen

rekonstruirati več površij kot naš algoritem. Rezultati so pokazali, da se je na

primerih, pri katerih delujeta oba algoritma, naš algoritem izkazal kot bistveno

hitrejši.

Tabela 6.1: Primerjava izvajalnih časov med našim algoritmom in algoritmom CRUST.primer št. točk CRUST [s] naš algoritem [s]

(a) 902 1.120 0.032

(b) 1748 2.110 0.109

(c) 2592 10.050 0.320

(d) 56100 484.100 6.141

Ob reševanju problema smo naleteli na številna vprašanja, na katera nismo

uspeli v celoti odgovoriti. Osnova ideja postopka za rekonstrukcijo z napredujočimi

frontami je sicer preprosta, zahtevni pa so detajli algoritma. Osnovni problem

algoritma je uporabniška izbira kriterija razdalje, ki skupaj z vstavljajočo točko

definira iskalni prostor. Če je izbrana razdalja premajhna, ne moremo zgraditi

površja. Če je razdalja prevelika, se lahko zgodi, da algoritem odpove. Izbira razdalje

zavisi od porazdelitve in gostote vhodnega oblaka točk. Algoritem je primeren le

za enakomerno porazdeljene oblake točk, občutljiv pa je tudi na šum, saj tvori

Page 80: Un encrypted

POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 125

interpolacijsko površje. Kljub nekaterim pomankljivostim in nedodelanosti kriterijev

je algoritem zmožen uspešno rekonstruirati preprostejše oblake točk z enakomerno

porazdelitvijo.

Slika 6.30: Rekonstrukcija površja krogle (a), kapsul (b), obroča (c) in zajca (d) z

algoritmom CRUST (levo) in z našim algoritmom (desno).

Page 81: Un encrypted

Poglavje 7

Zaključek

Predstavljena doktorska disertacija obravnava področje triangulacij, temelječih

na prebirni paradigmi. Osredotočili smo se na problem omejene Delaunayeve

triangulacije in na problem rekonstrukcije površja iz oblaka točk. V uvodu smo

opredelili oba problema in poudarili redkost uporabe prebirne tehnike pri reševanju

Delaunayeve triangulacije, še posebej pri reševanju prostorskih geometrijskih

problemov, kot je rekonstrukcija površja. V prvem poglavju smo opisali prebirno

paradigmo in našteli nekaj algoritmov, ki jo s pridom uporabljajo. Vsebinsko je

naloga razdeljena v dva dela.

V prvem delu smo definirali Delaunayevo in omejeno Delaunayevo triangulacijo

ter napravili pregled sorodnih raziskav. Večina algoritmov omejene Delaunayeve

triangulacije temelji na dveh korakih, pri čemer v prvem koraku tvorimo klasično

Delaunayevo triangulacijo, v drugem pa vstavimo vse omejujoče robove, kar kot

rezultat vrne omejeno Delaunayevo triangulacijo. Tako smo napravili pregled najbolj

znanih algoritmov klasične DT. Ker obstajajo tudi enokoračni postopki, ki jih ni

prav veliko, smo opisali relativno star, a najbolj znan algoritem deli in vladaj.

Sledil je opis razvoja lastnega algoritma za CDT, ki temelji na prebirni paradigmi

in izhaja iz ideje zelo učinkovitega algoritma klasične Delaunayeve triangulacije,

ki ga je predstavil Žalik. Njegov algoritem uporablja napredujočo fronto. S

126

Page 82: Un encrypted

POGLAVJE 7. ZAKLJUČEK 127

spretno implementacijo podatkovnih struktur in uporabo hevristik, s katerimi

zmanjša zamenjave nelegalnih trikotnikov, je algoritem zelo hiter, pomnilniško

varčen in odporen na različne porazdelitve točk. Z vpeljavo omejitev smo algoritem

ustrezno preuredili, ga izboljšali in s tem razvili lasten algoritem za tvorbo omejene

Delaunayeve triangulacije. Pri lastnem prebirnem algoritmu CDT smo znanosti

prispevali naslednje novosti:

• sočasna obravnava dogodka točke in dogodka roba;

• lociranje roba brez poizvedb v podatkovne strukture (dogodek roba sledi

dogodku točke, vstavljena točka je končno oglišče roba);

• vpeljava začetnega trikotnika, ki poenoti in poenostavi implementacijo;

• trije različni načini vstavljanja robov glede na njihovo lego v triangulaciji

(sprehod po fronti, sprehod po triangulaciji, mešani sprehod);

• hitro preverjanje, ali so vstavljajoči robovi že del končne rešitve;

• pregled postopkov omejene Delaunayeve triangulacije.

Osrednja hipoteza prvega dela disertacije izhaja iz učinkovitosti algoritma

klasične Delaunayeve triangulacije, ki ponuja zelo dobro osnovo za posplošitev

algoritma z upoštevanjem omejitev v obliki robov. Tako smo postavili naslednjo

hipotezo:

Hipoteza 1:

Prebirni algoritem omejene Delauneyeve triangulacije, ki uporablja

napredujočo fronto in ustrezne hevristike, je pri enakomerno in

neenakomerno porazdeljenih vhodnih podatkih v splošnem hitrejši od do

sedaj znanih algoritmov omejene Delaunayeve triangulacije.

Page 83: Un encrypted

POGLAVJE 7. ZAKLJUČEK 128

Hipotezo smo potrdili z izvajanjem algoritma nad različnimi podatki, ki so v

praksi najpogostejši. V večini testiranih primerov se je naš algoritem obnesel bolje

od do sedaj znanih algoritmov.

V drugem delu disertacije smo predstavili problem rekonstrukcije površja iz

oblaka točk, kjer do danes še ne obstajajo hitre, stabilne in na šum povsem

neobčutljive rešitve. Podali smo pregled obstoječih algoritmov. Podrobneje smo

opisali algoritem CRUST, ki predstavlja prvi algoritem rekonstrukcije s teoretičnim

dokazom. Njegova prednost je, da za svoje delovanje ne potrebuje uporabniških

parametrov, njegova največja slabost pa je počasnost. Opisali smo tudi algoritem

BPA, ki nasprotno od algoritma CRUST zmore rekonstruirati površja zelo velikih

oblakov točk v relativno kratkem času. V jedru drugega dela disertacije smo

predstavili lasten algoritem rekonstrukcije površja iz oblaka točk, ki temelji na

prebirni paradigmi, površje pa tvori z vodenjem napredujočih front. Naš doprinos

k znanosti je:

• preslikava 3D problema na prebirno ravnino;

• pretvorba 3D problema iskanja bližnjih točk v 2D problem;

• kontrola rekonstrukcije z 2D napredujočimi frontami;

• hevristike za nastajanje, odpiranje, združevanje, deljenje in zapiranje

napredujočih front;

• pregled postopkov za rekonstrukcijo površja iz oblaka točk.

Povod za razvoj lastnega algoritma je bilo vprašanje, ali je možno idejo

prebirnega algoritma klasične Delaunayeve triangulacije prenesti v prostor in

rekonstruirati površje. Tako smo postavili naslednjo hipotezo:

Page 84: Un encrypted

POGLAVJE 7. ZAKLJUČEK 129

Hipoteza 2:

Z ustreznimi hevristikami za nadzor napredujočih front je možno sestaviti

algoritem s prebiranjem za rekonstrukcijo površja iz oblaka točk.

Hipotezo smo potrdili z implementacijo algoritma, ki uspe opraviti rekonstrukcijo

pod naslednjima pogojema:

• oblak točk je porazdeljen enakomerno po kriteriju vzorčne poti, in

• v oblaku točk ni prisotnega šuma ali pa je šum šibak.

Page 85: Un encrypted

Literatura

[1] Agarwal, P.K., L. Arge, K. Yi, I/O-efficient construction of constrained

Delaunay triangulations, Proceedings of the 3rd European Symposium on

Algorithms, 2005, pp. 355–366.

[2] Algorri, M.E., F. Schmitt, Surface reconstruction from unstructured 3D data,

Computer Graphics Forum, vol. 15, no. 1, 1996, pp. 47-–60.

[3] Amenta, N., M.W. Bern, M.K. Kamvysselis, Crust: A new Voronoi-based

surface reconstruction algorithm, Proceedings of the 25th Annual Conference

on Computer Graphics and Interactive Techniques, 1998, pp. 415–422.

[4] Amenta, N., S. Choi, R. Kolluri, The power crust, union of balls, and the medial

axis transform, Computational Geometry: Theory and Applications, vol. 19,

no. 2-3, 2001, pp. 127–153.

[5] Andersson, A., Balanced Search Trees Made Simple, Proceedings of the 3rd

Workshop on Algorithms and Data Structures, 1993, pp. 60–71.

[6] Anglada, M.V., An improved incremental algorithm for constructing restricted

Delaunay triangulation, Computers & Graphics, vol. 21, no. 2, 1997, pp. 215–

223.

[7] Arkin, E.M., H. Held, J.S.B. Mitchell, S.S. Skiena, Hamilton triangulations for

fast rendering, Visual Computer, vol. 12, no. 9, 1996, pp. 345–405.

130

Page 86: Un encrypted

LITERATURA 131

[8] Arya, S., D.M. Mount, N.S. Netanyahu, R. Silverman, A.Y. Wu, An Optimal

Algorithm for Approximate Nearest Neighbor Searching, Journal of the ACM,

vol. 45, no. 6, 1998, pp. 891—923.

[9] Attali, D., r-regular shape reconstruction from unorganized points, Proceedings

of the 13th Annual Symposium on Computational Geometry, 1997, pp. 248–253.

[10] Aurehammer F., Voronoi diagrams - A survey of a Fundamental Geometric

Data Structures, ACM Computing Surveys, vol. 23, no. 3, 1991, pp. 345–405.

[11] Baader, A., G. Hirzinger, Three dimensional surface reconstruction based on a

selforganizing Kohonen map, Proceedings of the 6th International Conference

of Advanced Robotics, 1993, pp. 273–278.

[12] Bajaj, C.L., F. Bernardini, G. Xu, Automatic reconstruction of surfaces and

scalar fields from 3D scans, Proceedings of the 22nd Annual Conference on

Computer Graphics and Interactive Techniques, 1995, pp. 109—118.

[13] Bartling, F., K. Hinrichs, A plane-sweep algorithm for finding a closest pair

among convex planar objects, Proceedings of the 9th Annual Symposium on

Theoretical Aspects of Computer Science, 1992, pp. 221–232.

[14] Bentley, J.L, B.W. Weide, C.Y. Andrew, Optimal Expected-Time Algorithms

for the Closest Point Problems, ACM Transactions on Mathematical Software,

vol. 6, 1980, pp. 563–580.

[15] Bernardini, F., M. Mittleman, H. Rushmeier, C. Silva, G. Taubin, The

ball-pivoting algorithm for surface reconstruction, IEEE Transactions on

Visualization and Computer Graphics, vol. 5, no. 4, 1999, pp. 349–359.

[16] Bernardini, F., H. Rushmeier, The 3D Model Acquisition Pipeline, Computer

Graphics Forum, vol. 21, no. 2, 2002, pp. 149–172.

Page 87: Un encrypted

LITERATURA 132

[17] Bittar, E., N. Tsingos, M.P. Gascuel, Automatic reconstruction of unstructured

data: Combining medial axis and implicit surfaces, Computer Graphics Forum,

vol. 14, no. 3, 1995, pp. 457–468.

[18] Bu, L., B. Nickerson, Multidimensional orthogonal range search using tries,

Proceedings of the 15th Canadian Conference on Computational Geometry,

2003, pp. 161–165.

[19] de Berg, M., M. van Kreveld, M. Overmars, O. Schwarzkopf, Computational

Geometry - Algorithms and Applications, Springer-Verlag, Berlin, 1997.

[20] van Bemmelen, J., W. Wuak, M. van Hekken, P. Oosterom, Vector vs.

raster-based algorithms for cross country movement planning, Auto Carto 11

Proceedings, 1993, pp. 304–317.

[21] Boissonnat, J-D., Geometric structures for three-dimensional shape reconstruc-

tion, ACM Transactions on Graphics, vol. 3, 1984, pp. 266-–286.

[22] Chew, L.P., Constrained Delaunay triangulations, Algorithmica, vol. 4, no. 1,

1989, pp. 97–108.

[23] Cole, R., M. Sharir, C.K. Yap, On k-hulls and related problems, SIAM Journal

on Computing, vol. 16, no. 1, 1987, pp. 61–77.

[24] Curless, B., M. Levoy, A volumetric method for building complex models

from range images, Proceedings of the 23rd Annual Conference on Computer

Graphics and Interactive Techniques, 1996, pp. 303–312.

[25] Devillers, O., S. Pion, M. Teillaud, Walking in a triangulation, Proceedings of

the 17th Annual Symposium on Computational Geometry, 2001, pp. 106–114.

[26] T.K. Dey, S. Goswami, Tight Cocone: A water-tight surface reconstructor,

Journal of Computing and Information Science in Engineering, vol. 3, 2003,

pp. 302–307.

Page 88: Un encrypted

LITERATURA 133

[27] Domiter, V., B. Žalik, Sweep-line algorithm for constrained Delaunay

triangulation, International Journal of Geographical Information Science, vol.

22, no. 4, 2008, pp. 449–462.

[28] Dwyer, R.A., A faster divide-and-conquer algorithm for constructing Delaunay

triangulations, Algorithmica, vol. 2, no. 2, 1987, pp. 137–151.

[29] Dyn, N., I. Goren, and S. Rippa, Transforming triangulations in polygon

domains, Computer Aided Geometric Design, vol. 10, no. 6, 1993, pp. 531-

–536.

[30] Edelsbrunner, H., R. Seidel, Voronoi diagrams and arrangements, Discrete and

Computational Geometry, vol. 1, no. 1, 1986, pp. 25–44.

[31] Edelsbrunner, H., L.J. Guibas, Topologically sweeping an arrangement,

Proceedings of the 18th Annual ACM Aymposium on Theory of Computing,

1986, pp. 389–403.

[32] Edelsbrunner, H., T.S. Tan, A quadratic time algorithm for minmax length

triangulation, Proceedings of the 32nd IEEE Symposium on Foundations of

Computer Science, 1991, pp. 414–423.

[33] Edelsbrunner, H., T.S. Tan, R. Waupotitsch, An O(n2 log n) time algorithm for

the minmax angle triangulations, Proceedings of the 6th Annual Symposium on

Computational Geometry, 1992, pp. 44–52.

[34] Edelsbrunner, H., E. Mücke, Three-dimensional alpha shapes, ACM

Transactions on Graphics, vol. 13, no. 1, 1994, pp. 43–72.

[35] Eppstein, D., The farthest point Delaunay triangulation minimizes angles,

Computational Geometry: Theory and Applications, vol. 1, no. 3, 1992, pp.

143–148.

Page 89: Un encrypted

LITERATURA 134

[36] Eppstein, D., Approximating the minimum weight triangulation, Proceedings

of the 3rd Annual ACM-SIAM Symposium on Discrete Algorithms, 1992, pp.

48–57.

[37] Evans, F., S. Skiena, A. Varshney, Optimizing triangle strips for fast rendering,

Proceedings of the 7th Conference on Visualization, 1996, pp. 319–326.

[38] Everett, H., J.-M. Robert, M. van Kreveld, An optimal algorithm for the (≤ k)-

levels, with applications to separation and transversal problems, Proceedings of

the 9th Annual ACM Symposium on Computational Geometry, 1993, pp. 38–

46.

[39] Fang, T.-P., L. Piegl, Delaunay triangulation using a Uniform Grid, IEEE

Computer Graphics & Applicatins, vol. 13, no. 3, pp. 425–436.

[40] Fang, T.-P., L. Piegl, Algorithm for Constrained Delaunay Triangulation, The

Visual Computer, vol. 10, no 5., 1994, pp. 255–265.

[41] de Floriani, L., E. Puppo, An On-Line Algorithm for Constrained Delaunay

Triangulation, Graphical Models & Image Processing, vol. 54, no. 4, 1992, pp.

290–300.

[42] Fortune, S., A sweep-line algorithm for Voronoi diagrams, Algorithmica, vol. 2,

no. 2, 1987, pp. 153–174.

[43] Frey, P., H. Borouchaki, P. George, Delaunay tetrahedralization using an

advancing front approach, Proceedings of the 5th International Meshing

Roundtable, 1996, pp. 31–46.

[44] Fua, P., P.T. Sander, Segmenting unstructured 3D points into surfaces,

Proceedings of the 2nd European Conference on Computer Vision, 1992, pp.

676–680.

Page 90: Un encrypted

LITERATURA 135

[45] George, P.L, Automatic mesh generation: Application to Finite Element

Methods, John Wiley & Sons, New York, 1992.

[46] Graf, T., K. Hinrics, A plane-sweep algorithm for the all-nearest-neighbours

problem for a ste of convex planar objects, Proceedings of the 3rd Workshop

Algorithms Data Struct, vol. 709, 1993, pp. 349–360.

[47] Guibas, L., J. Stolfi, Primitives for the manipulation of general subdivisions and

the computation of Voronoi diagrams, ACM Transactions on Graphics, vol. 4,

no. 2, 1985, pp. 75–123.

[48] Guibas, L., D. Knuth, M. Sharir, Randomised incremental construction of

Delaunay and Voronoi diagrams, Algorithmica, vol. 7, no. 4, 1992, pp. 381–

413.

[49] Guid, N., Računalniška grafika, Univerza v Mariboru, Fakulteta za

elektrotehniko, računalništvo in informatiko, Maribor, 2001.

[50] Hoppe, H., T. DeRose, T. Duchamp, J. McDonald, W. Stuetzle, Surface

reconstruction from unorganized points, Proceedings of the 19th Annual

Conference on Computer Graphics and Interactive techniques, 1992, pp. 71-

–78.

[51] Hoppe, H., T. DeRose, M. Duchamp, H. Halstead, H. Jin, J. McDonald, J.

Schweitzer, W. Stuetzle, Piecewise smooth surface reconstruction, Proceedings

of the 21st Annual Conference on Computer Graphics and Interactive

Techniques, 1994, pp. 295–302.

[52] Isenburg, M., Y. Liu, J.R. Shewchuk, J. Snoeyink, Streaming computation of

Delaunay triangulations, ACM Transactions on Graphics, vol. 25, no. 3, 2006,

pp. 1049–1056.

[53] Jackson, B., X. Yu, Hamilton cycles in plane triangulations, Journal of Graph

Theory, vol. 41, no. 2, 2002, pp. 138–150.

Page 91: Un encrypted

LITERATURA 136

[54] Kallmann, M., H. Bieri, D. Thalmann, Fully dynamic constrained Delaunay

triangulations, In: Brunnett, G., B. Hamann, H. Mueller, L. Linsen (Eds.),

Geometric Modelling for Scientific Visualization, Springer-Verlag, 2003, pp.

241-–257.

[55] Kallmann, M., Path Planning in Triangulations, Proceedings of the Workshop

on Reasoning, Representation, and Learning in Computer Games, 2005, pp.

49–54.

[56] van Kreveld, M., Digital elevation models and TIN algorithms, In: van Kreveld,

M., J. Nievergelt, T. Roos, P. Widmayer (Eds.), Algorithmic Foundations of

GIS, Lecture Notes in Comp. Science, vol. 1340, Springer-Verlag, 1997, pp.

34–78.

[57] van Kreveld, M., Variations on sweep algorithms: efficient computation of

extended viewsheds and classifications, In: M.J. Kraak, M. Molenaar (Eds.),

Advances in GIS Research II, Taylor & Francis, 1997, pp. 843–855.

[58] Kolingerová, I., A Small Improvement in the Walking Algorithm for Point

Location in a Triangulation, 22nd European Workshop on Computational

Geometry, 2006, pp. 221–224.

[59] Lamot, M., Triangulacija enostavnega mnogokotnika z enakomerno delitvijo

ravnine, doktorska disertacija, Univerza v Mariboru, Fakulteta za elek-

trotehniko, računalništvo in informatiko, 2003.

[60] Lawson, C.L., Software for C1 surface interpolation, In: J.R. Roce (Ed.),

Mathematical Software III, Academic Press, 1977, pp. 161–194.

[61] Lee, D.T., B.J. Schachter, Two algorithms for constructing a Delaunay

triangulation, International Journal of Geographic Information Science, vol.

9, no. 3, 1980, pp. 219–242.

Page 92: Un encrypted

LITERATURA 137

[62] Levcopoulos, C., A. Lingas, Fast algorithms for greedy triangulations, BIT, vol.

32, no. 2, 1992, pp. 280–296.

[63] Lorensen, W.E., H.E. Cline, Marching cubes: A high resolution 3d surface

construction algorithm, Computer Graphics, vol. 21, no. 4, 1987, pp. 163–169.

[64] Medeiros, E., L. Velho, H. Lopes, A Topological Framework for Advancing Front

Triangulation, Proceedings of the 16th Brazilian Symposium on Computer

Graphics and Image Processing, 2003, pp. 45–51.

[65] Mehlhorn, K., Multi-dimensional Searching and Computational Geometry,

Springer-Verlag, Heidelberg, 1984.

[66] Mencl, R., H. Müller, Interpolation and approximation of surfaces from

scattered data points, Proceedings of Eurographics ’98, 1998, pp. 223–233.

[67] Mencl, R., H. Müller, Graph-based surface reconstruction using structures in

scattered point sets, Proceedings of the Computer Graphics International 1998,

1998, pp. 298–311.

[68] Moreau, J.-M., P. Volino, Constrained Delaunay Triangulation Revisited,

Proceedings of the 5th Canadian Conference on Computational Geometry, 1993,

pp. 340–345.

[69] Mücke, E.P., I. Saias, B. Zhu, Fast randomized point location without preprocess-

ing and two- and three-dimensional Delaunay triangulations, Proceedings of the

12th Annual ACM Symposium on Computational Geometry, 1996, pp. 274–283.

[70] Muraki, S., Volumetric shape description of range data using "blobby"model,

Computer Graphics, vol. 25, no. 4, 1991, pp. 217–226.

[71] O’Rourke, J., Computational Geometry in C, Cambridge University Press, New

York, 1994.

Page 93: Un encrypted

LITERATURA 138

[72] van der Poorten, P.M., S. Zhou, C.B. Jones, Topologically-Consistent Map

Generalisation Procedures and Multi-scale Spatial Databases, Proceedings of

the 2nd International Conference on Geographic Information Science, 2002,

pp. 209–227.

[73] Preparata, F.P., M.I. Shamos, Computational Geometry - An Introduction,

Springer-Verlag, New York, 1985.

[74] Ren, X., C. Fowlkes, J. Malik, Scale-invariant contour completion using

conditional random fields, Proceedings of the 10th IEEE International

Conference on Computer Vision, vol. 2, 2005, pp. 1214–1221.

[75] Sharf, A., T. Lewiner, L. Kobbelt, D. Cohen-Or, Competing Fronts for Coars-

to-Fine Surface Reconstruction, Computer Graphics Forum, vol. 25, no. 3, 2006,

pp. 389–398.

[76] Sharir, M., M. Overmars, A simple output-sensitive algorithm for hidden surface

removal, ACM Transactions on Graphics, vol. 11, no. 1, 1992, pp. 1–11.

[77] Shewchuk, J.R., Triangle: Engineering a 2D Quality Mesh Generator

and Delaunay Triangulator, Proceedings of the 1st Workshop on Applied

Computational Geometry, 1996, pp. 124–133.

[78] Shewchuk, J.R., Triangle: a two-dimensional quality mesh generator and

Delaunay triangulator, http://www.cs.cmu.edu/ quake/triangle.html, 2004.

[79] Su, P., R.L.S. Drysdale, A comparisson of sequential Delaunay triangulation

algorithms, Proceedings of the 11th Annual Symposium on Computational

Geometry, 1995, pp. 61–70.

[80] Szeliski, R., D. Tonnesen, Surface modeling with oriented particle systems,

Computer Graphics, vol. 26, no. 2, 1992, pp. 185 - 194

Page 94: Un encrypted

LITERATURA 139

[81] Veltkamp, R.C., Boundaries through scattered points of unknow density,

Graphics Models and Image Processing, vol. 57, no. 6, 1995, pp. 441–452.

[82] Voulgaris, Z., G.D. Magoulas, Extensions of the k nearest neighbour methods

for classification problems, Proceedings of the 26th IASTED Conference on

Artificial Intelligence and Applications, 2008, pp. 23–28.

[83] Wang, H., D. Bell, Extended k-Nearest Neighbours Based On Evidence Theory,

The Computer Journal, vol. 47, no. 6, 2004, pp. 662–672.

[84] Yan, H., H. Wang, Y. Chen, G. Dai, Path Planning Based on Constrained

Delaunay Triangulation, Proceedings of the 7th World Congress on Intellegent

Control and Automation, Chongqing, China, 2008, pp. 5168-5173.

[85] Yang, Y-.J, H. Zhang, J-.H. Yong, W. Zeng, J-.C. Paul, J. Sun, Constrained

Delaunay Triangulation using Delaunay Visibility, In: G. Brunnett, B.

Hamann, H. Mueller, L. Linsen (Eds.), ISVC(1) Advances in Visual Computing,

Springer Berlin/Heidelberg, 2006, pp. 682-–691.

[86] Yu, Y., Surface reconstruction from unorganized points using self-organizing

neural networks, Proceedings of the 10th IEEE Conference on Visualization,

1999, pp. 61–64.

[87] Zadravec, M., B. Žalik, An almost distribution-independent incremental

Delaunay triangulation algorithm, Visual Computer, vol. 21, no. 6, 2005, pp.

384–396.

[88] Zadravec, M., Metode Delaunayeve triangulacije, skoraj neodvisne od

porazdelitve vhodnih točk, doktorska disertacija, Univerza v Mariboru, Fakulteta

za elektrotehniko, računalništvo in informatiko, 2006.

[89] Zadravec, M., A. Brodnik, M. Mannila, M. Wanne, B. Žalik, A practical

approach to the 2D incremental nearest-point problem suitable for different point

distributions, Pattern Recognition, vol. 41, no. 2, 2008, pp. 646–653.

Page 95: Un encrypted

LITERATURA 140

[90] Žalik, B., Geometrijsko modeliranje, Univerza v Mariboru, Fakulteta za

elektrotehniko, računalništvo in informatiko, Maribor, 1999.

[91] Žalik, B., I. Kolingerova, An incremental construction algorithm for Delaunay

triangulation using the nearest-point paradigm, International Journal on

Geographical Information Science, vol. 17, no. 2, 2003, pp. 119–138.

[92] Žalik, B., An efficient sweep-line Delaunay triangulation algorithm, Computer-

Aided Design, vol. 37, no. 10, 2005, pp. 1027–1038.

[93] Žalik, B., Algoritmi računalniške geometrije, Univerza v Mariboru, Fakulteta

za elektrotehniko, računalništvo in informatiko, Maribor, 2007.

Page 96: Un encrypted

Življenjepis

Ime in priimek: Vid Domiter

Rojen: 2. februar 1979, Ptuj, Slovenija

Oče: Branimir Domiter

Mati: Vitoslava Domiter

Šolanje: 1986-1994 Osnovna šola Rače

1994-1998 Prva gimnazija Maribor

1998-2004 UM-FERI: dodiplomski študij; diplomska

naloga z naslovom Obdelava ultrazvočnih medi-

cinskih slik

2004- UM-FERI: doktorski študij

Tujina: 2001 Polletno izpopolnjevanje v okviru projekta

ERASMUS-SOCRATES na Univerzi v Pader-

bornu, Nemčija: delo na projektu Virtual

night-driver

Zaposlitev: 2004- UM-FERI: mladi raziskovalec

141

Page 97: Un encrypted

Bibliografija

VID DOMITER [24680]Osebna bibliografija za obdobje 2004 - 2009

ČLANKI IN DRUGI SESTAVNI DELI

1.01 Izvirni znanstveni članek

1. PIVEC, Boštjan, DOMITER, Vid, A general simplification algorithm,

International journal of computers, 2007, vol. 1, iss. 4, str. 307-311.

http://www.naun.org/journals/computers/ijcomputers-50.pdf. [COBISS.SI-

ID 12331542].

2. PODGORELEC, David, ŽALIK, Borut, DOMITER, Vid, Dealing with

redundancy and inconsistency in constructive geometric constraint solving,

Advances in Engineering Software (1992). [Print ed.], Sep. 2008, vol. 39,

iss. 9, str. 770-786. http://dx.doi.org/10.1016/j.advengsoft.2007.10.003.

[COBISS.SI-ID 12138006] JCR IF (2007): 0.529, SE (67/92), computer

142

Page 98: Un encrypted

BIBLIOGRAFIJA 143

science, interdisciplinary applications, x: 1.122, SE (63/84), computer science,

software engineering, x: 1.003.

3. DOMITER, Vid, ŽALIK, Borut, Sweep-line algorithm for constrained

Delaunay triangulation, International journal of geographical information

science, Apr. 2008, vol. 22, iss. 4, str. 449-462. [COBISS.SI-ID 12266774]

JCR IF (2007): 1.822, SE (18/92), computer science, information systems, x:

1.136, SE (14/31), geography, physical, x: 1.714, SSE (11/44), geography, x:

1.332, SSE (7/56), information science & library science, x: 0.94.

1.03 Kratki znanstveni prispevek

4. DOMITER, Vid, Constrained Delaunay Triangulation using 2LUPS, Contri-

butions to geometric modeling and multimedia, 2004, vol. 4, no. 3, str. 1-17.

[COBISS.SI-ID 8809494].

5. DOMITER, Vid, ŽALIK, Borut, Constrained delaunay triangulation with

sweeping, Contributions to geometric modeling and multimedia, 2006, vol.

6, no. 3, str. 1-17. [COBISS.SI-ID 10907670].

1.08 Objavljeni znanstveni prispevek na konferenci

6. DOMITER, Vid, Constrained Delaunay triangulation using plane subdivision,

V: VIOLA, Ivan (ur.), HLADŮVKA, Jiři (ur.), ŽÁRA, Jiři (ur.). Proceedings

of the 8th Central european seminar on computer graphics, April 19-21, 2004,

Budmerice, Slovakia. Budmerice: [s. n.], 2004, str. 105-110. [COBISS.SI-ID

8720150].

7. ZADRAVEC, Mirko, DOMITER, Vid, KLAJNŠEK, Gregor, Konstrukcija

Delaunayeve lomljenke, V: ZAJC, Baldomir (ur.). Zbornik trinajste

mednarodne elektrotehniške in računalniške konference ERK 2004, 27. - 29.

Page 99: Un encrypted

BIBLIOGRAFIJA 144

september 2004, Portorož, Slovenija. Ljubljana: IEEE Region 8, Slovenska

sekcija IEEE, [2004?], zv. B, str. 19-22. [COBISS.SI-ID 9058838].

8. DOMITER, Vid, ŠPELIČ, Denis, ZADRAVEC, Mirko, Osnovno prevajanje

jezika VRML, V: ZAJC, Baldomir (ur.), TROST, Andrej (ur.). Zbornik

štirinajste mednarodne Elektrotehniške in računalniške konference ERK 2005,

26. - 28. september 2005, Portorož, Slovenija, (Zbornik ... Elektrotehniške

in računalniške konference ERK ...). Ljubljana: IEEE Region 8, Slovenska

sekcija IEEE, 2005, zv. B, str. 7-10. [COBISS.SI-ID 10595350].

9. PIVEC, Boštjan, DOMITER, Vid, A general algorithm for triangular meshes

simplification, V: MASTORAKIS, Nikos E. (ur.). Computer science and

technology, (Electrical and engineering series). [S. l.]: WSEAS, cop. 2007,

str. 611-615. [COBISS.SI-ID 11554326].

1.09 Objavljeni strokovni prispevek na konferenci

10. ŽALIK, Borut, KRIVOGRAD, Sebastian, DOMITER, Vid, The Maribor

cathedral, V: SAMUELČÍK, Martin (ur.). Spring conference on computer

graphics SCCG 2004 in cooperation with ACM SIGGRAPH and Eurographics,

Budmerice, April, 22-24, 2004 : conference materials and posters. Bratislava:

Comenius University, 2004, str. 45. [COBISS.SI-ID 9475862].

11. ŽALIK, Borut, KRIVOGRAD, Sebastian, DOMITER, Vid, The plague sign

in Maribor, V: SAMUELČÍK, Martin (ur.). Spring conference on computer

graphics SCCG 2004 in cooperation with ACM SIGGRAPH and Eurographics,

Budmerice, April, 22-24, 2004 : conference materials and posters. Bratislava:

Comenius University, 2004, str. 46. [COBISS.SI-ID 9468694].

Page 100: Un encrypted

BIBLIOGRAFIJA 145

MONOGRAFIJE IN DRUGA ZAKLJUČENA DELA

2.11 Diplomsko delo

12. DOMITER, Vid, Obdelava ultrazvočnih medicinskih slik : diplomska naloga

univerzitetnega študijskega programa, (Fakulteta za elektrotehniko, računal-

ništvo in informatiko, Diplomska dela univerzitetnega študija). Maribor: [V.

Domiter], 2004. VII, 62 f., ilustr. [COBISS.SI-ID 9068566].

2.12 Končno poročilo o rezultatih raziskav

13. ŽALIK, Borut, KRIVOGRAD, Sebastian, DOMITER, Vid, Virtual heart of

central Europe : Towers, Wells, and Rarities 3D on-line : The fourth quarter

period and final report of the project : (from December 16, 2003 to April 14,

2004). Maribor: Fakulteta za elektrotehniko, računalništvo in informatiko,

2004. 20 f., ilustr. [COBISS.SI-ID 8793110].

2.13 Elaborat, predštudija, študija

14. DOMITER, Vid, ŽALIK, Borut, NOVAK, Franc, Rekonstrukcija površja

z napredujočo fronto, (IJS delovno poročilo, 9679), 2007. [COBISS.SI-ID

21102119].

Page 101: Un encrypted

BIBLIOGRAFIJA 146

2.21 Programska oprema

15. KRIVOGRAD, Sebastian, ŽALIK, Borut, DOMITER, Vid, Virtual heart of

central Europe : towers, wells, and rarities 3D on-line. Maribor: Fakulteta

za elektrotehniko, računalništvo in informatiko, Laboratorij za geometrijsko

modeliranje in algoritme multimedijev, 2004. 1 DVD, ilustr. [COBISS.SI-ID

8822806].

IZVEDENA DELA (DOGODKI)

3.14 Predavanje na tuji univerzi

16. DOMITER, Vid, A prototype of sweep-line constrained Delaunay triangulation

algorithm : presentation at the Department of computer science and engineer-

ing, University of West Bohemia in Plzeň, Czech Republic, 21.10.2005. Plzeň,

2005. [COBISS.SI-ID 9960726].