• Rezultati Niso Bili Najdeni

Ljubljana,2021 Uporabametodeglavnihkomponentzageneriranjeprenosnihfunkcijpriupodabljanju3Dvolumnov AndrejDrofenik UniverzavLjubljani

N/A
N/A
Protected

Academic year: 2022

Share "Ljubljana,2021 Uporabametodeglavnihkomponentzageneriranjeprenosnihfunkcijpriupodabljanju3Dvolumnov AndrejDrofenik UniverzavLjubljani"

Copied!
57
0
0

Celotno besedilo

(1)

Univerza v Ljubljani

Fakulteta za elektrotehniko

Andrej Drofenik

Uporaba metode glavnih komponent za generiranje

prenosnih funkcij pri

upodabljanju 3D volumnov

Diplomsko delo

Univerzitetni ˇstudijski program prve stopnje Multimedija

Mentor: izr. prof. dr. Matija Marolt

Somentor: as. mag. ˇ Ziga Lesar

(2)
(3)

Zahvala

Zahvaljujem se prof. dr. Matiji Maroltu za mentorstvo pri pisanju diplomskega dela in za vzbuditev zanimanja za podroˇcje raˇcunalniˇske grafike.

Hvala as. mag. ˇZigi Lesarju, ki je vsak teden posluˇsal moja vpraˇsanja, nanje odgovarjal in mi med delom nudil podporo, predvsem pa razumevanje in spod- budo.

Hvala gre tudi vsem prijateljem, s katerimi sem si med ˇstudijem krajˇsal ˇcas in pridobil veliko nepozabnih izkuˇsenj. Posebna zahvala gre Timu, Vidu, Davidu in Marjanu, s katerimi smo preˇziveli mnogo odliˇcnih veˇcerov. Hvala vam tudi za vso pomoˇc med ˇstudijem.

Najveˇcja zahvala pa gre moji druˇzini: starˇsem, bratu Matjaˇzu in drugim.

Hvala vam, ker ste mi vedno stali ob strani. Hvala vam, ker ste mi dejali, da za deˇzjem vedno posije sonce. Hvala vam, ker ste verjeli vame.

(4)

iv

(5)

Povzetek

Upodabljanje volumnov je postopek, s katerim volumen projiciramo na platno.

Bistveno vlogo pri tem igra prenosna funkcija, ki pretvori toˇcke volumna v optiˇcne lastnosti projekcije (npr. barvo in prosojnost). S spreminjanjem prenosne funk- cije lahko uporabnik izbira, katere elemente volumna ˇzeli prikazati ali izpostaviti.

Doloˇcanje dobre prenosne funkcije za izpostavljanje ˇzelenih delov volumna je za povpreˇcnega uporabnika nepriroˇcno in zamudno. Za takˇsne primere je smiselna izdelava orodij za generiranje prenosnih funkcij. V diplomskem delu smo razvili model, s katerim uporabniku generiramo prenosne funkcije s pomoˇcjo metode glavnih komponent. Izdelali smo aplikacijo z uporabniˇskim vmesnikom za ureja- nje prenosnih funkcij, ki je med uporabo beleˇzil prenosne funkcije. Po zbiranju podatkov z aplikacijo smo le-te analizirali, obdelali in pripravili za uporabo v modelu. Model smo izdelali in ga vkljuˇcili v ogrodje za vizualizacijo volumnov. S posodobljeno aplikacijo lahko uporabniki izbirajo med predlaganimi prenosnimi funkcijami, ki so generirane na podlagi shranjenih podatkov.

Kljuˇcne besede: raˇcunalniˇska grafika, volumen, upodabljanje, prenosna funk- cija, metoda glavnih komponent, uporabniˇski vmesnik

(6)

vi Povzetek

(7)

Abstract

Volume rendering is a procedure used to visualize two-dimensional projections of three-dimensional data sets. Paramount to this technique is the transfer func- tion, which assigns optical properties to points inside the volume (e.g. color and transparency). By changing the transfer function, the user may choose what data to display or highlight. Selecting or changing the parameters of the transfer function is unintuitive and time-consuming for the average user. For such cases, using tools to generate transfer functions is helpful. In this work, we developed a model that generates transfer functions with the help of principal component analysis. A user interface, specialized in displaying and collecting transfer func- tion parameters was developed. When a sufficient amount of data was obtained, it was analysed and restructured for further use. Then, the model was developed and installed into the VPT framework for volume visualization. With the update, users can now choose between suggested transfer functions, generated based on collected data.

Key words: computer graphics, volume, rendering, transfer function, principal component analysis, user interface

(8)

viii Abstract

(9)

Vsebina

1 Uvod 1

2 Pregled podroˇcja 3

3 Metode in orodja 5

3.1 Primer tipiˇcne uporabe . . . 5

3.2 Ogrodje za upodabljanje volumetriˇcnih podatkov . . . 6

3.3 Podatkovna baza SQLite . . . 8

3.4 Metoda glavnih komponent . . . 9

4 Izdelava uporabniˇskega vmesnika in aplikacije za zbiranje podat- kov 11 4.1 Uvod . . . 11

4.2 Pregled zaˇcetne razliˇcice aplikacije . . . 12

4.3 Odstranjevanje elementov uporabniˇskega vmesnika . . . 12

4.4 Nalaganje volumnov . . . 13

4.5 Shranjevanje podatkov v podatkovno bazo SQLite . . . 16

(10)

x Vsebina

4.6 Dodatni popravki . . . 19

5 Izdelava modela za generiranje funkcij in konˇcnega vmesnika 21

5.1 Uvod . . . 21 5.2 Poˇsiljanje prenosne funkcije na streˇznik . . . 22 5.3 Izdelava Python skripte za analizo podatkov iz podatkovne baze . 25 5.4 Uporaba modela za generiranje prenosnih funkcij . . . 27 5.5 Poˇsiljanje novih funkcij do vmesnika . . . 27

6 Rezultati 31

6.1 Rezultati aplikacije za zbiranje podatkov . . . 31 6.2 Rezultati modela za generiranje prenosnih funkcij . . . 34

7 Sklepne ugotovitve 39

Literatura 41

(11)

Seznam slik

3.1 Predstavitev ˇstirih delov volumetriˇcnega metanja ˇzarkov [1] . . . . 7

3.2 Predstavitvena slika spletne aplikacije VPT. . . 8

4.1 Predstavitev uporabe VPT z naloˇzenim volumnom. . . 13

4.2 Popravljeni vmesnik aplikacije VPT. Ohranjeni so le deli, kljuˇcni za delovanje orodja za spreminjanje prenosnih funkcij. . . 14

4.3 Nepravilno izrisovanje volumna coronal fem.raw. . . 15

4.4 Pravilno izrisan volumen coronal fem.raw. . . 16

4.5 Enitetno relacijski diagram podatkovne baze. . . 18

4.6 Konˇcni uporabniˇski vmesnik za zbiranje podatkov o prenosnih funkcijah. . . 20

5.1 Delujoˇc seznam za izbiro volumnov. . . 23

5.2 Konˇcni vmesnik aplikacije z generirano prenosno funkcijo. . . 29

6.1 Graf ˇstevila zapisov prenosnih funkcij v podatkovni bazi za razliˇcne volumne . . . 32

6.2 Graf ˇstevila zapisov prenosnih funkcij za analizo v modelu . . . . 33

(12)

xii Seznam slik

6.3 Porazdelitev barvnih polj v prenosnih funkcijah volumnov 1 (na levi) in 8 (na desni). . . 33 6.4 Prvi primer uporabe modela za generiranje prenosnih funkcij za

izris volumna coronal mal.raw. . . 35 6.5 Drugi primer uporabe modela za generiranje prenosnih funkcij za

izris volumna coronal mal.raw. . . 36 6.6 Primer neuspeˇsne uporabe modela za generiranje prenosnih funkcij

za izris volumna bonsai.raw. . . 37

(13)

Seznam uporabljenih kratic

kratica angleˇsko slovensko

TF transfer function prenosna funkcija

VPT volumetric path tracing volumetriˇcno sledenje ˇzarkov

PCA principal component

analysis

metoda glavnih kopo- nent

URL uniform resource locator enoliˇcni krajevnik vira RGBA red, green, blue, alpha rdeˇca, zelena, modra,

alfa

(14)

xiv Seznam slik

(15)

1 Uvod

V digitalnem svetu, kjer tehnologije vseh vrst hitreje napredujejo vsako leto, je velikega pomena jasen in uˇcinkovit prikaz najrazliˇcnejˇsih informacij. Od samega zaˇcetka digitalnega razvoja se koliˇcine in tipi informacij ˇsirijo, za njihov prikaz pa so potrebne vedno boljˇse metode in tehnologije. ˇCe je nekoˇc za doloˇceno podroˇcje zadostoval preprost zaslon, ki je prikazoval besede in ˇstevila, to danes veˇc ne velja.

S postopnim razvojem raˇcunalnikov v drugi polovici 20. stoletja se je zaˇcelo razvijati tudi podroˇcje raˇcunalniˇske grafike. To obsega raˇcunalniˇski prikaz in ob- delavo slikovnih podatkov ter z njimi povezane metode in tehnologije [2]. Teh je seveda mnogo, tipiˇcno se pa razlikujejo glede na tip podatkov, ki jih ˇzelimo prika- zati. Sprva se je raˇcunalniˇska grafika ukvarjala z dvodimenzionalnimi podatki, kot so preproste skice in grafi, vendar se je s tehnoloˇskim napredkom razvilo tudi veˇc metod za prikazovanje najrazliˇcnejˇsih tipov podatkov. Danes ta napredek lahko vidimo na mnogo razliˇcnih podroˇcjih, ki so s pomoˇcjo raˇcunalniˇske grafike razvile nove tehnologije. Mednje spadajo medicina, meteorologija, biologija, arhitektura, pa tudi zabavna industrija, kamor spadajo filmi, fotografija in videoigre.

Raˇcunalniˇska grafika se ukvarja tudi s prikazom volumnov. Ti so v raˇcunalniˇski grafiki opisani kot tridimenzionalna zbirka podatkov, obiˇcajno kot tridimenzionalno skalarno polje. Volumne obiˇcajno pridobimo z uporabo na- prave za magnetno resonanco ali raˇcunalniˇsko tomografijo, ki se uporabljata kot pripomoˇcka za medicinsko diagnozo [3]. Ena izmed metod, ki se uporabljajo za prikaz volumnov je neposredno upodabljanje volumnov (angl. direct volume rendering, DVR), s katero lahko dani volumen uˇcinkovito prikaˇzemo [3]. Upo- dabljanje takˇsnega volumna zahteva uporabo prenosne funkcije (angl. transfer function), ki izbranim podatkom dodeli barvo in prosojnost. Konˇcni prikaz vo-

(16)

2 Uvod

lumna je tako moˇcno odvisen od prenosne funkcije, ki pri razliˇcnih volumnih da razliˇcno kvalitetne rezultate. Do teh razlik pride lahko zaradi ˇsumov pri za- jemu podatkov in razliˇcnih tehnik pridobivanja teh podatkov. V takih primerih je treba prenosni funkciji spreminjati parametre, kar pa je lahko za uporabnika teˇzavno in zamudno. Rezultati so tako brez smernic ali orodij za generiranje pre- nosnih funkcij pogosto preslabi. Zato bi uporabniku orodje za pomoˇc pri izbiri in spremembah prenosne funkcije priˇslo prav.

Cilj diplomskega dela je bil razvoj modela in aplikacije, s katerima bi upo- rabniku olajˇsali gradnjo prenosne funkcije in s tem upodabljanje volumnov. Pri pristopu smo najprej zgradili aplikacijo z uporabniˇskim vmesnikom za zbiranje potrebnih podatkov za analizo in ga dali v uporabo razliˇcnim uporabnikom. Po zbiranju podatkov smo zgradili model, ki s pomoˇcjo metode glavnih komponent (angl. principal component analysis, PCA) in zbranih podatkov predlaga veˇc pri- mernih prenosnih funkcij. Ta model smo vgradili v spletno aplikacijo za vizuali- zacijo volumnov, kjer uporabniku pomaga pri spreminjanju parametrov prenosne funkcije in s tem olajˇsa upodabljanje volumnov.

(17)

2 Pregled podroˇ cja

Za generiranje prenosnih funkcij je bilo razvitih ˇze mnogo razliˇcnih metod. Prva uspeˇsna metoda je bila izdelana leta 1996 [4]. V svojem delu so He et al. opisali postopek generiranja iz nakljuˇcnih funkcij s pomoˇcjo stohastiˇcnih algoritmov, ki jih je upravljal uporabnik z izbiranjem generiranih funkcij. Funkcije so bile izbrane tudi na podlagi entropije in varianc v histogramih, ki se pogosto upo- rabljajo v generiranju prenosnih funkcij. Rezultati so kazali, da je zaˇcetni izbor prenosnih funkcij moˇcno vplival na hitrost postopka iskanja najboljˇsih rezulta- tov. Kindlmann in Durkin [5] sta predlagala generiranje prosojnosti prenosne funkcije s pomoˇcjo 3D histograma za samodejno razvrˇsˇcanje tkiv v volumnu.

Prenosne funkcije so v tem delu opisovale le prosojnost volumnov, vendar je po- stopek dobro prepoznal razliˇcne dele volumnov in jih tudi uspeˇsno izrisal. To metodo so nadgradili Prauchner et al. [6], kjer je postopek uporabniku volumen izrisal v obliki predogledov, med katerimi je uporabnik lahko izbiral. Tokrat so se volumni izrisali tudi v barvah, vendar je bil postopek generiranja predogledov zamuden. Correa in Ma [7] sta v svojem delu razvila metodo za generiranje preno- snih funkcij prosojnosti s pomoˇcjo histograma vidnosti, ki je uporabniku pomagal izpostaviti pomembne dele volumna. Postopek je bil pri generiranju enodimen- zionalnih funkcij uspeˇsen, moˇc ga je pa bilo tudi razˇsiriti na veˇcdimenzionalne prenosne funkcije. Maciejewski et al. [8] so razvili uˇcinkovitejˇsa orodja za iz- delavo prenosnih funkcij s pomoˇcjo gruˇcenja. Ta metoda je uporabljala poseben dvodimenzionalni histogram za iskanje vokslov podobne gostote v volumnih, upo- rabnik pa je oznaˇcena obmoˇcja vokslov lahko tudi spreminjal. Podoben postopek so uporabili ˇSereda et al. [9], ki so razvili metodo generiranja prenosnih funkcij s pomoˇcjo hierarhiˇcnega razvrˇsˇcanja v skupine. Tudi ta metoda je za svoje de- lovanje uporabljala dvodimenzionalne histograme, postopek pa je z dovolj ˇcasa dajal zelo kvalitetne rezultate. Wong et al. [10] so v svojem delu predlagali pri-

(18)

4 Pregled podroˇcja

stop, kjer je uporabnik izbral zaˇcetno in konˇcno prenosno funkcijo, postopek pa je vmesne prenosne funkcije generiral s pomoˇcjo faktorja preoblikovanja (angl. mor- phing factor). Kot primer takˇsnega preoblikovanja so izpostavili uporabo linearne interpolacije. Zhou in Takatsuka [11] sta svoj postopek razvila s pomoˇcjo obrob- nih dreves (angl. contour trees), ki so nastala z zbiranjem topoloˇskih znaˇcilnosti volumna. Poseben model je delom volumna iz razliˇcnih vej dreves dodelil razliˇcne vrednosti za prosojnost, generirane prenosne funkcije pa so tako opisovale raz- like v barvi in prosojnosti razliˇcnih delov volumna. V svojem delu so Sharma et. al. [12] opisali postopek ustvarjanja prenosnih funkcij s posebnim algoritmom za generiranje grafov iz nepovezanih robov volumna. Postopek je tudi reduciral ˇstevilo parametrov, s katerimi so bile opisane prenosne funkcije, kar je izboljˇsalo uˇcinkovitost raˇcunskih operacij, potrebnih za generiranje prenosnih funkcij.

Nekatere opisane metode za svoje delovanje niso imele izdelanih uporabniˇskih vmesnikov, mnoge pa tudi niso bile prilagojene za manj veˇsˇce uporabnike. Naˇsa metoda se razlikuje v tem, da je uporabniˇsko nezahtevna in preprosta za integra- cijo v uporabniˇski vmesnik.

(19)

3 Metode in orodja

3.1 Primer tipiˇ cne uporabe

Cilj diplomskega dela je bila izdelava modela za samodejno generiranje preno- snih funkcij za upodabljanje volumnov s pomoˇcjo metode glavnih komponent.

Za dosego tega cilja smo najprej potrebovali obstojeˇce ogrodje za upodabljanje volumnov, ki je podpiralo izdelavo in spreminjanje prenosnih funkcij. V ogrodje smo vkljuˇcili model, ki je iz ogrodja pridobil podatke o trenutni prenosni funk- ciji, jih analiziral z metodo glavnih komponent in na podlagi rezultatov generiral veˇc novih prenosnih funkcij. Uporabnik je model uporabljal tako, da je na upo- rabniˇskem vmesniku pritisnil na enega izmed petih gumbov, oznaˇcenih z zapore- dnimi ˇstevilkami od 1 do 5 in oznako TF. Ob kliku na gumb se volumen izriˇse s pomoˇcjo ene izmed novih prenosnih funkcij, ki jih je generiral model. Uporabnik lahko z dodatnimi kliki na te gumbe na platno doda veˇc novih barvnih polj in s tem uravnava izgled upodobljenega volumna.

Za uspeˇsno delovanje modela z metodo glavnih komponent smo potrebovali tudi zalogo kvalitetnih prenosnih funkcij, na podlagi katerih je model opravljal analizo. Odloˇcili smo se, da bomo te prenosne funkcije zbrali s pomoˇcjo uporab- nikov. Zato smo potrebovali nov uporabniˇski vmesnik, ki je deloval na ogrodju za volumetriˇcno upodabljanje, kjer je uporabnik imel moˇznost spreminjanja parame- trov prenosne funkcije. Uporabnikom smo vmesnik z navodili predstavili in dali v uporabo. Ko je uporabnik spremenil enega izmed parametrov prenosne funkcije, smo te parametre shranili v podatkovno bazo. Zbrani podatki so predstavljali osnovo za model generiranja prenosnih funkcij.

(20)

6 Metode in orodja

3.2 Ogrodje za upodabljanje volumetriˇ cnih podatkov

Za uˇcinkovito analizo prenosnih funkcij smo potrebovali ogrodje, ki podpira upo- dabljanje volumnov s pomoˇcjo prenosnih funkcij in urejanje takih funkcij. To nam omogoˇca VPT [13], ki deluje kot ogrodje za upodabljanje volumetriˇcnih podatkov.

Ta odprtokodna spletna aplikacija za svoje ogrodje uporablja programski vmesnik WebGL 2.0, do katerega dostopamo s programskim jezikom JavaScript in je na- menjen izkoriˇsˇcanju grafiˇcne strojne opreme prek spletnega brskalnika [14]. Ker gre za spletno aplikacijo, ogrodje VPT za prikaz grafiˇcnega vmesnika uporablja tudi oznaˇcevalna jezika HTML in CSS.

Ogrodje VPT za upodabljanje volumnov uporablja veˇc metod upodabljanja, med drugimi tudi metodo volumetriˇcnega sledenja ˇzarkom (angl. volumetric path tracing, VPT). Ta metoda se bistveno razlikuje od klasiˇcne metode me- tanja ˇzarkov. Volumetriˇcno sledenje ˇzarkom je postopek, kjer s pomoˇcjo ˇzarkov, ki prehajajo izbran volumen, doloˇcimo barvo za vsak piksel na konˇcni sliki. V grobem je postopek razdeljen na ˇstiri dele, prikazane na sliki 3.1, ki vkljuˇcujejo metanje ˇzarkov, vzorˇcenje, senˇcenje in komponiranje [15].

1. V koraku metanja ˇzarkov skozi vsak piksel na konˇcni sliki poˇsljemo ˇzarek, ki v ravni ˇcrti potuje skozi volumen.

2. Poslanim ˇzarkom doloˇcimo tisti del, ki leˇzi znotraj volumna. Na tem delu ˇzarka doloˇcimo toˇcke vzorˇcenja, ki se bodo uporabile za izraˇcun barve v konˇcnem pikslu. Na toˇckah vzorˇcenja je treba interpolirati vrednosti vzor- cev iz bliˇznjih vokslov, saj se toˇcke obiˇcajno nahajajo zunaj samih vokslov.

3. Pri koraku senˇcenja nastopi prenosna funkcija, ki za vsako toˇcko vzorˇcenja izraˇcuna vrednost RGBA. Vsako toˇcko moramo nato ˇse osenˇciti.

4. V zadnjem koraku se toˇcke vzorˇcenja komponirajo v konˇcne piksle na sliki.

Komponiranje toˇck poteka vzdolˇz poti ˇzarka, s katerim so bile toˇcke ustvar- jene.

Pri upodabljanju volumnov je prenosna funkcija bistvenega pomena za kvali- tetno upodobitev. Gre za R2 →R4 funkcijo, ki vrednost volumna in magnitudo

(21)

3.2 Ogrodje za upodabljanje volumetriˇcnih podatkov 7

Slika 3.1: Predstavitev ˇstirih delov volumetriˇcnega metanja ˇzarkov [1]

gradienta v doloˇceni toˇcki preslika v vrednosti RGBA, ki opisujejo barvo in pro- sojnost toˇcke. Doloˇcanje in spreminjanje prenosne funkcije v ogrodju VPT poteka s pomoˇcjo dvodimenzionalnega platna, ki se nahaja na levi strani vmesnika (glej sliko 3.2). Nanj lahko uporabnik dodaja elemente, ki tvorijo prenosno funkcijo.

V ogrodju VPT so ti elementi skalirane Gaussove funkcije, definirane z enaˇcbo

f(x, y) =Aexp (︃

(︃(x−x0)2

X2 +(y−y0)2Y2

)︃)︃

,

kjer koeficient A predstavlja amplitudo, koordinati x0 in y0 predstavljata srediˇsˇce krivulje, σX inσY pa razseˇznosti krivulje v dimenzijah x in y.

Gaussove krivulje so prikazane kot barvna polja na platnu. Ta barvna polja so izrisana s pomoˇcjo funkcije f, kjer lahko uporabnik spreminja parametre A, x0, y0, σX in σY. Funkcija na podlagi parametrov na platnu izriˇse barvno polje, kjer parameterAdefinira prosojnost polja v njegovem srediˇsˇcu,x0iny0 definirata poloˇzaj barvnega polja na platnu, σX in σY pa dimenzije barvnega polja glede na osi x in y. Prenosna funkcija je tako definirana kot vsota vseh barvnih polj na platnu. Novo polje lahko uporabnik na platno doda z gumbom Add bump.

Preko gumba Save lahko prenosno funkcijo tudi shrani v obliki datoteke JSON, z gumbom Load pa lahko naloˇzi shranjeno prenosno funkcijo. VPT poleg tega orodja ponuja urejanje drugih parametrov algoritma za upodabljanje, vendar so ta za neveˇsˇcega uporabnika manj razumljivi. Primer uporabe vmesnika z dodanimi barvnimi polji prikazuje slika 3.2.

Orodje za urejanje prenosne funkcije je tako le del uporabniˇskega vmesnika

(22)

8 Metode in orodja

Slika 3.2: Predstavitvena slika spletne aplikacije VPT.

tehnologijami. Aplikacijo VPT lahko poslediˇcno priredimo, da bo sluˇzila po- trebam tega diplomskega dela. Uporabili smo jo kot aplikacijo, ki je v ozadju zbirala in shranjevala podatke o prenosnih funkcijah, kot tudi konˇcno aplikacijo, ki je uporabniku predlagala nove prenose funkcije na podlagi ˇze zbranih.

3.3 Podatkovna baza SQLite

Naslednji korak diplomskega dela je shranjevanje podatkov o prenosnih funkci- jah. To smo storili s pomoˇcjo sistema podatkovnih baz SQLite. Gre za relacijsko podatkovno bazo s preprosto integracijo v spletnih aplikacijah. ˇCeprav v sistemu SQLite obstajajo pomanjkljivosti glede integritete podatkov [16], to ni predsta- vljalo teˇzav z naˇsim aplikacijo.

SQLite za svoje delovanje ne potrebuje samostojnega procesa, ampak se vkljuˇci v obstojeˇci proces, kjer poteka zbiranje podatkov. V naˇsem primeru smo knjiˇznico, potrebno za delovanje baze SQLite, namestili v ogrodje NodeJS z upo- rabo npm (angl. node package manager). Za pravilno delovanje podatkovne baze smo potrebovali tudi datoteko, v katero je SQLite shranjeval podatke o prenosnih funkcijah. Ti so lahko ˇstirih tipov [17], poleg praznega tipa NULL:

1. INTEGER, ki predstavlja cela ˇstevila,

2. REAL, ki predstavlja 8-bitna racionalna ˇstevila po standardu IEEE,

(23)

3.4 Metoda glavnih komponent 9

3. STRING, ki predstavlja niz znakov, kodiran po standardih UTF, 4. BLOB, ki shrani podatke v takˇsnem tipu, kot so bili vanj vneseni.

SQLite za laˇzji pregled podatkov vsem zapisom privzeto dodeli tudi ˇstevilˇcni identifikator.

3.4 Metoda glavnih komponent

Metoda glavnih komponent je postopek, na podlagi katerega smo osnovali mo- del za generiranje prenosnih funkcij. Metoda PCA je definirana kot ortogonalna linearna transformacija, ki izbrano skupino podatkov preslika v nov koordinatni sistem [18]. Ideja preslikave je, da originalnihn spremenljivk opiˇsemo zmnovimi spremenljivkami. Te spremenljivke so definirane kot linearne kombinacije starih, izbrane pa so le tiste linearne kombinacije spremenljivk, ki kar najbolje opisujejo razprˇsenost originalnih podatkov. S tem pristopom zmanjˇsevanja dimenzionalno- sti lahko originalne podatke opiˇsemo z manj parametri s karseda majhno izgubo informacij. PCA se uporablja za vizualizacijo in analizo podatkov kot tudi za obdelavo veˇcdimenzionalnih skupin podatkov v mnogih raziskovalnih podroˇcjih.

V naˇsem primeru smo metodo PCA uporabili za analizo prenosnih funkcij za volumetriˇcno upodabljanje. Prenosne funkcije, generirane s programom VPT, imajo veˇc parametrov, ki jih uporabniki lahko spreminjajo (vrednosti RGBA za opisovanje barv, koordinate poloˇzaja barvnih polj in njihove dimenzije v oseh x in y). V naˇsem delu smo metodo PCA uporabili za zmanjˇsanje ˇstevila parametrov prenosnih funkcij za laˇzjo primerjavo in analizo. Iz praktiˇcnega staliˇsˇca je analizo veˇcjega ˇstevila podatkov najlaˇzje implementirati s programskim jezikom Python, ki vsebuje veˇcje ˇstevilo specializiranih knjiˇznic za laˇzjo izpeljavo takˇsnega po- stopka. V naˇsem primeru smo uporabili knjiˇznico sklearn [19], ki vsebuje funkcije

(24)

10 Metode in orodja

(25)

4 Izdelava uporabniˇ skega vmesnika in aplikacije za zbiranje podatkov

4.1 Uvod

V tem poglavju je predstavljena izdelava uporabniˇskega vmesnika in aplikacije za zbiranje podatkov o prenosnih funkcijah. Z uporabo aplikacije so uporabniki ustvarili zalogo prenosnih funkcij, na osnovi katere je deloval model. Ker smo se odloˇcili za uporabo ogrodja VPT, je bilo treba obstojeˇco aplikacijo prilagoditi, da je ustrezala naˇsim potrebam po shranjevanju prenosnih funkcij v podatkovno bazo SQLite.

Za zaˇcetek smo prilagodili uporabniˇski vmesnik aplikacije, saj je bil ta za pov- preˇcnega uporabnika preveˇc zapleten. Potrebovali smo preprostejˇsi vmesnik, zato smo obstojeˇci vmesnik prilagodili tako, da smo obdrˇzali le njegove najnujnejˇse gradnike. Poskrbeli smo za samodejno nalaganje volumnov v aplikacijo, kar nam je omogoˇcilo laˇzje in hitrejˇse pridobivanje podatkov o prenosnih funkcijah. V aplikaciji VPT smo tudi popravili veˇc napak, ki so slabˇsale uporabniˇsko izkuˇsnjo.

Aplikaciji smo dodali funkcionalnosti, s katerimi smo omogoˇcili poˇsiljanje po- datkov o prenosni funkciji na streˇznik v podatkovno bazo SQLite. Spremenjeno aplikacijo smo naloˇzili na javni streˇznik in povezavo do nje poslali uporabnikom.

Po veˇc dnevih zbiranja rezultatov smo imeli prenosnih funkcij dovolj, da smo na njihovi podlagi lahko izdelali model za generiranje prenosnih funkcij (glej poglavje 5).

(26)

12 Izdelava uporabniˇskega vmesnika in aplikacije za zbiranje podatkov

4.2 Pregled zaˇ cetne razliˇ cice aplikacije

V svoji prvotni obliki lahko aplikacijo VPT namestimo s pomoˇcjo NodeJS in za- gonom dveh priloˇzenih skript, ki sta se nahajali v mapi bin glavnega repozitorija, to sta packer.js in server-node.js. Datoteka packer.js ob zagonu iz izvornih da- totek zgradi aplikacijo in jo shrani v mapo build v korenski mapi repozitorija.

Vse izvorne datoteke se nahajajo v mapi src, kjer so razdeljene po mapah glede na vloge, ki jih imajo. Ob zagonu datoteke server-node.js se na trenutni napravi vzpostavi lokalna spletna aplikacija, ki jo lahko obiˇsˇcemo s pomoˇcjo spletnega brskalnika na naslovu localhost:3000.

Aplikacija VPT sama po sebi ne vsebuje nobenih datotek z volumni, zato prikaˇze le ˇcrno polje. Volumen uporabnik naloˇzi sam, kar lahko stori preko vme- snika na levi strani. Volumen se lahko naloˇzi neposredno z datoteko, ki volu- men vsebuje, ali pa na daljavo preko naslova URL. Aplikacija ponuja tudi tretjo moˇznost, oznaˇceno z Demo, kjer lahko uporabnik izbira iz seznama vnaprej pri- pravljenih volumnov. Za delovanje te funkcionalnosti mora biti prisotna datoteka demo-volumes.json, ki deluje kot seznam priloˇzenih volumnov v mapi build. De- lovanje aplikacije prikazuje slika 4.1.

Uporabniˇski vmesnik ima 3 zavihke, med katerimi lahko uporabnik izbira.

Privzeto se najprej pokaˇze zavihek Data, kjer uporabnik naloˇzi ˇzeleni volumen.

Zavihek Settings, prikazan na levi strani slike 4.1 vsebuje vsa orodja, s katerimi lahko uporabnik spreminja izgled volumna, vkljuˇcno z orodjem za doloˇcanje in spreminjanje prenosne funkcije. Zadnji zavihek About vsebuje informacije o apli- kaciji in za njeno delovanje ne predstavlja bistvene vloge. Uporabniˇski vmesnik lahko uporabnik tudi skrije s pomoˇcjo gumbov ob robovih vmesnika.

4.3 Odstranjevanje elementov uporabniˇ skega vmesnika

Vmesnik smo se odloˇcili prilagoditi tako, da se bo uporabnik osredotoˇcil le na spreminjanje prenosne funkcije. Iz tega razloga smo iz uporabniˇskega vmesnika odstranili vse elemente razen orodja za spreminjanje prenosne funkcije. To smo naredili s spreminjanjem izvornih datotek MainDialog.json in MCMRendererDia-

(27)

4.4 Nalaganje volumnov 13

Slika 4.1: Predstavitev uporabe VPT z naloˇzenim volumnom.

log.json, ki definirata strukturo uporabniˇskega vmesnika. Datoteki sta v formatu JSON predstavljali seznam gradnikov, ki sestavljajo uporabniˇski vmesnik. Iz teh datotek smo odstranili gradnike, ki jih nismo potrebovali. Ohranili smo samo tiste, ki so bili nujni za delovanje orodja za urejanje prenosnih funkcij.

Popraviti je bilo treba tudi vso programsko logiko, ki se je sklicevala na zdaj neobstojeˇce gradnike. Obe datoteki JSON sta bili tesno povezani z datotekama MainDialog.js in MCMRendererDialog.js, ki sta preko funkcij addEventListener nadzorovali spremembe na teh gradnikih. Iz istega razloga je bilo treba odstraniti dele kode tudi v zaˇcetni datoteki aplikacije Application.js, saj dela vmesnika za nalaganje volumnov ni bilo veˇc. Po teh popravkih je uporabniˇski vmesnik aplikacije bil primernejˇsi za uporabo pri zbiranju prenosnih funkcij, kar kaˇze slika 4.2.

4.4 Nalaganje volumnov

Uporabniˇski vmesnik aplikacije je bil primeren za zbiranje podatkov o preno- snih funkcijah, vendar je aplikacija bila brez nalaganja volumnov neuporabna.

Funkcionalnosti za izbiro volumna je bilo torej treba nadomestiti s samodejnim nalaganjem ob zagonu aplikacije. V programski kodi je to nalogo opravljala funk- cija handleVolumeLoad(), v katero so bili posredovani metapodatki o volumnu in njegovih znaˇcilnostih. Ti podatki so se prej poslali takrat, ko je uporabnik izbral ˇzeleni volumen in pritisnil na gumb Load. Funkcijo handleVolumeLoad()

(28)

14 Izdelava uporabniˇskega vmesnika in aplikacije za zbiranje podatkov

Slika 4.2: Popravljeni vmesnik aplikacije VPT. Ohranjeni so le deli, kljuˇcni za delovanje orodja za spreminjanje prenosnih funkcij.

(29)

4.4 Nalaganje volumnov 15

Slika 4.3: Nepravilno izrisovanje volumna coronal fem.raw.

Za analizo prenosnih funkcij smo potrebovali zadovoljivo ˇstevilo volumnov.

Ti niso smeli biti preveliki, saj nalaganje takih volumnov traja dalj ˇcasa, zah- tevajo pa tudi bistveno veˇcjo porabo grafiˇcnega pomnilnika. S takimi volumni bi zbiranje prenosnih funkcij bilo teˇzavnejˇse, zato smo se pri izbiranju volumnov omejili le na manjˇse od 30MB. Izbrali smo 17 volumnov, ki so ustrezali temu kriteriju, veˇcinoma pridobljenih s pomoˇcjo skeniranja z magnetno resonanco ali raˇcunalniˇsko tomografijo. Te datoteke smo premaknili v mapo build/images/vo- lumes in jih zbrali v seznamu v funkciji getRandomFile(). S pomoˇcjo funkcije Math.random() smo izbrali nakljuˇcni volumen in ga posredovali funkciji handle- VolumeLoad().

Ob ponovnem zagonu aplikacije smo opazili, da se volumni v sceno ne nala- gajo. Funkcija handleVolumeLoad() je bila nepopolna, saj v primeru zahteve za nalaganje volumna preko URL naslova razredu readerClass() ni uspela posredo- vati podatkov o dimenzijah volumna. Napako smo odpravili, vendar je priˇslo do nove teˇzave. Volumni, katerih dimenzije niso bile v razmerju 1:1:1, se niso pra- vilno izrisovali. Kot kaˇze slika 4.3, so bili volumni nepravilno raztegnjeni. Vidne so bile posamezne rezine volumna, ki bi se morale stikati brez vmesnega prostora.

Teˇzavo je znova predstavljala funkcija handleVolumeLoad(). Poleg imen vo- lumnov je bilo treba funkciji posredovati tudi pravilne dimenzije volumnov in razmerja velikosti vokslov, ki te volumne sestavljajo. Najprej smo seznamu volu- mnov dodali ˇse vse potrebne podatke, ki so bili pomembni za izris in preuredili klic funkcije. V funkciji handleVolumeLoad() smo za osi x, y in z zmnoˇzili ve-

(30)

16 Izdelava uporabniˇskega vmesnika in aplikacije za zbiranje podatkov

Slika 4.4: Pravilno izrisan volumen coronal fem.raw.

teh zmnoˇzkov smo oznaˇcili z max. Za konec smo poklicali funkcijo setScale() v razredu RenderingContext s parametri x/max, y/max in z/max. S tem klicem smo upodabljalniku sporoˇcili, v kakˇsnih dimenzijah naj izriˇse volumen. Ponoven zagon aplikacije nam je isti volumen izrisal pravilno, kar se vidi na sliki 4.4.

4.5 Shranjevanje podatkov v podatkovno bazo SQLite

Predelana aplikacija VPT je delovala pravilno s primernejˇsim uporabniˇskim vme- snikom. Naslednji korak do ˇzelenega cilja je bila povezava s podatkovno bazo SQLite, v katero smo te podatke shranjevali. Shranjevanje je potekalo na strani streˇznika, zato je vsa logika za pravilno shranjevanje podatkov sodila v datoteko server-node.js, na strani odjemalca pa je aplikacija potrebovala naˇcin, da podatke o prenosni funkciji posreduje na streˇznik.

Logika, ki je bila odgovorna za prenosne funkcije se je nahajala v razredu TransferFunctionWidget. V spremenljivki bumps so se nahajali vsi kljuˇcni po- datki za trenutno prenosno funkcijo. Spremenljivka je bila definirana kot seznam objektov, kjer je vsak objekt predstavljal eno barvno polje na orodju za pre- nosne funkcije. Vsak objekt je imel podatke o poloˇzaju, dimenzijah in barvah enega polja. Te podatke smo na streˇznik poˇsiljali s pomoˇcjo funkcij trigger(), addEventListener() in vmesnika XMLHttpRequest.

V hierarhiji aplikacije VPT je na vrhu datoteka Application.js, kar pomeni da lahko znotraj nje dostopamo do vseh ostalih razredov in funkcij. Application.js

(31)

4.5 Shranjevanje podatkov v podatkovno bazo SQLite 17

med svojim delovanjem ustvari razred MCMRendererDialog, ta razred pa kasneje ustvari razred TransferFunctionWidget. Podatke o prenosnih funkcijah je bilo tako treba poslati preko teh razredov. Najprej smo v razredu TransferFunctio- nWidget pri vsaki spremembi prenosne funkcije dodali vrstico this.trigger(’send’), ki je starˇsevski razred MCMRendererDialog obvestil o prenosu podatkov. V tem razredu smo poklicali funkcijo addEventListener() s parametrom ’send’, ki se je na obvestilo odzval in z novim klicem funkcije trigger() obvestilo poslal naprej v Application.js. Tam smo se z novim klicem funkcije addEventListener() odzivali na to obvestilo, od koder pa je bilo treba podatke poslati na streˇznik. Za te potrebe smo ustvarili nov razred Communicator, ki je skrbel za vso komunikacijo med odjemalcem in streˇznikom kar se tiˇce prenosnih funkcij. Iz Application.js smo tako ob prejemu obvestila poklicali novo funkcijo dbSendTF() v razredu Communicator, kjer je bilo treba poskrbeti le ˇse za komunikacijo s streˇznikom.

Aplikacija VPT za obstojeˇco komunikacijo s streˇznikom uporablja vme- snik XMLHttpRequest. Razred spletnim aplikacijam omogoˇca komunikacijo s streˇznikom brez potrebe po osveˇzevanju celotne spletne strani [20] in podpira tako sinhrono kot asinhrono komunikacijo. V naˇsem primeru smo na streˇznik poleg podatkov o prenosnih funkcijah poslali tudi ˇcasovni ˇzig, ki smo ga ustvarili z ukazom Date.now() in zaporedno ˇstevilko volumna, preko katerega smo preno- sne funkcije loˇcili glede na volumen, ki ga opisujejo. Za enostavnejˇse poˇsiljanje podatkov smo iz teh parametrov sestavili objekt z imenom paket, ki smo ga do- datno obdelali s funkcijo JSON.stringify(). S klicem funkcij open() in send() iz vmesnika XMLHttpRequest smo paket z zahtevo POST poslali na streˇznik.

V datoteki server-node.js, kjer smo se na zahteve odzivali, je bilo treba dodati logiko za shranjevanje podatkov iz zahteve POST v podatkovno bazo SQLite.

Prejeti podatki so se ne glede na tip zahteve zbirali v spremenljivki data, ki smo jo s pomoˇcjo JSON.parse() pretvorili iz niza v objekt. Z nekaj dodane logike smo zahteve POST obravnavali neodvisno od drugih, na istem mestu pa smo v aplikacijo vpeljali logiko za vnaˇsanje informacij v podatkovno bazo.

Za uporabo podatkovne baze SQLite smo najprej potrebovali datoteko, v ka- tero smo shranjevali podatke. Za te potrebe smo ustvarili datoteko test.db in jo premaknili v isto mapo kot server-node.js. Za shranjevanje podatkov iz spre-

(32)

18 Izdelava uporabniˇskega vmesnika in aplikacije za zbiranje podatkov

Slika 4.5: Enitetno relacijski diagram podatkovne baze.

Nato smo lahko podatke v bazo shranili s pomoˇcjo obiˇcajne poizvedbe SQLite, ki smo jo shranili kot niz znakov. To smo storili s funkcijo run(), ki je podatke o prenosni funkciji, ˇcasovni ˇzig in zaporedno ˇstevilko volumna iz spremenljivke data preko poizvedbe vnaˇsala v datoteko test.db.

Po tem koraku smo se odloˇcili, da bomo v podatkovno bazo shranjevali tudi informacije o trenutni seji. S tem podatkom je bilo razvidno, katere prenosne funkcije pripadajo toˇcno kateri seji. To nam je uspelo z uporabo knjiˇznice crypto in funkcije randomBytes(), ki smo jo poklicali vsakiˇc, ko se je aplikacija naloˇzila na novo. Funkcija je ustvarila unikaten identifikator, ki smo ga dodali v poizvedbo SQLite poleg vsake prenosne funkcije.

Podatkovna baza je bila sestavljena iz treh tabel, ki so vsebovale vse potrebne podatke za analizo prenosnih funkcij. Te tabele so predstavljene v entitetno- relacijskem diagramu na sliki 4.5. V tabeli Volumen smo za zaˇcetek vnesli URL naslov vseh 17 volumnov in ˇstevec zapisov (angl. count) postavili na 0. Za vsako novo sejo, kjer se je ta volumen naloˇzil, se je ˇstevec samodejno poveˇcal za 1.

Unikatne identifikatorje sej smo shranjevali v tabelo Seja, kjer je vsaka zapis bil povezan z identifikatorjem volumna iz prve tabele. V zadnji tabeli smo shranjevali same prenosne funkcije, ki so bile povezane z identifikatorjem volumna in seje iz prve in druge tabele. Podatke o prenosnih funkcijah, unikatni identifikator seje in URL naslov volumnov smo shranjevali v obliki String, ostale podatke pa v obliki Integer.

(33)

4.6 Dodatni popravki 19

4.6 Dodatni popravki

Na tej toˇcki je bila aplikacija pripravljena na zbiranje podatkov o prenosnih funk- cijah. Zaradi nekoliko slabˇse uporabniˇske izkuˇsnje smo se odloˇcili, da doloˇcene se- gmente aplikacije izboljˇsamo. Na uporabniˇskem vmesniku sta bila ˇse dva odveˇcna elementa: spodnja orodna vrstica in orodje za izbiro upodabljalnika. Oboje smo odstranili brez posledic za delovanje aplikacije. Poleg gumbov Add Bump, Save in Load smo dodali gumb Delete Bump, s katerim je uporabnik lahko izbrisal ˇ

zeljeno barvno polje iz orodja za urejanje prenosne funkcije.

Odpravili smo ˇse dve napaki aplikacije VPT, ki ˇse nista bili popravljeni. Ob premikanju barvnih polj po platnu orodja za prenosne funkcije je bilo mogoˇce polje premakniti izven meja platna. V takem primeru uporabnik polja ni veˇc mogel izbrisati ali premakniti nazaj na platno. Teˇzavo smo popravili v razredu Draggable, ki ga uporablja razred TransferFunctionWidget. V tem razredu je bilo treba omejiti premikanje polja z novo funkcijo correctHandle(), ki je ob vsakem premiku polja preverila, ali je srediˇsˇce tega polja znotraj meja platna. V primeru, da je srediˇsˇce preˇslo mejo platna, smo srediˇsˇce potisnili nazaj na mejo.

Teˇzavo je povzroˇcalo tudi nepravilno meˇsanje barv na istem orodju. V pri- meru, da sta se dve barvni polji na orodju prekrivali, se njuni barvi nista pravilno zmeˇsali, obiˇcajno v pretemne odtenke. Teˇzava je bila hitro odpravljena, v razredu TransferFunctionWidget je bilo treba spremeniti klic funkcije gl.BlendFunc(), ki je bila klicana z napaˇcnimi parametri. Za konec smo pod orodjem za prenosne funkcije dodali tudi navodila za uporabo vmesnika. Konˇcni uporabniˇski vmesnik za zbiranje podatkov o prenosnih funkcijah je prikazan na sliki 4.6.

Aplikacijo smo namestili na streˇznik z javnim naslovom IP in priˇceli smo lahko zbiranje podatkov o prenosnih funkcijah. Postopek pridobivanja rezultatov je opisan v poglavju 6. Aplikacija je med delovanjem delovala dobro in z njo ni

(34)

20 Izdelava uporabniˇskega vmesnika in aplikacije za zbiranje podatkov

Slika 4.6: Konˇcni uporabniˇski vmesnik za zbiranje podatkov o prenosnih funkci- jah.

(35)

5 Izdelava modela za generiranje funkcij in konˇ cnega vmesnika

5.1 Uvod

V tem poglavju je opisana izdelava modela za generiranje prenosnih funkcij in uporabniˇskega vmesnika, s katerim smo model implementirali v ogrodje VPT.

Uporabnik je lahko preko uporabniˇskega vmesnika v aplikaciji izbiral med pe- timi prenosnimi funkcijami, ki mu jih je predlagal model. Te funkcije je model izbiral na podlagi prenosnih funkcij, shranjenih v podatkovni bazi SQLite. S pomoˇcjo modela in pripadajoˇcega vmesnika je imel uporabnik veˇc nadzora pri upodabljanju ˇzelenega volumna.

Aplikacija VPT je znova potrebovala nekaj prilagoditev. Model je za svoje delovanje najprej potreboval trenutno prenosno funkcijo, s katero je bil izrisan volumen. Na podoben naˇcin kot v poglavju 4 smo podatke o prenosni funkciji preko mnogih funkcij in razredov s pomoˇcjo zahteve POST poslali na streˇznik.

Nato smo priˇceli z obdelavo shranjenih podatkov in izdelavo modela, ki je deloval na streˇzniku. S prvo skripto smo iz podatkovne baze SQLite izluˇsˇcili podatke o prenosnih funkcijah, jih obdelali in pripravili za uporabo v modelu. V drugi skripti smo implementirali sam model za generiranje prenosnih funkcij z metodo glavnih komponent s pomoˇcjo teh shranjenih podatkov. S skripto smo prebrali trenutno prenosno funkcijo, opravili analizo in predlagali pet novih prenosnih funkcij. Te je streˇznik poslal nazaj odjemalcu, kjer je bilo treba dodatne funkcije ˇse poslati uporabniˇskemu vmesniku. Na vmesniku smo za vsako prenosno funkcijo dodali nov gumb, ki je ob kliku prenosno funkcijo izrisal na platnu.

(36)

22 Izdelava modela za generiranje funkcij in konˇcnega vmesnika

5.2 Poˇ siljanje prenosne funkcije na streˇ znik

Znova smo zaˇceli z zaˇcetno razliˇcico aplikacije VPT. Ta je zdaj vsebovala tudi mnoge napake, ki smo jih med izdelavo prejˇsnje aplikacije in vmesnika odpravili.

Popravke smo tako le prenesli na to razliˇcico aplikacije, s ˇcimer smo v aplikaciji:

• odpravili napako pri meˇsanju barv na orodju za prenosne funkcije,

• dodali gumb Delete Bump na orodju za prenosne funkcije,

• odpravili napako pri prehajanju polj izven platna na orodju za prenosne funkcije in

• popravili nalaganje volumnov v funkciji handleVolumeLoad().

Po teh popravkih smo v aplikacijo dodali nalaganje 17 volumnov, prenosne funkcije katerih smo zbirali. Tokrat smo ˇzeleli, da bi uporabniki lahko izbirali, kateri volumen se bo naloˇzil v sceno. Nekaj podobnega je delala moˇznost Demo na prvi strani uporabniˇskega vmesnika, ki je seznam volumnov prebrala iz dato- teke demo-volumes.json in volumne prikazala kot spustni meni na vmesniku. Ta datoteka je aplikaciji manjkala, zato smo ustvarili novo in vanjo vnesli podatke o 17 volumnih, s katerimi smo delali prej. Datoteko in pripadajoˇce volumne smo premaknili v mapo build in seznam izbire volumnov se je prikazal na vmesniku aplikacije, kot prikazuje slika 5.1.

Seznam je sicer deloval, vendar je ob pritisku na gumb Load prihajalo do na- pake, zaradi katere se volumni niso nalagali v sceno. Za nalaganje volumnov preko opcije Demo je bila odgovorna funkcija handleLoadDemo() v razredu VolumeLo- adDialog. Ta je informacije o volumnu prejela iz datoteke demo-volumes.json, s prejetimi parametri pa sproˇzila funkcijo handleVolumeLoad() v razredu Applica- tion. Teˇzava je bila v tem, da smo za pravilni izris volumnov potrebovali tudi podatke o njihovih dimenzijah in razmerij velikosti vokslov, ki jih sestavljajo.

Te parametre smo dopisali v datoteko demo-volumes.json in popravili funkcijo handleLoadDemo(), da je podatke prebrala in posredovala funkciji handleVolu- meLoad(). Ob ponovnem zagonu je aplikacija zdaj naˇse volumne tudi pravilno izrisala.

(37)

5.2 Poˇsiljanje prenosne funkcije na streˇznik 23

(38)

24 Izdelava modela za generiranje funkcij in konˇcnega vmesnika

Naslednji korak je bilo poˇsiljanje podatkov o prenosni funkciji na streˇznik.

Tu smo si lahko pomagali s kodo, ki smo jo napisali za aplikacijo in vmesnik za zbiranje podatkov o prenosnih funkcijah. Uporabili smo enak pristop, kjer smo v razrede TransferFunctionWidget, MCMRendererDialog in Application na enaka mesta postavili klice funkcij trigger() in addEventListener(). Za vsako spremembo funkcije v orodju za spreminjanje prenosnih funkcij smo tako sproˇzili dogodek ’tool’, v nadrejenem razredu pa smo vsak dogodek preprosto poslali na- prej. Ko je dogodek prepoznal razred Application, je bilo treba parametre le ˇse poslati na streˇznik. Znova smo ustvarili razred Communicator, v katerem je potekala vsa komunikacija s streˇznikom. Znotraj razreda smo dodali funkcijo tool- SendTF(), ki je s pomoˇcjo vmesnika XMLHttpRequest poˇsiljala zahteve POST na streˇznik. V razredu Application smo nato ob vsakem dogodku ’tool’ poklicali funkcijo toolSendTF() s spremenljivko bumps, v kateri so se shranjevali podatki o trenutno aktivni prenosni funkciji. Funkcija toolSendTF() je v obliki zahteve POST podatke le ˇse poslala na streˇznik.

V datoteki server-node.js smo znova uporabili nekaj kode, ki smo jo napisali v prvi razliˇcici aplikacije za obvladovanje zahtev POST. Zdaj je bilo treba prido- bljene podatke posredovati skripti, kjer smo nameravali te podatke analizirati. Za testiranje komunikacije smo ustvarili testno skripto test.py, katere namen je bil samo branje in izpisovanje prejetih podatkov. Komunikacijo s skripto smo vzpo- stavili s pomoˇcjo modula child-process, ki vsebuje orodja za zaganjanje zunanjih procesov znotraj okolja NodeJS. Na objektu pythonProcess smo poklicali pripa- dajoˇco funkcijo spawn() s parametrom, ki je opisoval lokacijo datoteke test.py.

Ta klic je skripto uspeˇsno zagnal. Ker smo ˇzeleli v skripto poslati tudi podatke o prenosnih funkcijah, smo prilagodili klic funkcije spawn() in vkljuˇcili parameter bumps.

V skripti test.py smo ˇzeleli vnesene podatke prebrati in jih vrniti datoteki server-node.js. To smo storili s pomoˇcjo nameˇsˇcenega paketa sys, ki ima dostop do ukazne vrstice, s katero smo skripti posredovali podatke. S tem paketom smo z ukazom x = sys.argv[1] v spremenljivko x znotraj skripte uspeˇsno shranili podatke o prenosnih funkcijah. Za uspeˇsen preizkus komunikacije smo podatke le ˇse poslali nazaj na streˇznik. To smo tudi storili s pomoˇcjo paketa sys. Podatke je bilo treba najprej izpisati v terminalu s klicem funkcije print(), na koncu pa smo klicali ˇse funkcijo sys.stdout.flush(), ki je izpisane podatke preko ukazne

(39)

5.3 Izdelava Python skripte za analizo podatkov iz podatkovne baze 25

vrstice posredovala naprej. V datoteki server-node.js smo posredovane podatke ˇse prebrali. Na objektu pythonProcess smo poklicali funkcijo stdout.on(), ki nam je v parameter data shranila izpisane podatke. Podatke smo z uporabo funkcije console.log() tudi uspeˇsno izpisali, kar je pomenilo, da je komunikacija med streˇznikom in skripto vzpostavljena.

5.3 Izdelava Python skripte za analizo podatkov iz podat- kovne baze

Za zaˇcetek je bilo treba podatke iz podatkovne baze prebrati s Python skripto in jih obdelati z metodo PCA. Rezultate obdelave smo potrebovali za pravilno delovanje modela. Ustvarili smo novo skripto z imenom main.py, ki je prebrala podatke o prenosnih funkcijah iz datoteke test.db, jih obdelala z metodo PCA, model pa shranila v datoteko data.npy.

Pri branju podatkov smo si pomagali s paketom sqlite3, ki nam je omogoˇcal laˇzje delo z datoteko test.db. Za zaˇcetek smo s funkcijo sqlite3.connect() odprli datoteko, s klicem funkcije cursor() pa smo bazi priredili kazalnik, s katerim smo lahko izvajali poizvedbe SQL. Takˇsno poizvedbo smo izvedli v zanki, s katero smo zaobjeli vse elemente v tabeli Functions, kjer so se nahajale prenosne funkcije.

Vsako prenosno funkcijo smo nato individualno obravnavali.

Na tej toˇcki smo opazili, da so doloˇceni zapisi v podatkovni bazi za analizo neprimerni. Aplikacija je namreˇc v bazo shranjevala tudi prenosne funkcije, ki nastanejo takoj ob vnosu prvega barvnega polja ob kliku gumba Add Bump. Prve prenosne funkcije vsake seje so bile tako identiˇcne in niso bile rezultat uporabni- kovega dela, zato jih je bilo treba izloˇciti. Prav tako smo izloˇcili zapise, kjer je aplikacija shranila prazno tabelo barvnih polj, kar pomeni, da na platnu ni bilo nobenega barvnega polja.

Naleteli smo na novo teˇzavo. Zapisi iz podatkovne baze so se razlikovali po ˇstevilu barvnih polj, ki so opisovala prenosne funkcije. Vsako barvno polje je bilo

(40)

26 Izdelava modela za generiranje funkcij in konˇcnega vmesnika

• 2 parametra za viˇsino in dolˇzino polja,

• 2 parametra za poloˇzaj glede na x in y os platna,

• 4 parametre za vrednosti RGBA (barvo in prosojnost).

Ce so se prenosne funkcije razlikovale po ˇstevilu barvnih polj, so se razlikovaleˇ tudi po ˇstevilu parametrov, ki te funkcije definirajo. Ker smo prenosne funkcije nameravali analizirati s pomoˇcjo metode PCA je razliˇcno ˇstevilo parametrov pov- zroˇcalo teˇzavo. Za uporabo te metode smo namreˇc potrebovali nabor podatkov z enakim ˇstevilom parametrov, kar pa ni bilo izvedljivo za nabor funkcij nobenega izmed 17 volumnov. Prenosne funkcije bi lahko analizirali glede na volumen, ki ga opisujejo in ˇstevilo barvnih polj v prenosni funkciji, vendar smo se zaradi manjˇsega ˇstevila prenosnih funkcij pri nekaterih volumnih odloˇcili za drugaˇcen pristop. Vse prenosne funkcije z veˇc kot enim barvnim poljem smo razbili na to- liko novih prenosnih funkcij, kot je bilo barvnih polj. Iz vsake prenosne funkcije z dvema barvnima poljema sta tako nastali dve novi prenosni funkciji, enako smo naredili tudi za funkcije s tremi barvnimi polji.

Skripta je z zanko eno za drugo prebrala vse prenosne funkcije iz podatkovne baze. Vsak neprimerni zapis smo takoj odstranili, vse ostale pa smo prebrali s pomoˇcjo paketa simplejson(). Z uporabo funkcije simplejson.loads() smo niz znakov, ki je opisoval prenosno funkcijo pretvorili v seznam objektov, kjer je vsak objekt predstavljal svoje barvno polje. Nato smo z novo zanko individualno obravnavali vsako barvno polje, iz njega izluˇsˇcili relevantne parametre in jih shra- nili v nov seznam. Ta seznam smo pripeli seznamu megalist, kamor smo shranili vse prenosne funkcije in jih loˇcili glede na volumen, ki ga opisujejo.

Za konec smo podatke obdelali z metodo PCA, za kar smo uporabili paket sklearn[19]. V seznamu megalist smo izbrali prenosne funkcije enega izmed volu- mnov in izvedli ukaz pca.fit transform(), ki je na teh prenosnih funkcijah izvedel metodo PCA. Postopek smo v zanki ponovili za prenosne funkcije vsakega volu- mna iz seznama megalist. Transformacijo PCA za vsak volumen smo shranili v datoteko data.npy, pri ˇcemer smo obdrˇzali le dve glavni komponenti.

(41)

5.4 Uporaba modela za generiranje prenosnih funkcij 27

5.4 Uporaba modela za generiranje prenosnih funkcij

Z uporabo modela smo ˇzeleli generirati take prenosne funkcije, ki bi pripomogle h kvalitetni upodobitvi volumnov. Za te potrebe smo ustvarili novo skripto z imenom ok.py, v kateri smo definirali delovanje modela. Datoteka se je nahajala na streˇzniku, preko katerega je model komuniciral z aplikacijo. Vhodni poda- tek modela je predstavljala trenutno aktivna prenosna funkcija v aplikaciji VPT.

Prenosna funkcija je vsebovala podatke o barvnih poljih na platnu, ki jih je de- finiral uporabnik preko uporabniˇskega vmesnika. Aplikacija je podatke sporoˇcila na streˇznik, v datoteki ok.py pa smo podatke prebrali preko ukazne vrstice.

Za zaˇcetek smo v primeru, da je uporabnik definiral veˇc kot eno barvno polje, te zdruˇzili v en vektor. Novonastali vektor je predstavljal aritmetiˇcno sredino barvnih polj v prenosni funkciji. Iz datoteke data.npy smo v skripto uvozili tudi model PCA, ki smo ga izdelali na prenosnih funkcijah iz podatkovne baze. Vektor uporabnikove prenosne funkcije smo nato preslikali s shranjenim modelom PCA, ki nam je vektor z osmimi spremenljivkami preslikal v vektor z dvema spremen- ljivkama. Nato smo iz latentnega prostora modela PCA poiskali pet vektorjev, ki so po evklidski razdalji leˇzali najbliˇzje preslikanemu vektorju. Izbrane vektorje smo z inverzno transformacijo preslikali nazaj v parametrizirane prenosne funkcije z osmimi parametri. Funkcije smo shranili na seznam, ki je predstavljal seznam predlaganih prenosnih funkcij modela. Za konec smo seznam preko ukazne vrstice poslali v datoteko server-node.js.

5.5 Poˇ siljanje novih funkcij do vmesnika

V datoteki server-node.js smo nove prenosne funkcije sprejeli in jih poslali odje- malcu. Na odgovor smo ˇcakali s klicem funkcije stdout.on() na objektu python- Process, ki je dobljene prenosne funkcije shranjeval v spremenljivko data. Ko- munikacija od streˇznika do odjemalca poteka preko odzivov na zahteve, zato smo odgovor poslali z ukazom response.end(), kamor smo vstavili seznam prenosnih funkcij.

(42)

28 Izdelava modela za generiranje funkcij in konˇcnega vmesnika

izdelali funkcijo toolSendTF(), kjer smo tudi sprejeli odgovor streˇznika. Z upo- rabo objekta XMLHttpRequest to storimo z ukazom onreadystatechange, ki proˇzi dane ukaze vsakiˇc, ko se spremeni status zahteve. Znotraj te funkcije smo tako definirali, da naj sprejme odgovor responsetext takrat, ko bo zahteva uspeˇsno za- kljuˇcena. V responsetext smo tako prejeli odgovor streˇznika, ki smo ga s pomoˇcjo callback funkcije poslali nazaj v razred Application. Tam smo izdelali novo funk- cijo handleSendBumps(), ki je nove prenosne funkcije poˇsiljala v razred Transfer- FunctionWidget.

V razredu TransferFunctionWidget smo zato potrebovali veˇc funkcionalnosti, ki bodo urejale nastavljanje novih prenosnih funkcij. Razred Application je te najprej poslal v novo funkcijo applyNewBumps, kjer smo dobljene prenosne funk- cije s pomoˇcjo JSON.parse() pretvorili v seznam. V konstruktorju razreda smo dodali novo spremenljivko newbumps, kamor smo ta seznam shranili. Potrebovali smo ˇse funkcijo addSpecificBump(), ki smo jo zgradili na podlagi funkcije add- Bump(). Ta je urejala dodajanje novih barvnih polj na sredino platna ob kliku gumba Add Bump. Naˇsa funkcija je izrisala takˇsno polje, kot jo je specificirala prenosna funkcija iz modela, ki smo jo vnesli kot parameter pri klicu funkcije.

Zadnji korak dela je bila povezava novih funkcij z uporabniˇskim vmesnikom.

V HTML in CSS datoteki, ki sta definirali izgled vmesnika, smo dodali pet gum- bov tik pod platno na orodju za prenosne funkcije. Na koncu smo v konstruktorju razreda TransferFunctionWidget dodali potrebne posluˇsalce addEventListener() za vseh pet gumbov in jih povezali s funkcijo addSpecificBump(). Ob ponov- nem zagonu aplikacije so gumbi delovali, izrisovale so se nove prenosne funkcije.

Konˇcno delovanje aplikacije je prikazano na sliki 5.2.

(43)

5.5 Poˇsiljanje novih funkcij do vmesnika 29

(44)

30 Izdelava modela za generiranje funkcij in konˇcnega vmesnika

(45)

6 Rezultati

6.1 Rezultati aplikacije za zbiranje podatkov

Naloga aplikacije in vmesnika, prikazanega na sliki 4.6 je bila zbiranje podat- kov o prenosnih funkcijah. Podatke smo zbirali s pomoˇcjo uporabnikov, ki so aplikacijo uporabljali za upodabljanje nakljuˇcno izbranega volumna. Izbrali smo ˇsirok nabor raznolikih uporabnikov. Veˇcina uporabnikov je bila mlajˇsa od 25 let, najmlajˇsi je ˇstel 16 let, najstarejˇsi pa 56. Uporabniki so se tudi razlikovali v stopnji raˇcunalniˇske razgledanosti. Bolj veˇsˇcim uporabnikom smo zato le poslali povezavo do aplikacije in jim svetovali, naj z uporabo orodja poskusijo izrisati karseda lepo upodobitev danega volumna. Z doloˇcenimi manj veˇsˇcimi uporabniki smo njihovo uporabo aplikacije spremljali, v nekaterih primerih tudi ponudili do- datno razlago delovanja vmesnika (npr. razlaga delovanja gumbov). Tudi v tem primeru smo uporabnike spodbudili, naj vmesnik uporabijo tako, da ˇcim lepˇse upodobijo volumen na zaslonu.

Aplikacija je prenosne funkcije zbirala pribliˇzno teden dni. V tem ˇcasu se je v podatkovni bazi zbralo 2017 zapisov prenosnih funkcij iz 30 razliˇcnih sej.

Prenosne funkcije so bile shranjene za vseh 17 volumnov, ki smo jih naloˇzili v aplikacijo. ˇStevilo shranjenih funkcij za vsak volumen je moˇcno variiralo, kar je vidno na grafu 6.1.

Najveˇc prenosnih funkcij je bilo zbranih za volumen z zaporedno ˇstevilko 6, in sicer 347. Najmanj prenosnih funkcij je bilo zbranih za volumen 13, le 19 zapisov.

Teˇzava je bila v razliki med uporabniki, saj so nekateri uporabniki v kvalitetne upodobitve volumnov vloˇzili veˇc ˇcasa kot drugi. Bolj enakomerno porazdelitev podatkov bi dobili, ˇce bi bolje nadzirali proces uporabe aplikacije za zbiranje

(46)

32 Rezultati

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0

100 200 300

86 178

55 113

74 347

54 211

86 80 38 49

19 253

42 87

245

Zaporedna ˇstevilka volumna ˇ Stevilo

zapisov

Slika 6.1: Graf ˇstevila zapisov prenosnih funkcij v podatkovni bazi za razliˇcne volumne

podatkov. Idealno bi bilo, da bi za vse volumne imeli pribliˇzno podobno ˇstevilo prenosnih funkcij, saj bi analiza za vse volumne potekala bolj enakomerno.

Pred analizo prenosnih funkcij smo iz podatkovne baze odstranili prazne za- pise in zapise tistih prenosnih funkcij, ki jih je izrisala aplikacija VPT ob pritisku gumba Add Bump, saj niso bili rezultat dela uporabnikov. To je ˇstevilo preno- snih funkcij zmanjˇsalo iz 2017 na 1904, naˇsli smo 113 neprimernih zapisov. Nabor prenosnih funkcij se je tako zmanjˇsal za 5,6 odstotka. Kasneje smo za potrebe analize prenosne funkcije z veˇc barvnimi polji razbili na manjˇse prenosne funkcije.

Povpreˇcno ˇstevilo barvnih polj v eni prenosni funkciji je znaˇsalo 1,66. Ko smo te funkcije razdelili, se je ˇstevilo prenosnih funkcij poveˇcalo na 3163. Podatke o novih prenosnih funkcijah za vsak volumen prikazuje 6.1.

Zanimalo nas je, kakˇsne prenosne funkcije so uporabniki shranjevali. S pomoˇcjo zajetih parametrov smo lahko za vsak volumen izrisali porazdelitev barvnih polj vseh funkcij, ki ta volumen opisujejo. Slika 6.3 prikazuje takˇsno porazdelitev na platnu za volumna aneurism.raw (zaporedna ˇstevilka 1) in csafe heptane.raw (zaporedna ˇstevilka 8).

(47)

6.1 Rezultati aplikacije za zbiranje podatkov 33

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0

200 400 600

96 238

83 184

90 666

73 339

128

79 62 76 22

374

54 127

472

Zaporedna ˇstevilka volumna ˇ Stevilo

novihprenosnihfunkcij

Slika 6.2: Graf ˇstevila zapisov prenosnih funkcij za analizo v modelu

Slika 6.3: Porazdelitev barvnih polj v prenosnih funkcijah volumnov 1 (na levi)

(48)

34 Rezultati

Iz teh porazdelitev je razvidno, da se je veˇcina uporabnikov za doloˇcanje kvalitetnih prenosnih funkcij odloˇcala, da bo barvna polja postavila na zgornjo stran platna. Tudi pri ostalih volumnih so porazdelitve barvnih polj sledile istemu vzorcu, kjer je zelo malo barvnih polj bilo postavljenih na spodnjo polovico platna.

Iz tega smo lahko sklepali, da se zgostitve podatkov v naˇsih volumnih nahajajo predvsem na zgornji strani platna. Iz grafov lahko tudi vidimo, da so na desni strani platna barvna polja vseh razliˇcnih oblik, na levi pa obiˇcajno najdemo le oˇzja barvna polja. Na teh obmoˇcjih so preˇsiroka barvna polja postala za upodobitve neuporabna, saj so izpostavila preveˇc ˇsuma v volumnu.

Opazili smo ˇse eno podrobnost. Veliko barvnih polj je bilo spremenjenih po ˇsirini, skoraj nobeno pa tudi po dolˇzini. Teˇzava je bila posledica manjkajoˇcega navodila na uporabniˇskem vmesniku, ki bi uporabnika seznanila z moˇznostjo spre- minjanja dolˇzine polja. To je v aplikaciji VPT sicer izvedljivo z pritisnjenim gumbom Shift in premikanjem koleˇsˇcka na miˇski.

Zbrane prenosne funkcije so tvorile osnovo za model generiranja prenosnih funkcij. Kvaliteto teh prenosnih funkcij smo lahko analizirali le s pomoˇcjo modela, ki je prenosne funkcije predlagal uporabniku.

6.2 Rezultati modela za generiranje prenosnih funkcij

Slika 5.2 prikazuje delovanje modela in pripadajoˇcega uporabniˇskega vmesnika za generiranje prenosnih funkcij. Ker je takih primerov uporabe veliko, smo delovanje modela tudi podrobneje ocenili. Zanimalo nas je, kako kvalitetno deluje model ob dodajanju razliˇcnega ˇstevila novih barvnih polj na platno.

Za zaˇcetek smo ocenjevali delovanje modela pri dodajanju prvega barvnega polja. Ko uporabnik v aplikaciji naloˇzi nov volumen v sceno, najprej pritisne na gumb Add Bump, ki predstavlja zaˇcetno razliˇcico prenosne funkcije. Na sredini platna se izriˇse okroglo barvno polje rdeˇce barve. Zaˇcetna razliˇcica prenosne funkcije je za upodabljanje naˇsih volumnov povsem neuporabna, saj volumna v sceni ne uspe kvalitetno upodobiti. S klikom na enega izmed novih gumbov model generira novo prenosno funkcijo in jo izriˇse na platnu, kot kaˇze slika 6.4.

(49)

6.2 Rezultati modela za generiranje prenosnih funkcij 35

Slika 6.4: Prvi primer uporabe modela za generiranje prenosnih funkcij za izris volumna coronal mal.raw.

Rezultat, kot ga kaˇze slika 6.4, smo dobili s klikom na gumb 1. TF. Z enim klikom gumba je uporabnik s pomoˇcjo modela izrisal dovolj kvalitetno upodobitev volumna, ki prikazuje vse njegove glavne lastnosti. Rezultate podobne kvalitete smo dobili, ˇce je uporabnik izbral katerega izmed ostalih ˇstirih gumbov, postopek pa je deloval kvalitetno tudi pri upodabljanju drugih volumnov. V teh primerih se je novo barvno polje izrisalo na zgornji polovici platna, kar se sklada s shranjenimi podatki, prikazanimi na sliki 6.3. Model je tako sposoben generirati kvalitetne prenosne funkcije za zaˇcetno upodobitev volumna, ki za uporabnika predstavljajo temelj za kvalitetno upodobitev volumna.

Uporabnik lahko na platno dodaja nova barvna polja in tako uravnava izgled volumna. Uporabnik s tem postopkom obiˇcajno ˇzeli izpostaviti doloˇcene dele volumna, tako da jih obarva drugaˇce kot preostanek volumna. Preizkusili smo, ali lahko v tem primeru model uˇcinkovito generira prenosne funkcije za upodobitev doloˇcenih delov volumna. Po zaˇcetni upodobitvi smo z kliki na nove gumbe dodali ˇse veˇc barvnih polj in ocenili kvaliteto nove upodobitve.

Na sliki 6.5 lahko vidimo novo upodobitev s prenosno funkcijo, ki smo jo generirali na podlagi prve, prikazane na sliki 6.4. Po kliku na gumb 1. TF smo pritisnili ˇse na gumb 2. TF, kar je upodobitev volumna korenito spremenilo. Prej svetlozelenim delom volumna se je spremenila barva, modro pa so se obarvali deli volumna, ki so bili prej teˇzko vidni. Nova prenosna funkcija je tako uspeˇsno izpostavila doloˇcene dele volumna in ga upodobila ˇse bolj kvalitetno kot prva.

(50)

36 Rezultati

Slika 6.5: Drugi primer uporabe modela za generiranje prenosnih funkcij za izris volumna coronal mal.raw.

volumna preizkusili tudi z uporabo drugih gumbov in volumnov. Ugotovili smo, da je model pri taki uporabi izredno nekonsistenten. V doloˇcenih primerih, kot prikazuje slika 6.5, model deluje dobro, v mnogih primerih pa dodajanje novih barvnih polj na prenosno funkcijo ne pomaga izpostaviti doloˇcenih delov volumna.

Generirane prenosne funkcije so v teh primerih obiˇcajno preveˇc podobne trenutni, zato se namesto bolj podrobne upodobitve samo spremeni barva volumna, veliko- krat pa ni nobenega vpliva na upodobitev. V nekaterih primerih smo tudi opazili, da dodajanje novih barvnih polj negativno vpliva na samo kvaliteto upodobitve volumna. Model v takih primerih generira prenosne funkcije, ki izpostavijo ˇsum in tako prikaˇzejo neˇzelene dele volumna. Ti so pogosto za uporabnika moteˇci, ker pogosto zakrivajo tiste dele volumna, ki jih uporabnik ˇzeli videti. Primer neuspeˇsne uporabe modela je prikazan na sliki 6.6, kjer je model generiral novo prenosno funkcijo, ki za upodobitev volumna bonsai.raw ni primerna. Funkcija je bila preveˇc podobna obstojeˇci, kar je potemnilo barvo volumna, izpostavila pa je tudi neˇzelen del volumna na spodnji strani zaslona. Vnoviˇcno dodajanje novih barvnih polj s pomoˇcjo modela le ˇse zmanjˇsa moˇznosti za kvalitetno upodobitev, tako da model za ta primer uporabe ni najbolj primeren.

(51)

6.2 Rezultati modela za generiranje prenosnih funkcij 37

Slika 6.6: Primer neuspeˇsne uporabe modela za generiranje prenosnih funkcij za

(52)

38 Rezultati

(53)

7 Sklepne ugotovitve

V diplomskem delu smo v ogrodje za volumetriˇcno upodabljanje volumnov vkljuˇcili model za generiranje prenosnih funkcij, ki deluje na podlagi metode glav- nih komponent. Za potrebe delovanja tega modela smo najprej izdelali aplikacijo in uporabniˇski vmesnik, katerih naloga je bila zbiranje podatkov, potrebnih za delovanje modela. Uporabniki so s prvim vmesnikom v podatkovno bazo vnesli preko 2000 prenosnih funkcij, ki so tvorile osnovo za naˇs model. Nato smo izdelali model za generiranje prenosnih funkcij in ga vkljuˇcili v obstojeˇco implementacijo ogrodja za volumetriˇcno upodabljanje. Model smo izdelali v obliki skripte, ki je prejela informacije o izdelani prenosni funkciji in s pomoˇcjo metode glavnih komponent uporabniku predlagala pet novih prenosnih funkcij, med katerimi je uporabnik lahko izbiral. Z generiranjem teh prenosnih funkcij smo uporabniku olajˇsali postopek upodabljanja volumnov, saj je uporabnik z izbiro nove prenosne funkcije lahko izboljˇsal kvaliteto upodobitve ˇzelenega volumna.

Prednosti naˇsega modela za generiranje prenosnih funkcij je veˇc. Sama upo- raba modela preko pripadajoˇcega vmesnika v ogrodju VPT je hitra in uporabniku lahko razumljiva. Integracija modela v spletne aplikacije je enostavna. Model je uˇcinkovit pri generiranju prenosnih funkcij za zaˇcetno upodobitev volumna, saj lahko uporabnik z enim klikom gumba volumen izriˇse dovolj kvalitetno, da pred- stavi vse njegove pomembne dele. Na tak naˇcin model povpreˇcnemu uporabniku pomaga pri upodobitvah volumnov. Model ni omejen na izkljuˇcno eno preno- sno funkcijo, ampak ob vsaki spremembi prenosne funkcije generira pet novih, ki izriˇsejo volumen na razliˇcen naˇcin. Pomanjkljivosti modela sta predvsem pre- velika odvisnost od shranjenih prenosnih funkcij in generiranje takih funkcij, ki izboljˇsajo kvaliteto upodobitve z izpostavljanjem doloˇcenih delov volumna. V doloˇcenih primerih je model sposoben generirati tudi take prenosne funkcije, ven-

(54)

40 Sklepne ugotovitve

dar so te velikokrat nekvalitetne in poslabˇsajo upodobitev volumna.

Model bi lahko izboljˇsali na veˇc naˇcinov. Uporabniˇski vmesnik bi lahko po- sodobili, da bi za vsako prenosno funkcijo prikazal predogled upodobitve, ki bi uporabniku olajˇsal izbiro prenosne funkcije. Model bi lahko prilagodili, da bi prenosne funkcije z veˇc barvnimi polji obravnaval neodvisno od drugih in jih ne bi razbijal na veˇc funkcij. V modelu bi lahko prilagodili uporabo metode PCA za izbiranje kvalitetnih prenosnih funkcij. Zbiranje podatkov, na osnovi katerih je deloval model, bi lahko prepustili ekspertom in ne navadnim uporabnikom. Kva- liteta modela je tudi preveˇc odvisna od kvalitete shranjenih podatkov, na katerih je zgrajen.

Model je tako za doloˇcene skupine uporabnikov uˇcinkovito orodje za izbiranje prenosnih funkcij pri upodabljanju volumnov. Metoda PCA se je v doloˇcenih primerih izkazala za primeren postopek pri analizi in generiranju prenosnih funk- cij. Zaradi pomanjkljivosti pri doloˇcenih primerih uporabe bi bilo treba uporabo metode prilagoditi, da bi ustrezala vsem zahtevam uporabnikov pri upodablja- nju volumnov. Model in pripadajoˇce ogrodje za volumetriˇcno upodabljanje lahko sluˇzita kot dobra iztoˇcnica za nadaljnje delo in analizo generiranja prenosnih funkcij.

(55)

Literatura

[1] V. p. T. w. F. Hofmann, “created vector graphics version of original file.” Dosegljivo: https://commons.wikimedia.org/w/index.php?curid=

14521474, mar. 2011. [Dostopano: 27. 08. 2021].

[2] “What is Computer Graphics? [Online].” Dosegljivo: http://www.

graphics.cornell.edu/online/tutorial/. [Dostopano: 15. 08. 2021].

[3] R. A. Drebin, L. Carpenter in P. Hanrahan, “Volume rendering,” ACM Si- ggraph Computer Graphics, vol. 22, no. 4, str. 65–74, 1988.

[4] T. He, L. Hong, A. Kaufman in H. Pfister, “Generation of transfer functions with stochastic search techniques,” v Proceedings of Seventh Annual IEEE Visualization’96, str. 227–234, IEEE, 1996.

[5] G. Kindlmann in J. W. Durkin, “Semi-automatic generation of transfer func- tions for direct volume rendering,” v IEEE Symposium on Volume Visuali- zation (Cat. No. 989EX300), str. 79–86, IEEE, 1998.

[6] J. L. Prauchner, C. M. Freitas in J. L. D. Comba, “Two-level interaction approach for transfer function specification,” v XVIII Brazilian Symposium on Computer Graphics and Image Processing (SIBGRAPI’05), str. 265–272, IEEE, 2005.

[7] C. D. Correa in K.-L. Ma, “Visibility-driven transfer functions,” v2009 IEEE Pacific Visualization Symposium, str. 177–184, IEEE, 2009.

[8] R. Maciejewski, I. Woo, W. Chen in D. Ebert, “Structuring feature space:

A non-parametric method for volumetric transfer function generation,”

IEEE Transactions on Visualization and Computer Graphics, vol. 15, no. 6, str. 1473–1480, 2009.

(56)

42 Literatura

[9] P. Sereda, A. Vilanova in F. A. Gerritsen, “Automating transfer function design for volume rendering using hierarchical clustering of material boun- daries.,” v EuroVis, str. 243–250, 2006.

[10] H.-C. Wong, U.-H. Wong in Z. Tang, “Direct volume rendering by transfer function morphing,” v 2009 7th International Conference on Information, Communications and Signal Processing (ICICS), str. 1–4, IEEE, 2009.

[11] J. Zhou in M. Takatsuka, “Automatic transfer function generation using con- tour tree controlled residue flow model and color harmonics,”IEEE Transac- tions on Visualization and Computer Graphics, vol. 15, no. 6, str. 1481–1488, 2009.

[12] O. Sharma, T. Arora in A. Khattar, “Graph-based transfer function for volume rendering,” v Computer Graphics Forum, vol. 39, str. 76–88, Wiley Online Library, 2020.

[13] ˇZ. Lesar, C. Bohak in M. Marolt, “Real-time interactive platform-agnostic volumetric path tracing in webgl 2.0,” vProceedings of the 23rd International ACM Conference on 3D Web Technology, str. 1–7, 2018.

[14] “WebGL Overview - The Khronos Group Inc [Online].” Dosegljivo: https:

//www.khronos.org/webgl/. [Dostopano: 16. 08. 2021].

[15] D. Weiskopf,GPU-based interactive visualization techniques. Springer, 2007.

[16] M. Owens, The Definitive Guide to SQLite. Apress, dec. 2006. Google- Books-ID: VsZ5bUh0XAkC.

[17] “Datatypes In SQLite Version 3 [Online].” Dosegljivo: https://www.

sqlite.org/datatype3.html. [Dostopano: 16. 08. 2021].

[18] K. Pearson, “Liii. on lines and planes of closest fit to systems of points in space,” The London, Edinburgh, and Dublin philosophical magazine and journal of science, vol. 2, no. 11, str. 559–572, 1901.

[19] F. Pedregosa, G. Varoquaux, A. Gramfort, V. Michel, B. Thirion, O. Grisel, M. Blondel, P. Prettenhofer, R. Weiss, V. Dubourg, J. Vanderplas, A. Passos,

(57)

Literatura 43

D. Cournapeau, M. Brucher, M. Perrot in E. Duchesnay, “Scikit-learn: Ma- chine learning in Python,” Journal of Machine Learning Research, vol. 12, str. 2825–2830, 2011.

[20] “XMLHttpRequest - Web APIs | MDN [Online].” Dosegljivo: https://

developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest. [Dosto-

Reference

POVEZANI DOKUMENTI

Ker pa tak naˇ cin razvoja prinaˇ sa kar nekaj prednosti tako za naroˇ cnika kot izvajalca, smo se odloˇ cili, da v tem diplomskem delu predstavimo testno voden razvoj v kombinaciji

Za postavitev naˇse spletne aplikacije smo se odloˇ cili za ponudnika oblaˇ cnih storitev Heroku, ki uporablja spletni streˇ znik nginx.. Na njem se nahaja aplikacija zgrajena

Glede na to, da nam mobilno multimedijsko stojalo ponuja moˇ znost poljubne konfiguracije, smo se odloˇ cili nadgraditi sto- jalo z modulom, ki omogoˇ ca brezˇ ziˇ cno

V sodobnem svetu se opravljajo meritve tudi pri nogometnih tekmah, zato smo se odloˇ cili, da to podroˇ cje podrobneje raziˇsˇ cemo in analiziramo s pomoˇ cjo analize omreˇ zij

Za prve dejavnike izboljˇsanja natanˇ cnosti napovedovanja ˇ casovnih vrst smo se osredotoˇ cili na pristope obdelav ˇ casovnih vrst. Za njih smo se odloˇ cili, ker so se ti do

Ceprav smo imeli v pridobljenih podatkih zapise o gostih iz petinpetdesetih ˇ razliˇ cnih drˇ zav, smo se odloˇ cili, da bomo o vplivu drˇ zave na dolˇ zino ˇ ciˇsˇ cenja

Z obstojem modernih odprto licenˇ cnih implementacij (GForth in PForth) bi veˇ cino naˇsega dela spadalo pod implementacijo ˇ ze obstojeˇ ce programske opreme. Odloˇ cili smo se,

Zaradi tega in predvsem zaradi boljˇ sega ra- zumevanja varnosti pri dinamiˇ cnem izvajanju kode smo se odloˇ cili, da bomo tudi mi napisali enostavno ogrodje za delo z vtiˇ cniki