Un encrypted
-
Upload
waldermort -
Category
Documents
-
view
717 -
download
6
Transcript of 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)
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
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.
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
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
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.
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
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.
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.
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
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
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
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
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.
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.
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
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
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,
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.
POGLAVJE 4. PREBIRNI ALGORITEM CDT 65
Slika 4.15: Primer vhoda pri katastrskih podatkih (a) in rezultat triangulacije (b).
POGLAVJE 4. PREBIRNI ALGORITEM CDT 66
Slika 4.16: Primer vhoda pri triangulaciji površja (a) in rezultat triangulacije (b).
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
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
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).
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].
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
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
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
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
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
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
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.
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.
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].
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
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
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).
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
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
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.
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).
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.
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
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.
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.
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).
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
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
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.
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
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
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:
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
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
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
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.
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.
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.
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:
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
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 .
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
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.
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.
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
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).
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.
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
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).
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.
POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 116
Slika 6.20: Priredna združitev
Slika 6.21: Podredna združitev.
POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 117
Slika 6.22: Deljenje na primeru.
POGLAVJE 6. PREBIRNI ALG. ZA REKONSTRUKCIJO POVRŠJA 118
Slika 6.23: Združevanje na primeru.
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).
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,
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.
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).
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
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
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).
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
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.
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:
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.
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
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
Ž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
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
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.
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].
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].
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].