SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
DIPLOMSKI RAD br. 1072
GRAFIČKO KORISNIČKO SUČELJE
ZA VIZUALIZACIJU VOLUMENA
Nebojša Popović
Zagreb, prosinac, 2006.
Ime i prezime: Nebojša Popović
Matični broj: 0036392237
Smjer: Računarstvo
Mentor: prof dr. sc. Sven Lončarić
Sadržaj
Grafičko korisničko sučelje za vizualizaciju volumena
3
SADRŽAJ
1. UVOD............................................................................................................... 4
2. TEORIJSKE OSNOVE.................................................................................. 6
2.1. FIZIKALNI MODEL........................................................................................... 6
2.2. VOLUMETRIJSKO KOMPOZITIRANJE......................................................... 9
2.3. AKVIZICIJA PODATAKA............................................................................... 10
2.4. ALGORITMI ZA VIZUALIZACIJU VOLUMENA......................................... 12
3. ARHITEKTURA GRAFIČKIH PROCESORA....................................... 14
3.1. TRADICIONALNA ARHITEKTRUA............................................................. 14
3.2. PROGRAMIBILNA ARHITEKTURA............................................................ 16
3.3. GLSL JEZIK....................................................................................................... 18
4. KORIŠTENJE GRAFIČKOG SKLOPOVLJA U VIZUALIZACIJI... 22
4.1. VOLUMNA VIZUALIZACIJA KORIŠTENJEM 2D TEKSTURA................. 22
4.2. MEMORIJSKA RAZMATRANJA................................................................... 25
4.3. VOLUMNA VIZUALIZACIJA KORIŠTENJEM 3D TEKSTURA................ 26
4.4. INTERAKTIVNA PROMJENA TRANSFER FUNKCIJA.............................. 27
4.5. PROJEKCIJE MAKSIMALNOG INTENZITETA ( MIP ) ............................. 29
4.6.MODEL OSVJETLJENA................................................................................... 30
5. IMPLEMENTACIJA..................................................................................... 33
5.1. STRUKTURA PROGRAMSKE IMPLEMENTACIJE..................................... 33
5.2. KORIŠTENJE PROGRAMSKE IMPEMENTACIJE........................................ 34
5.3. REZULTATI....................................................................................................... 40
6. ZAKLJUČAK................................................................................................. 41
7. LITERATURA.............................................................................................. 43
8. SAŽETAK...................................................................................................... 44
1. Uvod
Grafičko korisničko sučelje za vizualizaciju volumena
4
1. UVOD
Volume rendering podskupina je tehničke discipline koju zovemo «scientific
visualization». «Scientific visualization» je disciplina koja se bavi vizualizacijom
vektorskih ili skalarnih podataka koji su obično definirani u 3D prostoru. Svrha
vizualizacije je analiza podataka koja može biti potpomognuta segmentacijom ili
isključivo vizualna analiza. Pod pojmom «scientific visualization» osim volumnog
renderiranja podrazumjevamo i «isosurfacing», «vector field visualization», vizualizaciju
toka i sl.
Slika 1. – Primjeri primjene vizualizacije volumena u medicini i industriji dobiveni
našom programskom implementacijom. Prva slika prikazuje CT ljudske glave, a druga
slika CT motora sa uključenim modelom osvjetljenja
Volume rendering je način vizualizacije 3D skalarnih polja. Osnovni element 3D
skalarnog polja je voxel. Svaki voxel odre en je prozirnošču i bojom (color, opacity).
Pod 3D skalarno polje obično podrazumjevamo niz 2D snimaka dobivenih CT ili MRI
akvizicijom na temelju kojih radimo 3D rekonstrukciju volumena. Svim algoritmima za
vizualizaciju volumena je zajedničko da vizualizaciju 3D skalarnog polja rade na taj
način da svaki voxel, odnosno 1 element 3D skalarnog polja daje doprinos konačnoj slici
odnosno 2D projekciji 3D volumena na površinu prikaza. Na taj način pogledom na
1. Uvod
Grafičko korisničko sučelje za vizualizaciju volumena
5
volumen dobivamo informaciju o unutrašnjosti tijela, za razliku od tipične računalne
grafike u kojoj je tijelo sačinjeno od poligonalnog modela i pogledom na rekonstruiranu
scenu imamo samo informaciju o površini tijela. Stoga klasičnu računalnu grafiku
nazivamo surface rendering za razliku od volumne vizualizacije – volume rendering.
Primjena tehnike vizualizacije volumena je široka. Mi smo se tijekom izrade
rada fokusirali na medicinskoj primjeni i proučavali medicinske podatke. Volume
rendering osim medicinske primjene možemo koristiti i u industriji. Primjerice
promatramo li volume rendering CT snimke bloka motora možemo uočiti pukotine koje
vizualnom inspekcijom površine ne možemo uočiti jer nema površinskih oštečenja, već
su ona u unutrašnjosti bloka. Vizualizaciju volumena možemo koristiti u geologiji za
analizu strkuture tla, primjerice kod donošenja odluke o odabiru lokacije za naftnu
bušotinu. U meteorologiji volume rendering koristimo za vizualizaciju zračnih masa koje
diferenciramo s obzirom na različite parametre svake prostorne točke, primjerice tlak,
temperatura i sl. Dakle volumnu vizualizaciju primjenjujemo u situacijama kada nam je
potrebna vizualizacija nekog prostornog objekta na način da steknemo uvid i u njegovu
unutrašnjost. Na taj način olakšavamo interpretaciju kompleksnih trodimenzionalnih
podataka.
Cilj ovog diplomskog rada bio je razviti programsku implementaciju volumne
vizualizacije potpomognutu suvremenim grafičkim hardware-om. Pribjegava se
hardware-skoj potpori zbog izuzetne vremenske zahtjevnosti algoritama vizualizacije
volumena. Korištenjem hardware-ske podrške postižemo real-time efekt. Cilj rada
tako er je stvoriti modularnu implementaciju koju kasnije možemo koristiti u okviru
druge aplikacije. Taj zahtjev je rješen na taj način da je kompletna implementacija
volume rendering algoritma realizirana u dll modulu (dynamic link library). Dostupan je
set API funkcija koje omogučuju korištenje kompletne funkcionalnosti software-a.
Korištenjem navedenog modula realizirano je i grafičko sučelje za pregled podataka i
podešavanje parametara renderiranja. Programska impementacija realizirana je u C/C++
programskim jezicima korištenjem openGL modula, win32 API i GLSL (openGL
shading language) jezika na Windows platformi. Korištenjem GLSL-a omogućen je rad
aplikacije u realnom vremenu potpomognut modernim arhitekturama grafičkih kartica,
neovisno o proizvo aču kartice.
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
6
2. TEORIJSKE OSNOVE VIZUALIZACIJE VOLUMENA
2.1. Fizikalni model
Dakle predmet obrade je trodimenzionalno skalarno polje. To polje nazivamo
volumenom. Elementi trodimenzionalnog polja nazivaju se voxeli analogno pixelima u
obradi fotografije. Volumna vizualizacija je simulacija propagacije svjetla kroz neki
medij (slika 1). Volumen promatramo kao blok djelomično prozirnih obojanih čestica
koje u interakciji sa zrakama svjetla prolaze kroz volumen. Svjetlo u volumenu može biti
emitirano, absorbirano, raspšeno, reflektirano, ovisno o svojstvima čestica. Osim tih
efekata fizikalno je moguće razmatrati i fosforescenciju (svjetlo se absorbira i reemitira
nakon nekog vremena) i fluorescenciju (svjetlo se absorbira i emitira na drugoj
frekvenciji), me utim zbog tehničkih zahtjeva simulacije fizikalni model reducirat ćemo
na što jednostavniji model.
izvor svjetla
promatrač
slika (ravnina projekcije)
volumen
Slika 2 : Protok svjetla kroz volumen i položaj promatrača
Protok fotona kroz prostor specijalan je slučaj Boltzmanove transportne teorije
koja se odnosi na transport statističke distribucije čestica (poput fotona) kroz prostor.
Lacroute [95] opisuje adaptaciju navedenog fizikalnog modela za primjenu u računalnoj
grafici i volumnoj vizualizaciji. Protok fotona kroz uniformni prostor brzo stiže do
ravnotežnog stanja, pa je nakon toga protok fotona kroz neku regiju prostora u danom
smjeru vremenski konstantan. Stoga ćemo promatrati relaciju koja opisuje energetski
balans.
∫ →++Φ−=∇⋅
2
'),()',(),(),()(),(
S
t drLrkrrLrrL ωωωωωεωωω (1.1)
),( ωrL - označava isijavanje po steradianu (radiance). Isijavanje po steradioanu
predstavlja gustoću snage emitiranu fotonima u dano smjeru. Jedinica je W/m2
sr. Prema
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
7
relaciji isijavanje duž odre ene zrake svjetla jedanko je sumi od tri člana koji
predstavljaju pozitivne i negativne doprinose duž volumena.
)(rtΦ - je koeficijent ekstinkcije (m-1
) i označava vjerojatnost po jediničnoj
udaljenosti da će foton putujući duž zrake biti absorbiran ili raspršen u volumenu u
drugom smjeru.
),( ωε r - je funkcija emisije (W/m3-sr) koja uračunava fotone emitirane unutar
volumena
)',( ωω →rk - je kernel raspršivanja ( jedinica sr-1
m-1
) i predstavlja vjerojatnost po
jedinici udaljenosti i po prostornom kutu da foton koji se kreće u smjeru ω ' bude
raspršen u smjeru ω . Tu funkciju integriramo pomoženu sa isijavanjem iz svih smjerova
(S2
) da bi uračunali fotone raspršene u smjeru zrake.
Relaciju (1.1) možemo navesti i u integralnoj formi.
'),'(),(),(
),(
)',(),(
drrQerLerL
B
B
rr
rr
BB
rr
ωωω ττ
∫
Γ
−−
+= (1.2)
∫Γ
Φ≡
),(
')'(),(
sr
t drrsrτ (1.3)
∫ →+≡
2
')',()',(),(),(
S
drLrkrrQ ωωωωωεω (1.4)
Ovdje je τ integral ekstincijskog koeficijenta duž ravne putanje izme u r i s. Putanja
izme u dvije točke označena je sa Γ(r,s). ),( ωBB rL je funkcija koja specificira uvjete
preko zatvorene površine koja obuhvaća volumen. Točka rB je sjecište izme u površine
koja obuhvaća volumen i zrake iz r u smjeru ω . ),( ωrQ je suma izraza za emisiju i
raspršivanje.
Relacija (1.2) nam govori da je gustoća isijavanja u bilo kojoj točci duž zrake
jednaka doprinosu od isijavanja koje ulazi kroz rub volumena plus suma doprinosa duž
zrake. Svi ti doprinosi pomnoženi su funkciom eksponencijalnog prigušenja koja ovisi o
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
8
udaljenosti od točke promatranja do izvora. Navedena relacija se u pojednostavljenom
obliku primjenjuje u mnogim tehnikama vizualizacije i računanja osvjetljenja. Mi ćemo
ju tako er koristiti u volumnoj vizualizaciji ali maksimalno pojednostavljenu. Uvest
ćemo pretpostavke koje nam omogućuju implementaciju takvog modela osvjetljenja.
Pretpostavit ćemo da nema apsorpcije od izvora svjetla do ulaska u volumen. Nadalje
pretpostavljamo da nema raspršivanja unutar volumena. Pretpostavljamo izotropnu
absorpciju (apbsorpcja je neovisna o smjeru zrake ω ). I posljednja pretpostavka je da
imamo konačan broj izvora svjetlosti.
Uz takve pretpostavke možemo izbaciti dio izraza koji se odnosi na raspršivanje.
Dobivamo model prema kojem se ukupna energija fotona akumulira u svakom voxelu i
tada re-emitira zajedno sa emisijom trenutnog voxela. Takav model često se naziva
emission-absorbtion only zbog toga što je zanemareno raspršivanje odnosno scattering.
Uz navedena pojednostavljenja možemo navesti sljedeću relaciju.
')'()(
'
'')''(
dxxexL
B
x
x
t
x
x
dxx
ε∫
∫Φ−
= (1.5)
U izrazu (1.5) izvršena je reparametrizacija pa poziciju duž smjera pogleda predstavlja
varijabla x' sa gornjom granicom xB ( točka izlaska zrake iz volumena). Ovu jednadžbu
ćemo numerički evaluirati i pomoću nje možemo realizirati sustav za volumnu
vizualizaciju. Da bi dobili projekciju volumena kroz ravninu propuštamo zraku svjetlosti
(kao na slici 3) kroz svaku točku konačne slike. Zraka prolazi kroz volumen i dolazi u
interakciju sa voxelima volumena. Svaki voxel duž zrake emitira/apsorbira odre eni dio
svjetlosti i daje svoj doprinost gustoći isijavanja za trenutnu zraku. Propuštanjem svih
zraka dobivamo konačnu sliku, a L na «kraju» svake zrake računamo relacijom (1.5) .
Navedena tehnika vizualizacije naziva se ray-casting i klasičan je način volumne
vizualizacije.
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
9
promatrač
slika
(ravnina projekcije)
zraka
«pogleda»
Slika 3 : Ovo je pojednostavljen model sustava za vizualizaciju volumena. Propuštanjem
zrake svjetlosti kroz ravninu projekcije (zaslon) te volumen, računamo interakciju svjetla
sa voxel-ima duž putanje i tako izračunavamo intenzitet svjetla u točci T.
2.2. Volumetrijsko kompozitiranje (volumetric compositing)
Dakle za realizaciju sustava za volumnu vizualizaciju moramo evaluirati relaciju
(1.5) za svaku točku konačne slike. Naravno da bi implementirali rješavanje relacije na
računalu moremo ju svesti na diskretan oblik. Diskretan oblik relacije naziva se
volumetrijsko kompozitiranje (volumetric compositing) i glasi:
∏∑∑
−
=
∆−
−
=
∑ ∆−−
=
⋅∆=∆⋅=
−
= 1
0
1
0
1
0
1
0
)(
i
j
x
n
i
ii
xn
i
j
i
j j
exxexL
φ
φ
εε (1.6)
Pri tome vrijedi:
εi = ε (x + i∆x)
Фi = Ф(x + i∆x) (1.7)
Uvedimo supstituciju:
αi = 1 – e–Фi∆x
gustoća (opacity) voxela i
Ci = (εi / αi) ∆x boja voxela i
ci = Ci αi predkalkulirana boja i gustoća (opacity) (1.8)
Uz supstitucije (1.8) možemo navesti konačan oblik volumetric compositing jednadžbe.
∏∑
−
=
−
=
−=
1
0
1
0
1)(
i
j
j
n
i
icxL α (1.9)
Relacija (1.9) često se piše i na sljedeći način primjenom over operatora.
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
10
L(x) = c0 + c1(1 – α0) + c2(1 – α0) (1 – α1) + ... + cn-1(1 – α0 ) ... (1 – αn-2)
= c0 over c1 over .... over cn-1 (1.10)
Navedena tehnika volumetrijskog kompozitiranja koristi se u većini algoritama volumne
vizualizacije za estimaciju integrala (1.5). Sada možemo navesti pojednostavljen
algoritam za realizaciju vizualizacije volumena.
• Za svaki pixel konačne slike propusti zraku svjetlosti kroz pixel slike
o Za svaki voxel duž zrake izračunaj boju i gustoću na temelju skalarne
vrijednosti volumena u točci (x,y,z)
o Izvrši volumno kompozitiranje za svaki voxel duž volumena.
Uočavamo da konačna slika ima n2
pixela. Neka svaka zraka prolazom kroz volumen
dolazi u interakciju sa n voxela vidimo da je složenost algoritma O(n3
). Ako imamo
volumen dimenzije 512x512x512 voxela računanje volumne vizualizacije vremenski je
zahtjevno. Postoje tehnike koje ubrzavaju taj proces, primjerice shear-warp
transformacija ili early ray termination ali njihova brzina još uvijek nije zadovoljavajuća.
Me utim korištenjem napredne arhitekture grafičkih procesora danas prisutnih u širokoj
potrošnji možemo postići vizualizaciju u realnom vremenu. Pod realnim vremenom
podrazumjevat ćemo brzine iscrtavanja od ~20 slika u sekundi i više.
2.3. Akvizicija volumnog podatka
Dakle da bi vizualizirali volumen, moramo ga prvo snimiti odnosno dohvatiti
nekom metodom. Dohvat odnosno akvizicija volumena odnosi se na neki način snimanja
primjerice trodimenzionalni snimak dijela tijela u medicinske svrhe. Takve snimke mi
smo najčesšće koristili prilikom testiranja naše implementacije volume rendering sustava.
Riječ je o MRI ili CT snimkama ljudske anatomije. Neki od načina akvizicije su:
• računalna tomografija ( CT – computer tomography)
• magnetska rezonancija ( MRI - magnetic resonance imaging)
• ultrazvuk
• PET (positron emission tomography)
• SPECT (single photon emission computerized tomography)
Važno je primjetiti da od gore navedenih metoda CT i MRI mjere anatomske stukture kao
funkciju prostora, dok PET i SPECT promatraju vremensku promjenu strukture. S
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
11
obzirom da je riječ o vizualizaciji trodimenzionalnog skalarnog polja ne mora nužno biti
riječ o snimku, već možemo vizualizirati i neki analitički model primjerice model atoma
sa prikazom energetskih stanja i sl. Možemo ukratko proanalizirati rad CT i MRI
akvizicije s obzirom da smo najviše upotrebljavali snimke dobivene tom metodom.
2.3.1 Računalna tomografija (CT)
Računalna tomografija generira snimak tako da odre uje gustoću tvari u
unutrašnjosti tijela. Propuštanjem X-zrake kroz tijelo, i mjerenjem njenog prigušenja s
druge strane detektorom, CT ure aj utvr uje iznos integrala apsorpcijske funkcije.
∫−
= dxx
eIxI )(
0)( µ
(1.11)
Pri tome je µ(x) funkcijska ovisnost apsorpcije o položaju duž X-zrake. Da bi na temelju
jedno dimenzionalne apsorpcijske funkcije odredili strukturu dvodimenzionalnog
presijeka tijela možemo primjerice propustiti niz zraka čiji izvorišni položaji čine
radijalnu strukturu. Na temelju takvog radijalnog snimka možemo rekonstruirati
dvodimenzionalni presjek. Niz takvih presjeka čini našu željenu 3D strukturu odnosno
volumen.
rengenska cijev X-zrake
detektor
Slika 4 : pojednostavljen prikaz CT snimanja
2.3.2 MRI akvizicija
MRI je tako er tehnika snimanja unutrašnjosti volumena no, za razliku od CT-a
koji prikazuje samo razliku u intenzitetu duž zrake, MRI prikazuje i male razliku u
strukturi i time je pogodan za situacije u kojima treba precizan opis tkiva poput snimanja
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
12
mozga. Prva implementacija nastala je 1980 godine i predstavljala je revoluciju u
medicinskom snimanju. MRI snimanje bazira se na reakciji protona (vodikove jezgre) na
vanjsko magnetsko polje. Tijelo prvo podvrgavamo snažnom magnetskom polju te ono
utječe na orijentaciju protona. Nakon toga niz radio valova odašilje se kroz tijelo i remeti
orijentaciju protona te oni dolaze u stanje rezonancije. Rezonanciju mjeri osjetljiva
antena i omogućuje računanje gustoće protona (proton density - PD), širinu latice spina
(T1), i vrijeme relaksacije spina (T2) za svaku točku prostora. Vrijednost voxela računa
se kao srednja vrijednost navedenih veličina – PD, T1, T2. Osim kvalitetnije snimke
MRI ima još jednu prednost nad CT snimanjem. S obzirom da ne izlaže tijelo X-zrakama
nedestruktivan je po ljudsko zdravlje no cijena samog snimanja (u financijskom smislu)
je veća.
Slika 5 : Usporedba CT snimke (lijevo) i MRI snimke (desno). Uočljivo je da
MRI snimak sadži preciznu informaciju o strukturi tkiva
2.4 Algoritmi za volumnu vizualizaciju
Postoji više algoritama za volumnu vizualizaciju. Naša implementacija realizirana
je teksturno baziranom volumnom vizualizacijom. Bitno je napomenuti da većina
algoritama oponaša propagaciju zrake svjetla volumnim kompozitiranjem prikazanim u
relaciji (1.10). Tako er je bitno spomenuti da algoritme dijelimo na one orijentirane na
sliku i one orijentirane na volumen (image order te objekt order) ovisno o redosljedu
prolaza algoritma. Ako propuštamo zraku svjetla kroz svaki pixel slike i tada pratimo
kroz koje voxel-e prolazi riječ je o image order algoritmu. Ako algoritam prolazi redak
2. Teorijske osnove vizualizacije volumena
Grafičko korisničko sučelje za vizualizaciju volumena
13
po redak, stupac po stupac, te presjek po presjek kroz voxel-e volumena tada je riječ o
objekt order algoritmu. Naš pristup spada u object order algoritme.
image order object order
volumen
ravnina projekcije
promatrač promatrač
Slika 6 : Ilustracija pokazuje razliku image order (lijevo) te objekt order (desno)
algoritma. Dakle razlika je u redosljedu kojim algoritam obilazi
voxele volumena.
Najbitniji algoritmi za volumnu vizualizaciju su:
• Ray casting (tradicionalan pristup)
• Splatting
• Shear-warp algoritam
• Volume rendering u frekvencijskoj domeni
• Hardware accelerated volume rendering
Možemo se na intuitivan način osvrnuti na spomenute algoritme. Ray casting smo već
opisali. Spada u image order algoritme i složenost mu je O(n3
). Splatting je object order
algoritam. Ideja je da se iterira voxel po voxel i da se svaki voxel projicira, točnije «baca»
na ravninu projekcije i gleda kakav je otisak ostavio odnosno koji mu je doprinos
konačnoj slici (uspore uje se s bacanjem grude snjega na površinu). Frequency Domain
Volume rendering pomoću FFT i IFT transformacija u 3 dimenzije obavlja volumnu
vizualizaciju pritom koristeći teorem o projekciji. Frequency Domain Volume
rendering reducira kompleksnost algoritma na O( n2
log n)
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
14
3. ARHITEKTURA GRAFIČKIH PROCESORA
3.1 Tradicionalna arhitektura
Da bi dobili uvid u način rada hardware-ski ubrzanog volumne vizualizacije prvo
ćemo objasniti način rada klasične računalne grafike i tradicionalnog grafičkog hardware-
a. U klasičnoj računalnoj grafici prikazujemo samo površinu objekta. Površina objekta
aproksimirana je manjim ili većim brojem poligona, najčešće trokuta kao osnovnog
geometrijskog primitivna. Grafičke kartce zbog toga imaju arhitekturu prilago enu
procesiranju jako velikog broja poligona. Dakle cijela scena je sastavljena od pologona.
Ti poligoni mogu biti osjenčani da bi se dobio privid osvjetljenosti scene. Osjenčanost
poligona odre ujemo na temelju kuta izme u normale na površinu poligona te smjera iz
kojeg dolazi svjetlost i smjera promatrača (slika 8). Nadalje na površinu poligona
možemo projicirati neku sliku i tu tehniku nazivamo teksturiranje. Time površina dobiva
uvjerljiviji izgled. Trokut opisujemo tako da zadamo njegove vrhove kao vektore u
trodimenzionalnom prostoru (i,j,k). Matematičkim tranformacijama poput translacije i
rotacije pomičemo objekte u prostoru a tako er pomičemo i izvor svjetlosti i kameru
odnosno promatrača. Nakon obavljenih prostornih tranformacija, sjenčanja i
teksturiranja scenu moramo projicirati na ravninu odnosno ekran. Projekciju vršimo
pomoću perspektivne ili ortogonalne transformacije. Dakle grafički procesor obavlja
navedene operacije umjesto CPU jedinice, i obavlja ih daleko brže i time rasterećuje
sustav. Grafička kartica organizira svoje operacije u protočnu strukturu. Protočnu
strukturu grafičke kartice i openGL sustava objasnit ćemo na pojednostavljenoj
apstraktnoj razini.
Slika 7 : Pojednostavljeni prikaz arhitekture grafičkog akceleratora
GEOMETRIJSKE
TRANSFORMACIJE
RASTERIZACIJA OPERACIJE NA
FRAGMENTIMA
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
15
normala
izvor svjetla
Slika 8 : Lijeva slika pokazuje da bilo kakvu plohu u prosturu možemo aproksimirati većim ili
manjim brojem poligona. Desna slika prikazuje ovisnost osjenčanosti poligona o kutu
izme u normale i zrake svjetlosti. Primjetimo da je donji poligon intenzivnije
osvjetljen zbog manjeg kuta normale i smjera svjetlosti
Geometrijske transformacije
U fazi geometrijskih transformacija grafički akcelerator obavlja afine transformacije,
odnosno množenje sa matricama transformacije (rotacija, translacija). Za svaki vektor
računa se lokalno osvjetljenje na bazi normale i položaja svjetla. Iz liste lektora formiraju
se primitivi – poligoni (primitive assembly). Zatim se svi vektori projiciraju na ravninu da
bi stvorili 2D prikaz trodimenzionalne scene.
Rasterizacija
Nakon što je geometrijska scena projicirana na ravninu, vrši se dekompozicija poligona
na fragmente. Fragmenti su elementi projicirane slike koji će kasnije biti pretvoreni u
pixel-e. Generiraju se teksturne koordinate koje odre uju kako će se tekstura «naljepiti»
na poligon i zatim se primjenjuje teksturiranje – pridjeljivanje teksture poligonima. U toj
fazi primarna boja fragmenta kombinira se sa bojom iz teksturnog elementa.
Operacije na fragmentu
Tu spadaju alpha test, stencil test, depth test i alpha blending. Alpha test je faza u kojoj
se odbacuju svi fragmenti čija neprozirnost (opacity) ne zadovoljava specificirani uvjet.
Stencil test odbacuje sve fragmente kojima je postavljen stencil buffer (dodatni spremnik
koji možemo koristiti primjerice za stvaranje sjena). Depth test odbacuje sve fragmente
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
16
koji su zaklonjeni odnosno nevidljivi promatraču. Alpha blending je postupak u kojem se
vrijednost fragmenta kombinira sa frame buffer-om (spremnik u kojem se formira
konačna 2D slika). Alpha blending se najčešće koristi za primjerice iscrtavanje polu
prozirnih poligona što ćemo koristiti za volumnu vizualizaciju.
niz vektora (vertex) poligonalni model
rasterizacija
Slika 9 : Ilustracija sastavljanja primitiva (primitive assembly) i rasterizacije
3.2 Programirljiva arhitektura
Arhitektura opisana u prethodnom poglavlju je fiksna (fixed function pipeline)
zato što programer aplikacije ne može utjecati na redosljed ili način izvo enja operacija.
Me utim na novijem grafičkom hardware-u susrećemo se s programirljivom
arhitekturom. Programeru je dopušteno interferiranje sa operacijama u pipeline-u. Na
izvo enje operacija transformacije i osvjetljenja (T&L – transformation & lighting)
možemo utjecati vertex programiranjem, a na operacije vezane uz fragmente – fragment
programiranjem. S obzirom na različite arhitekture različitih proizvo ača grafičkih
kartica u ranijim fazama vertex i fragment programiranja mogli smo programirati jedino
korištenjem API funkcija niske razine, specifične za ure aje pojedinih proizvo ača. Na
tržištu grafičkih kartica široke potrošnje apsolutno dominiraju ATI i NVIDIA, tako da je
pristup specifičnoj funkcionalnosti bio omogućen openGL ekstenzijama. Približno ista
funkcionalnost omogućena je kroz odgovarajuće DirectX API funkcije . OpenGL
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
17
ekstenzije su set API funkcija koje izlaze iz okvira openGL standarda i vezane su za
proizvo ača.
Slika 10 : Programirljivo grafičko sklopovlje odnosno utjecaj vertex i fragment programiranja na
protočnu strukturu.
Starije OpenGL ekstenzije koje su omogućavale programirljivost protočne
strukture su GL_ATI_fragment_shader te GL_NV_registry_combiner. Funkcionalnost na
DirectX 8.x podsustavu bila je omogućena kroz Vertex_shader 1.x te Pixel Shader 1.x
API funkcije. Noviji set API funkcija dostupan je u openGL-u kroz
GL_ARB_fragment_program i GL_ARB_vertex_program. Oznaka GL_ARB u prefiksu
znači da su ekstenzije odobrene od strane Open GL Arhitecture Review Board tijela koje
se bavi standardizacijom openGL ekstenzija. Približno ista funkcionalnost omogućena je
u DirectX 9.x podsustavu Vertex Shader 2.x te Pixel Shader 2.x API funkcijama. Bitno je
napomenuti da je noviji set API funkcija neovisan o proizvo aču grafičke kartice što
predstavlja bitno olakšanje u razvoju grafičkih aplikacija i put prema standardiziraciji
GPU (graphics processor unit) programiranja.
Protočnastruktura Transformacije i
osvjetljenje (T&L)
Sastavljanje
primitiva
(primitive assembly)
Rasterizacija
Operacije na
fragmentu
Vertex Processor
Fragment Processor
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
18
Navedene API funkcije su niske razine (low level API) no danas postoje i jezici
visoke razine namjenjeni programiranju protočne strukture. Neki od jezika visoke razine
su:
• Cg ( «C for graphics») – jezik koji je predložen od strane NVIDIA-e
• HLSL («High Level Shading Language») – dio directX-a (Microsoft)
• GLSL («Open GL Shading Language») – predložen od strane 3D labs-a
Mi smo implementaciju bazirali na GLSL jeziku te ćemo ga stoga detaljnije opisati.
Valja napomenuti da su navedeni jezici u širokoj primjeni u računalnoj grafici i
predstavljaju revoluciju u kvaliteti i brzini grafike.
3.3 GLSL jezik
Prilikom implementiranja aplikacije za GLSL jezik odlučili smo se prvenstveno
zbog toga što je neovisan o proizvo aču i dio je OpenGL 2.0 standarda. Open GL koristili
smo zbog platformske neovisnosti, dakle po potrebi bi mogli programski kod prilagoditi
za drugi operativni sustav osim Microsoft Windows-a. GLSL je programski jezik visoke
razine čija je sintaksa bazirana na sintaksi programskog jezika C. GLSL program sastoji
se od vertex i fragment programa (vertex shader, fragment shader). Možemo
pojednostavljeno reći da vertex shader odre uje poziciju vektora, a fragment shader boju
vektora, odnosno fragmenta koji je u konačnici pixel.
Vertex shader
Ulazi u vertex shader su podaci o vektoru koje mu šalje OpenGL aplikacija,
primjerice boja, pozicija, normala i sl. Vertex shader može obavljati sljedeće operacije:
• Transformacije pozicije vektora
• Transformaciju normale
• Generiranje teksturnih koordinata
• Osvjetljenje na razini vektora
• Računanje boje
Prilikom pisanja vertex shader-a nemoramo implementirati svu funkcionalnost već samo
one dijelove koje trebamo za volumnu vizualizaciju. Vertex shader mora postaviti
varijablu gl_Position. Vertex procesor ima pristup OpenGL stanjima pa može obavljati
operacije vezane uz osvjetljenje i može pristupati teksturama. Nema pristup frame
buffer-u.
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
19
Fragment shader
Zadužen je za operacije:
• Računanje boja i teksturnih kooordinata sa interpoliranim vrijednostima (na razini
pixel-a)
• Primjenu teksture
• Računanje magle
• Računanje interpoliranih normala ako je potrebno osvjetljenje na razini pixel-a
(per pixel lighting)
Ulazi u fragment shader su interpolirane vrijednosti iz prethodnih stadija poput pozicije
nomrale i sl.
Te vrijednosti su u vertex shader-u izračunate na razini vektora, me utim ovdje ih
razmatramo na razini fragmenta – kasnije pixel-a. Fragment shader nemože utjecati na
poziciju pixela na slici jer je ona izračunata u vertex shader-u. Izlaz iz ovog stadija može
biti zapisan u gl_FragColor ili možemo odbaciti (discard) vrijednost fragmenta. Tako er
ovdje nemamo pristup frame buffer-u što znači da se operacije poput alpha blending-a
obavljaju nakon ove faze.
Jenostavnim primjerom ilustrirat ćemo upotrebu GLSL-a
N - normala
θ
L – izvor svjetla
Slika 11 : Poligon, normala na poligon i izvor svjetla
Na slici (11) vidimo situaciju u kojoj računamo osvjetljenje poligona na temelju normale
i smjera dolazne svjetlosti. Osvjetljenje ćemo računonati po Lambert-ovom zakonu koji
kaže da je svjetlina ravnine koja difuzno raspršuje svjetlost proporcionalna kosinusu kuta
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
20
smjera svjetla i normale na površinu. Ovaj zakon matematički je formuliran u relaciji
(3.1).
)cos(θ⋅⋅= dd MLI (3.1)
Pri tome je Ld difuzni koeficijent izvora svjetla a Md difuzni koeficijent materijala.
Vertex shader
uniform vec3 lightDir;
uniform float Md, Ld;
void main()
{
vec3 normal, lightDir;
float NdotL;
float diffuse;
normal = normalize( gl_NormalMatrix *
gl_Normal );
NdotL = max( dot(normal, lightDir), 0.0);
diffuse = Md*Ld*NdotL;
gl_FrontColor = diffuse;
gl_Position = ftransform();
}
Ovaj trivijalni vertex shader prvo računa normalu odnosno transformira ju u prostor
promatrača (eye space) i normalizira. Zatim računa skalarni produkt izme u normale i
smjera svjetla te na temelju difuznih konstanti Md i Ld (relacija (3.1)) prenesene iz
aplikacije računa konačnu boju vektora. S obzirom da smo ovdje izračunali i poziciju i
boju vektora u fragment shaderu nemoramo obavljati dodatne operacije.
Fragment shader
void main()
{
}
3. Arhitektura grafičkih procesora
Grafičko korisničko sučelje za vizualizaciju volumena
21
Ovim jednostavnim primjerom demonstrirali smo kako pomoću GLSL-a možemo
koristiti programirljivost protočne strukture. Naša implementacija intenzivno koristi
GLSL za primjerice interaktivnu promjenu transfer funkcija, model osvjetljenja,
isosurfacing i sl. Napomenut ćemo još da GLSL programski odsječak kao i svaki drugi
moramo kompajlirati da bi ga preveli u strojni kod i izvršili. Me utim kompajliranje
nećemo izvoditi u zasebnom okružju već ćemo API funkcije za kopajliranje GLSL koda
izvoditi iz same aplikacije. Slika (12) ilustrira taj proces. Dakle proces kompajliranja
GLSL-a odvija se tijekom izvršavanja same aplikacije, odnosno «on the fly». Bitno je
primjetiti da nam to omogućuje modificiranje GLSL programskog odsječka bez da
kompajliramo cijelu aplikaciju.
programski kod aplikacije
....
programski kod aplikacije
....
Slika 12 : Proces kompajliranja GLSL koda koji se ne odvija tijekom kompajliranja same
aplikacije već tijekom izvršavanja aplikacije (on fly)
VERTEX SHADER
glCreateProgram
glAttachShader
glAttachShader
glLinkProgram
glUseProgram
glCreateShader
glShaderSource
glCompileShader
FRAGMENT SHADER
glCreateShader
glShaderSource
glCompileShader
Datoteka sa kodom
vertex shader-a
Datoteka sa kodom
fragment shader-a
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
22
4. KORIŠTENJE GRAFIČKOG SKLOPOVLJA U VIZUALIZACIJI
VOLUMENA
Nakon što smo opisali osnove računalne grafike i protočne strukture grafičkih
sustava u ovom poglavju detaljnije ćemo opisati kako iskoristiti grafičko sklopovlje
novije generacije za volumnu vizualizaciju. Već smo spomenuli da klasična računalna
grafika aproksimira cijelu scenu nizom poligona. Me utim nama je cilj prikazati
trodimenzionalno skalarno polje i nemamo poligonalni model našeg volumena. Grafički
procesori mogu iscrtavati samo poligone pa je jedino rješenje da volumen spremimo u 2D
ili 3D teksture i na emo način da aproksimiramo volumnu vizualizaciju teksturiranim
poligonima. Ovaj pristup donijeti će nam ekstremno ubrzanje u odnosu na algoritme koji
koriste samo CPU. Tako er ćemo pokazati kako iskoristiti grafički procesor za druge
tehnike vizualizacija poput isosurfacing-a i projekcija maksimalnog intenziteta – MIP.
4.1 Volumna vizualizacija korištenjem dvodimenzionalnih tekstura
Jedan od načina da prikažemo volumen pomoću grafičkog procesora je da svaki
presjek volumena spremi u jednu dvodimenzionalnu teksturu. Tada volumen
aproksimiramo nizom poligona na koje su primijenjene teksture koje sadrže presjeke
volumena na različitim dubinama. Da bi dobili efekt volumnog renderiranja teksturni
elementi poligona moraju biti poluprozirni ovisno o vrijenosti voxel-a u volumenu.
Grafički procesor prilikom iscrtavanja svakog poligona njegove fragmente spaja na način
da ih kobinira sa frame buffer-om. Frame buffer je dio memorije grafičke kartice koji će
sačinjavati konačnu sliku prikazanu korisniku. Konfiguracija koja omogućuje
prikazivanje poluprozirnih elemenata naziva se alpha blending. Dakle mi ćemo
volumnom vizualizacijom postići alpha blendingom niza poluprozirnih tekstura koje
sadrže presjeke volumena. Taj proces ilustriran je slikom (13)
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
23
alpha blending
Slika 13 : Korištenjem alpha blendinga poluprozirnih tekstura postižemo elekt volumnog
kompozitiranja
Konfiguracija alpha blendinga koja odgovara našem volumnom kompozitiranju postavlja
se sljedećim nizom OpenGL funkcija :
glEnable ( GL_BLEND );
glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
Ovakva konfiguracija se u računalnoj grafici koristi za dobivanje efekta prozirnosti. Ako
imamo dovoljan broj presjeka volumena koji se prikazuju teksturiranim poligonima dobit
ćemo aproksimaciju volumne vizualizacije visoke kvalitete. Kad na ovaj način
iscrtavamo volumen on će biti ispravno prikazan ako rotiranjem volumena ne do emo
do emo u situaciju u kojoj se smjer pogleda približava ravnini poligona odnosno okomici
na normalu poligona. Tada bi vidjeli da se radi o presjecima i vidjeli bi «kroz presjeke».
Taj problem možemo rješiti tako da volumen spremimo u tri skupine tekstura. Svaka
skupina sprema volumen (x,y,z) u obliku drugačijih presjeka. Jedna skupina sadrži
presjeke volumena duž x osi, druga duž y i treća duž z osi. Koju skupinu presjeka
odnosno koordinatnu os ćemo odabrati za iscrtavanje ovisi o tome koja je pozicija
promatrača. Ako je promatrač najbliže x osi tada ćemo iscrtati presjeke duž x osi.
Anologno vrijedi za preostale osi. Ova tehnika ilustrirana je slikom (14)
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
24
z os z os
y os
y os
x os
x os promatrač je najbliže
y osi
promatrač je najbliže
x osi
Slika 14 : Pozicija promatrača odre uje koji ćemo skup presjeka iscrtavati. Iscrtat ćemo skup
presjeka duž one osi kojoj je promatrač najbliži, tako da ne bi bio vidljiv razmak
odnosno prazan prostor izme u presjeka. Analogno razmatranje vrijede za z os
Dakle postupak volumne vizualizacije korištenjem 2D tekstura je sljedeći. Volumen
podjelimo na presjeke duž x, y, i z osi i ta tri skupa presjeka spremimo u sistemsku
memoriju. Iz sistemske memorije te presjeke učitamo u niz 2D tekstura koje ćemo kasnije
primjeniti na poligone. Postupak iscrtavanja možemo ilustrirati sljedećim pseudokodom.
IzračunajSmjerPogleda( &smjerPogleda );
OdrediNajvećuKomponentu( smjerPogleda );
if( najvećaKomponenta == x )
{
IscrtajPresjekeDužXOsi()
}
if( najvećaKomponenta == y)
{
IscrtajPresjekeDužYOsi()
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
25
}
if( najvećaKomponenta == z )
{
IscrtajPresjekeDužZOsi()
}
4.2 Memorijska razmatranja
Ovdje moramo navesti još neka razmatranja koja su zajednička 2D i 3D
teksturno orijentiranom pristupu. Memorija integrirana na grafičkoj kartici omogućuje
iscrtavanje tekstura i imamo brz pristup toj memoriji prilikom GPU (graphics processor
unit) programiranja. Teksture mogu biti spremljene i u sistemsku memoriju me utim
pristup sistemskoj memoriji je vremenski preskup i loše se odražava na performanse
sustava. Usko grlo predstavlja grafička sabirnica (AGP ili PCI express) koja nema
dovoljnu propusnost za naše potrebe. Nama je cilj postići real-time sustav dakle
iscrtavanje grafike ~10 puta u sekundi i više. Ako teksture učitavamo iz sistemske
memorije doći će do zastoja i iscrtavanje se više ne odvija u realnom vremenu. Dakle
cijeli volumen moramo spremiti u memoriju grafičke kartice. U trenutku pisanja ovog
rada većina grafičkih kartica ima integrirano 128 MB ili 256 MB memorije. Naš volumen
spremljen je u datoteku kao niz skalarnih vrijednosti u datoteku. Te skalarne vrijenosti su
intenziteti svakog voxel-a u volumenu. Spremljeni su presjek po presjek, a svaki presjek
redak po redak. Skalarne vrijednosti odnosno intenziteti svakog voxel-a u datoteci mogu
biti spremljeni kao 8 bitni, 12 bitni ili 16 bitni brojevi. S obzirom da raspolažemo sa
maksimalno 256 MB video memorije naš teoretski maksimum je volumen dimenzija
512*512*512 sa 16 bitnom preciznošću zapisa voxel-a. Me utim taj maksimum će u
praksi biti nešto manji zbog toga što memorija grafičke kartice mora pohranjivati i druge
podatke dodjeljene od operativnog sustava. Sada možemo uočiti nedostatak 2D pristupa –
moramo spremati tri skupa presjeka istog volumena u video memoriju. Drugim rječima
imamo u «skupoj» video memoriji tri puta spremljen isti volumen ali na drugačiji način –
presjeci po x, y i z osi.
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
26
4.3 Volumna vizualizacija korištenjem trodimenzionalnih tekstura
Volumnu vizualizaciju potpomugnutu grafičkim procesorom možemo realizirati
i pomoću 3D tekstura. Danas većina grafičkih kartica podržava 3D teksture. Cijeli
volumen spremamo u jednu 3D teksturu. Veličina volumena dakle nesmije biti veća od
veličine memorije grafičke kartice kao što je navedeno u prethodnom poglavlju. Prednost
3D tekstura je to što ne moramo spremati 3 iste kopije u video memoriju. Me utim
nedostatak su nešto lošije performanse. Performanse su nešto lošije zbog toga što
prilikom iscrtavanja grafički procesor teksturne koordinate odre uje na 3D teksturi i time
vrši trilinearnu interpolaciju za razliku od 2D teksturnog pristupa gdje se vrši bilinearna
interpolacija. Performanse su nešto lošije ali je kvaliteta konačne slike bolja. Prisjetimo
se da grafički procesor može iscrtavati samo poligone tako da opet moramo aproksimirati
volumen 2D poligonima na koje je primjenjena tekstura. Razlika je u tome što se tekstura
na poligon primjenjuje pomoću 3D teksturnih koordinata i iz vrijednosti 3D teksture. Za
crtanje poligona imamo dva pristupa.
• poligoni okomiti na koordinatne osi (object aligned slices)
• poligoni okomiti na smjer pogleda (view aligned slices)
Poligone orijentirane na koordinatne osi objasnili smo u prethodnom poglavlju. Kod
poligona orijentiranih prema smjeru pogleda imamo veću kvalitetu slike jer su fizikalno
«ispravniji». Ova tehnika nešto je sporija jer se teksturne koordinate generiraju
automatski za razliku od 2D pristupa gdje ih mi «ručno» zadajemo. Ovaj princip
ilustriran je slikom (14). Na desnom dijelu slike možemo uočiti da presjecanjem našeg
3D volumena ravninom nastaju poligoni čija struktrua i pozicija ovise o smjeru pogleda.
Dakle za svaku poziciju promatrača potrebno je računati sjecište ravnine okomite na
pogled i volumena. Na sreću grafički procesor omogućuje automatsko generiranje
teksturnih koordinata. U našoj aplikaciji implementirane su i 2D teksturni pristup i 3D
teksturni pristup, a poligoni su posloženi duž koordinatnih osi.
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
27
smjer pogleda
z os smjer pogleda
y os
x os
Slika 15 : Poligoni orijentirani prema smjeru pogleda (view aligned slices)
4.4 Interaktivna promjena transfer funkcija
U ovom poglavlju razmatrat ćemo vrlo važno područje volumne vizulizacije a
to su transfer funkcije. Transfer funkcija je funkcija koja odre uje na koji način će se
izvorna vrijednost voxel-a mapirati u (R, G, B, A) vrijednost, odnosno boju i
neprozirnost. Možemo formalno napisati:
f(x) = (r,g,b,a) pri čemu su r,g,b,a vrijednosti iz skupa [0,255]
Prilikom spremanja podatka u OpenGL teksturu možemo odabrati format u kojem će
podatak biti zapisan. Dozvoljeni formati su GL_COLOR_INDEX, GL_RED,
GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, i
GL_LUMINANCE_ALPHA. Ti formati odre uju način interpretacije jednog ili više
bajtova pojedinih voxel-a iz datoteke.
Tablica za dohvat boja uz pomoć indeksa (Color Lookup Table)
GL_COLOR_INDEX sprema bajt voxel-a iz memorije u teksturu gdje je svaki element
4-bajtni kvartet (R, G, B, A). RGBA je četvero bajtni kvartet u kojem bajtovi označavaju
iznos crvene, plave, zelene i neprozirne komponente. Pretvorbu iz color_index-a u RGBA
kvartet vrši se pomoću lookup tablice. To je tablica sa 256 elemenata od kojih je svaki
jedan RGBA kvartet. Mi možemo takvu tablicu koristiti kao trnasfer funkciju, ona nam
omogućuje da različite izvorne vrijednosti voxel-a preslikamo u različite boje. Koje
vrijednosti se mapiraju u koje boje ovisi o tome što želimo postići i o svojstvima
volumena. Primjerice možemo prikazati samo lubanju ako pretpostavimo da su njene
vrijenosti iznad 60% maksimalnog intenziteta i prikazujemo samo one voxel-e koji su
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
28
iznad 60% intenziteta. Odabir transfer funkcija zasad se vrši empirijski jer ne postoje
metode koje automatski odre uju idealnu transfer funkciju. Primjerice odabir transfer
funkcija omogućuje nam da pregledavamo samo odre ena tkiva ili granice izme u tkiva a
da ne vršimo eksplicitnu segmentaciju volumena. To možemo učiniti naravno samo
aproksimativno. U idućim poglavljima pokazat ćemo kako možemo procijeniti granice
izme u tkiva. Opisani pristup ima jednan veliki nedostatak. Ako transfer funkciju
pridodjeljujemo volumenu preko lookup tablice tada svaka promjena tablice mora biti
popraćena ponovnim učitavanjem čitavog volumena. To je zato što se interno u teksturu
ne sprema samo color_index već ekstrapolirani kvartet. Dakle na ovaj način nemožemo
mijenjati transfer funkciju u realnom vremenu.
Ovisno teksturiranje (dependent texture read)
Ovisno teksturiranje je tehnika u kojoj se vrijednost texel-a (teksturni element
kao pixel) koristi kao teksturna koordinata za pristup drugoj teksturi. Otuda nam i dolazi
naziv dependent texturing jer ulaz u jednu teksturu (teksturne koordinate) ovisi o izlazu
prethodne teksture. Korištenjem modernih grafičkih procesora navedenu operaciju
možemo izvoditi u realnom vremenu. To tako er predstavlja iznimno ubrzanje u odnosu
na klasično vizualiziranje volumena gdje smo kod promjene transfer funkcije trebali
iznova učitati cijeli volumen. Sada grafički procesor mjenja transfer funkciju «on the fly»
tako da možemo interaktivno u realnom vremenu i punoj kvaliteti mijenjati transfer
funkciju i time znatno lakše pronaći onu koja nam odgovara. Ilustrirat ćemo opisanu
tehniku ovisnog teksturiranja sljedećim segmentom GLSL koda.
uniform sampler1D texDep;
uniform sampler3D texData;
...
void main(){
int colorIndex = texture3D(texData,
gl_TexCoord[0].stp);
vec4 colorRGBA = texture1D(texDep, colorIndex );
}
...
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
29
Navedeni isječak fragment shader-a demonstrira kako vrijednost jedne teksture koristimo
kao teksturnu koordinatu za pristup drugoj. Mi smo ovdje koristili jednodimenzionalne
transfer funkcije gdje boja voxel-a ovisi samo o njegovoj originalnoj vrijednosti –
intenzitetu. Moguće je konstruirati i dvodimezionalne transfer funkcije gdje RGBA
vrijednost voxel-a ovisi o intenzitetu i lokalnom gradijentu u toj točci volumena. Moguće
je čak konstruirati i trodimenzionalne transfer funkcije gdje RGBA vrijednost voxela
ovisi o gradijentu te prvoj i drugoj derivaciji duž normale u danoj točci prostora. Takav
pristup opisali su Kniss, Kindlmann, Hansen [6]
Slika 16 : Prikazan je isti volumen na koji su primjenjene različite transfer funkcije. Promjenu
transfer funkcije naša aplikacija obavlja u realnom vremenu.
4.5 Projekcije maksimalnog intenziteta (MIP)
Osim klasičnog volumnog vizualiziranja volumen možemo prikazati i na
drugačiji način. Jedan od načina su projekcije maksimalnog intenziteta (Maximum
Intensity Projection – MIP ). Kada zraka svjetla prolazi kroz volumen nećemo vršiti
volumno kompozitiranje već ćemo tražiti voxel najvećeg intenziteta i njega projicirati na
ravninu. Tako ćemo dobiti sliku na kojoj su iscrtane najveće vrijednosti iz volumena duž
smjera pogleda. Da bi to postigli moramo promjeniti konfiguraciju OpenGL da
spriječimo vršenje klasičnog volumnog kompozitiranja.
if( renderingMode == MIP)
{
glEnable ( GL_BLEND );
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
30
glBlendFunc( GL_ONE, GL_ONE );
glBlendEquationEXT( GL_MAX_EXT );
}
Primjetimo da funkcija glBlendEquationEXT spada u OpenGL ekstenzije i mora biti
podržana od strane proizvo ača. GLSL kod ovdje ostaje bez većih promjena.
Slika 17 : Projekcija maksimalnog intenziteta – MIP. S lijeve strane CT stopala.
S desne strane CT glave
4.6 Modeli osvjetljenja
Model osvjetljenja uvest ćemo zbog činjenice da osvjetljenje u računalnoj
grafici poboljšava percepciju površine objekta. Već smo spomenuli da je za računanje
osvjetljenja poligona potrebna normala na poligon te smjer pogleda i zrake svjetla. Očiti
problem je da mi nemamo ni poligonalni model u klasičnom smislu a time ni normalu na
ravninu poligona. Ovaj problem možemo rješiti tako da pokušamo odrediti normalu za
svaki voxel. Prisjetimo se da gradijent neke funkcije odre uje smjer najbrže promjene te
funkcije.
),,(),,( I
z
I
y
I
x
zyxIgradI
∂
∂
∂
∂
∂
∂
=∇= (4.1)
Ako u volumenu imamo površinu čiji voxeli imaju iste vrijednosti (isosurface) tada će
gradijent intenziteta I(x,y,z) pokazivati u smjeru normale. Gradijent ćemo naravno
aproksimirati numerički. Gradijent možemo aproksimirati na sljedeći način.
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
31
[ ]),,1(),,1(
2
1
),,( zyxfzyxfzyxI
x
−−+=
∂
∂
(4.2)
[ ]),1,(),1,(
2
1
),,( zyxfzyxfzyxI
y
−−+=
∂
∂
(4.3)
[ ])1,,()1,,(
2
1
),,( −−+=
∂
∂
zyxfzyxfzyxI
z
(4.4)
Gradijent ćemo zbog brzine izvo enja izračunati u fazi pretprocesiranja. Gradijent se
izračunava za svaki voxel volumena i ima tri komponente (i,j,k). Svaka komponenta bit
će osam bitan broj tako da gradijent možemo spremati u prva tri člana RGBA kvarteta a
četvrti član ostavit ćemo za vrijednost intenziteta voxela odnosno originalnu vrijednost.
Vidimo da nam za volumnu vizualizaciju sa osvjetljenjem treba 4 puta više memorije.
Sada ćemo umjesto da spremimo samo volumen u istu teksturu spremiti i originalni
volumen ( I(x,y,z) – originalna vrijednost voxela (x,y,z)) i normalu odnosno gradijent za
svaki voxel.
),,( zyxI
x∂
∂
),,( zyxI
x∂
∂
),,( zyxI
x∂
∂
I(x,y,z)
Slika 18 : U teksturu sad osim samog volumena I(x,y,z) pohranjujemo i normalu
Sad kada su nam u fazi fragment shader-a dostupe normale, sam volumen, svjetlo i
smjer pogleda možemo izračunati osvjetljenje. Osvjetljenje računamo trokomponentnim
modelom navedenim sljedećom relacijom.
r
sda hnLlnLLL )()( oo ++= (4.5)
Pri tome je
La – koeficijent ambijentalne komponente svjetla, ona je konstantna
Ld - koeficijent difuznog osvjetljenja
Ls - koeficijent specular osvjetljenja
R G B A
4. Korištenje grafičkog sklopovlja u vizualizaciji volumena
Grafičko korisničko sučelje za vizualizaciju volumena
32
n - normala na površinu
l - smjer zrake svjetla
h - kut izme u smjera pogleda i zrake svjetla
r - eksponent odsjaja (shinnines)
Ovakav model osvjetljenja možemo računati na razini voxel-a u realnom vremenu
korištenjem GLSL fragment shader-a .
Slika 19 : CT i MRI snimak bez osvjetljenja. Usporediti sa slikom (20)
Slika 20 – Hibridna metoda prikaza, kombinacija volumnog vizualiziranja i sjenčanja realizirana
našom aplikacijom. S lijeve strane imamo CT snimak, s desne MRI snimak sa
približno istim parametrima sjenčanja
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
33
5. PROGRAMSKA IMPLEMENTACIJA
5.1 Struktura programske implementacije
Programska implementacija namijenjena za Windows platformu realizirana je
programskim jezikom C/C++. Za interakciju sa operativnim sustavom korištene su
Win32 API funkcije. Za iscrtavanje grafike korišten je grafički podsustav OpenGL. Bitno
je napomenuti da je OpenGL multiplatformski grafički library tako da je našu
implementaciju moguće u razumnom roku prilagoditi za drugi operativni sustav
primjerice Linux. Za pristup naprednim mogućnostima grafičkog procesora korišten je
tako er multiplatformski jezik GLSL koji je dio OpenGL 2.0 standarda. Prilikom
stvaranja implementacije cilj je bio realizirati modularan sustav za vizualizaciju koji će se
kasnije moći koristiti i u okviru drugih projekata. To je postignuto smještanjem cijele
funkcionalnosti unutar dll (dynamic link library) modula. To znači da programer druge
aplikacije može uključiti dll modul u svoj projekt i korištenjem našeg seta API funkcija
koristiti volumna vizualizacija bez znanja o načinu rada sustava. Osim dll modula
implementirano je i grafičko korisničko sučelje tako er korištenjem win32 API funkcija.
Win32 API korišten je zbog bolje kontrole nad procesima poput komunikacije porukama
izme u prozora, iscrtavanjem, osvježavanjem slike i sl. detaljima vezanim uz operativan
sustav. Osim navedenih prednosi win32 API je najniža razina kojom aplikacijski
programer može komunicirati sa operativnim sustavom. Na taj način možemo postići
maksimalnu brzinu izvo enja.
Dijagram na slici (21) prikazuje kako dll modul vrši komunikaciju sa operativnim
sustavom i OpenGL grafičkim podsustavom bez znanja krajnjeg korisnika i aplikacijskog
programera. Dakle cijelu funkcionalnost aplikacijski programer i implementirano
korisničko sučelje imaju na raspolaganju putem API funkcija realiziranog dll modula.
Bez uplitanje u API funkcije operativnog sustava i arhitekturu grafičke kartice
aplikacijski programer može iscrtavati volumnu grafiku u realnom vremenu.
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
34
Slika 21 : Apstraktni dijagram implementiranog sustava
5.2 Korištenje implementacije
U ovom poglavlju opisat ćemo neke od API funkcija koje smo realizirali i stavili
na raspolaganje aplikacijskom programeru. Bit će objašnjeni neki praktični
implementacijski detalji. Pomoću navedenih API funkcija realizirali smo sustav za
volumnu vizualizaciju sa grafičkim korisničkim sučeljem. Za korištenje dll modula
potrebno je u projekt uključiti header datoteku glDLL.h te datoteku VolRenDll.lib.
Datoteka VolRenDll.dll mora biti u sistemskom direktoriju ili u direktoriju aplikacije koju
razvijamo. U datoteci glDLL.h nalaze se deklaracije struktura i funkcija nužnih za
komunikaciju s modulom za volumnu vizualizaciju ( VolRenDll.dll ), a datoteka
VolRenDll.lib predstavlja import library koji je potreban kompajleru da dohvati adresu
funkcija implementiranih u navedenom modulu. Nakon navedenog konfiguriranja
možemo u svega nekoliko linija koda vizualizirati volumen, interaktivno mijenjati
transfer funkcije, podešavati parametre prikaza, osvjetljenja i sl. Bitno je napomenuti da
su u datoteci glDLL.h prototipovi API funkcija realiziranih dll-om te strukture potrebne
za rad sa tim funkcijama. Strukture nam služe za pohranjivanje i prenošenje raznih
parametara vizualizacije. Ukratko ćemo opisati potrebne strukture.
DLL MODUL
Win32 API OpenGL API
APLIKACIJSKI
PROGRAMER
Rad sa prozorima i porukama
Konfiguracija OpenGL sustava
Volumna vizualizacija
KORISNIČKO
SUČELJE
KORISNIK
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
35
LIGHTPARAMETARS
typedef struct ltPrms
{
COLORREF rgbAmbient;
COLORREF rgbDiffuse;
COLORREF rgbSpecular;
int intAmbient;
int intDiffuse;
int intSpecular;
int intShinines;
int intIsoValue;
}
LIGHTPARAMETARS;
Navedena struktura služi za opisivanje parametara osvjetljenja, primjerice intenzitet i
boja pojedinih komponenta boje – specular, diffuse, ambient.
SYSTEMINFO
typedef struct sysinf
{
int GLSL_support;
int texture_support_3D;
int max_2d_tex_size;
int max_3d_tex_size;
int video_memory;
int system_memory;
long int processor_speed;
}
SYSTEMINFO;
Pomoću ove strukture možemo od dll modula dohvatiti osnovne podatke o sustavu kao
što su količina dostupne sistemske i video memorije, GLSL podrške grafičkog procesora
i sl.
CLIPPING
typedef struct cl
{
BOOL enabled;
int mouse_function;
int current_clip;
int front;
int back;
int top;
int bottom;
int left;
int right;
float angX[6];
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
36
float angY[6];
float angZ[6];
float D[6];
}CLIPPING;
Pomoću ove strukture definirat ćemo način na koji će dll modul rezati volumen
(clipping). Moguće je definirati do 6 ravnina rezanja. Za svaku ravninu rezanja možemo
odrediti njen pomak duž referentne osi i kut rotacije oko x, y, z osi i time odrediti
proizvoljno bilo koji položaj ravnine za rezanje u prostoru.
RAWFILEINFO
typedef struct rfi
{
int xDim;
int yDim;
int zDim;
int bitsPerVoxel;
int spacingX;
int spacingY;
int spacingZ;
}
RAWFILEINFO;
Ovom strukturom ćemo prenositi u dll modul informaciju o datoteci tipa RAW. RAW
datoteka sadrži volumen odnosno slijedno spremljene voxel-e volumena, ali ne i
informacije o dimenziji volumena ili preciznosti. Tako da ova informacija mora biti
nužno prenesena od strane korisnika tj. aplikacijskog programera.
TFPARAMS
typedef struct tfp
{
int numRedPoints;
int numGreenPoints;
int numBluePoints;
int numAlphaPoints;
int redPointsX[20];
int redPointsY[20];
int greenPointsX[20];
int greenPointsY[20];
int bluePointsX[20];
int bluePointsY[20];
int alphaPointsX[20];
int alphaPointsY[20];
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
37
float valueR[256];
float valueG[256];
float valueB[256];
float valueA[256];
}
TFPARAMS;
Ova struktura omogućuje nam proizvoljno definiranje transfer funkcija za svaku
komponentu. Komponente su crvena, plava, zelena i neprozirna (RGBA). Ovdje
definiramo kako ćemo izvornu vrijednost voxel-a mapirati u RGBA boju. Nakon što smo
objasnili osnovne strukture podataka objasnit ćemo i neke osnovne funkcije za inerakciju
s modulom za volumna vizualizacija. Sve funkcije imaju zaglavlja definirana u glDLL.h
datoteci.
InitRenderer
BOOL InitRenderer(HWND hwndParent, int x1, int y1, int x2,
int y2)
Navedena funkcija inicijalizira prozor namjenjen za iscrtavanje openGL grafike, pritom
specificira roditeljski prozor (parent) te dimenzije i poziciju prozora za iscrtavanje
grafike
ResizeRenderer
void ResizeRenderer(int x, int y, int x2, int y2);
Navedena funkcija mijenja veličinu i poziciju OpenGL prozora.
KillRenderer
int KillRenderer();
Uništava OpenGL prozor i vrši dealokaciju volumena iz sistemske i grafičke memorije.
LoadVolume
int LoadVolume ( char *hdrFile, char *imgFile, int format,
RAWFILEINFO *rfI);
Funkcija učitava volumen specifirane lokacije i formata u dll modul. Dostupni formati su
analyze mayo ( sastoji se od dvije datoteke datoteka.hdr i datoteka.img ) i raw format.
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
38
RenderVolume
int RenderVolume(float aX, float aY, float aZ, float zoom);
Funkcija prikazuje volumen zarotiran za specificiran broj stupnjeva oko x,y,z osi i
udaljen od pogleda za specificiranu udaljenost.
DrawRenderer
int DrawRenderer();
Funkcija vrši osvježavanje prikaza (repaint) potrebno zbog nekog razloga poput
promjene transfer funkcije, promjene parametara i sl.
UpdateTF
void UpdateTF(TFPARAMS tfParams);
Funkcija unosi novu transfer funkciju u dll modul. Parametri nove transfer funkcije su
specificirani TFPARAMS strukturom koju prenosimo kao parametar funkcije.
UpdateLightParameters
void UpdateLightParameters(LIGHTPARAMETERS lghtParams);
Ova funkcija unosi nove parametre osvjetljenja preko LIGHTPARAMETERS strukture
objašnjene ranije.
Ovo su najosnovnije funkcije koje smo realizirali, detaljnije su objašnjene u
dokumentaciji gdje su opisane i ostale funkcije. Sada kad smo opisali osnovne funkcije i
strukture možemo navesti kratak primjer koda koji pokazuje koliko je jednostavno
aplikacijskom programeru koristiti naš dll modul.
HWND hwndParent;
TFPARAMS tfParams;
LIGHPARAMETERS ltParams;
// ....
InitRenderer( hwndParent, 100, 100, 500, 500 );
LoadVolume(fileNameHDR, imgNameHDR, 0, NULL);
RenderVolume( 30, 30, 50, -2);
//....
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
39
// mijenjamo parametre transfer funkcije i
osvjetljenja
//
UpdateLightParameters(ltParams);
UpdateTF(tfParams);
DrawRenderer();
//...
//....
//
KillRenderer();
5. Programska impelementacija
Grafičko korisničko sučelje za vizualizaciju volumena
40
5.3 Rezultati
Slika 22 : Primjer transfer funkcije
Slika 23 : Primjer «rezanja» volumena u realnom vremenu
Zaključak
Grafičko korisničko sučelje za vizualizaciju volumena
41
6. ZAKLJUČAK
Razvili smo kompletan sustav za volumnu vizualizaciju korištenjem moderne
arhitekture grafičkih procesora koji se u trenu pisanja ovog rada nalaze već u nižem i
srednjem segmentu tržišta. Ovakav pristup donio nam je veliko ubrzanje procesa
vizualizacije u odnosu na bilo koji algoritam koji koristi samo središnji procesor računala
(CPU). Ubrzanja su znatna i kreću se u rasponu od nekoliko desetaka do nekoliko stotina
puta. Teksturno orijentiran pristup volumnoj vizualizaciji omogućio je stvaranje prvih
sustava za volumnu vizualizaciju u realnom vremenu na osobnim računalima bez
specijalizirane sklopovske opreme. Osim klasičnog volumnog vizualiziranja pokazali
smo da grafički procesor možemo iskoristiti za brojna poboljšanja prikaza. Omogućena je
promjena transfer funkcija u realnom vremenu. Realizirano je rezanje volumena
(clipping) u realnom vremenu. Model osvjetljenja tako er je primjenjen u realnom
vremenu. Omogućeno je i nekoliko načina renderiranja osim klasičnog volumnog. Tu
spadaju MIP – projekcije maksimalnog intenziteta, zatim isosurfacing (prikazivanje onih
dijelova volumena koji imaju iste vrijednosti intenziteta) te hibridni prikaz koji ujedinjuje
sjenčanje volumena i volumne vizualizacije. Cilj hibridnog pristupa je poboljšano
uočavanje granice različitih materijala odnosno tkiva u promatranom volumenu.
Implementacija podržava dva formata datoteka za spremanje volumena. Riječ je o
analyze mayo formatu te RAW datotekama. Najveći problem teksturno orijentiranog
pristupa je ograničena veličina memorije grafičke kartice. Nemožemo u realnom vremenu
renderirati volumen koji zauzima više memorije nego što stane u grafičku karticu. Razlog
tome je što se dio koji ne stane mora tijekom iscrtavanja učitavati iz sistemske memorije.
Memorijska sabirnica predstavlja usko grlo sustava i onemogućuje real time efekt
ekstremno velikih volumena. Na sreću većina volumena stane u memoriju grafičke
kartice - koja se u trenutku pisanja ovog teksta kreće od 128MB do 256MB. Rješenje
memorijskog problema je bricking odnosno spremanje volumena u manje podvolumene i
njihovo učitavanje tijekom raznih faza u protočnoj strukturi. Kada iscrtavamo jedan
podvolumen drugi bi trebali učitavati koristeći protočnu strukturu. Me utim efektan
bricking još uvijek je vrlo težak problem. Daljnja poboljšanja uključivala bi napredniji
odabir transfer funkcija. Primjerice mogli bi konstruirati 2D i 3D transfer funkcije na
temelju informacije o gradijentu i prvoj i drugoj derivaciji duž normale na procijenjenu
plohu. Ne postoje idealne metode za odabir transfer funkcije. Naprednije metode obično
Zaključak
Grafičko korisničko sučelje za vizualizaciju volumena
42
kombiniraju empirijski pristup sa matematičkim procjenama volumena, dakle uvijek je
potrebna interakcija korisnika. Sustavi za odabir transfer funkcija su tako poluautomatski.
Transfer funkcije vjerojatno su najteži problem u volumnom vizualiziranju i područje
mogućeg daljnjeg rada.
Reference
Grafičko korisničko sučelje za vizualizaciju volumena
43
7. REFERENCE
[1] Andrew Steven Winter, Volume graphics, Field-based modelling and rendering, Phd thesis,
Department of Computer Science, University of Wales, 2002
[2] Philippe G. Lacroute, Fast volume rendering using shear-warp factorization of the viewing
transformation , Phd thesis, Departments of Electrical Engineering and Computer Science,
Stanford University, 1995
[3] Volume rendering for 3D display, Magnus Wahrenberg, Master of Science thesis, KTH
Computer Science and Communication, 2006
[4] Klaus Engel, Markus Hadwiger, Joe M. Kniss, Aaron E. Lefohn, Christof Rezk Salama,
Daniel Weiskop, Course notes 28, Real-time volume graphics, Siggraph 2004
[5] Scientific computing and imaging institute publications
http://www.sci.utah.edu/cgi-bin/sci_publications.pl
[6] Joe Kniss, Gordon Kindlmann, Charles Hansen, Multi-Dimensional Transfer Functions for
Interactive Volume Rendering, Scientific computing and imaging institute
[7] Gordon Lothar Kindlmann, Semi automatic generation of transfer functions for direct volume
rendering, Master of Science thesis, University of Cornell, 1999
Sažetak
Grafičko korisničko sučelje za vizualizaciju volumena
44
8. SAŽETAK
Cilj diplomskog rada bilo je stvaranje sustava za volumnu vizualizaciju koji radi u realnom
vremenu koristeći grafički procesor. Stvoreno je modularno rješenje koje osim klasičnog volumnog
renderiranja implementira i tehnike sjenčanja, MIP (maximum intensity projection) prikaz, rezanje
volumena (clipping) te hibridnu metodu tj. kombinaciju sjenčanja i klasičnog pristupa. Objašnjen je
način rad klasične računalne grafike a zatim i način korištenja protočne strukture grafičkog procesora
za realizaciju navedenog cilja. U ovom radu objašnjena je fizikalna pozadina sustava volumnog
renderiranja i način primjene na grafičkom procesoru. Objašnjen je teksturni pristup volumnom
vizualiziranju i njegove varijante 2D i 3D teksturni pristup. Tako er su objašnjene razlike izme u
presjeka poredanih duž koordinatnih osi i presjeka poredanih duž smjera pogleda. Opisan je GLSL
jezik i njegova primjena u volumnom renderiranju posebice interaktivnoj promjeni transfer funkcija.
Opisani su i najvažniji tehnički detalji same aplikacije.
ABSTRACT
The goal of this work was to create real time volume rendering system which uses graphics
proccesor. We have created a modular solution with implementation of “classic” volume rendering,
lighting model, maximum intensity projection-MIP, clipping and hybrid method which combines
volume rendering with lighting effect. We have outlined general principles of computer graphics and
then afterwards we explained how to use graphics processor pipeline to achieve our goal – real time
volume rendering. The physical model of volume rendering system was also explained. We
described texture-based approach and it’s main variants - 2D and 3D texturing. Also we have shown
difference between axis aligned and object aligned slices. Basics of GLSL language were shown
with it’s application in volume rendering especially interactive transfer function editing. And finally
we briefly discussed basic tehnical details of application itself.
KEYWORDS: real time volume rendering, texture based volume rendering, GPU volume
rendering

Mais conteúdo relacionado

Mais procurados

сурагчийн дэлгэрэнгүй анкет
сурагчийн дэлгэрэнгүй анкетсурагчийн дэлгэрэнгүй анкет
сурагчийн дэлгэрэнгүй анкет
Teacher's E-content
 
Zui togtol oloh
Zui togtol olohZui togtol oloh
Zui togtol oloh
bat-ulzii
 
хэлц ба хэлц бус үгийн утгын
хэлц ба хэлц бус үгийн утгынхэлц ба хэлц бус үгийн утгын
хэлц ба хэлц бус үгийн утгын
dj_d585
 
Testing boolean difference
Testing boolean differenceTesting boolean difference
Testing boolean difference
Anish Gupta
 
хэрэглэгдэхүүн
хэрэглэгдэхүүнхэрэглэгдэхүүн
хэрэглэгдэхүүн
jagaa7120
 
3 р анги цаг хугацаа
3 р анги цаг хугацаа3 р анги цаг хугацаа
3 р анги цаг хугацаа
OyuOyu-Erdene
 
холбогч эд, булчингийн эд , мэдрэлийн эд
холбогч эд, булчингийн эд , мэдрэлийн эдхолбогч эд, булчингийн эд , мэдрэлийн эд
холбогч эд, булчингийн эд , мэдрэлийн эд
Shagaiubuns
 

Mais procurados (20)

SOC design
SOC design SOC design
SOC design
 
гэрлэн дохио
гэрлэн дохиогэрлэн дохио
гэрлэн дохио
 
сурагчийн дэлгэрэнгүй анкет
сурагчийн дэлгэрэнгүй анкетсурагчийн дэлгэрэнгүй анкет
сурагчийн дэлгэрэнгүй анкет
 
Urgamalin tuhai huuli
Urgamalin tuhai huuliUrgamalin tuhai huuli
Urgamalin tuhai huuli
 
Zui togtol oloh
Zui togtol olohZui togtol oloh
Zui togtol oloh
 
хэлц ба хэлц бус үгийн утгын
хэлц ба хэлц бус үгийн утгынхэлц ба хэлц бус үгийн утгын
хэлц ба хэлц бус үгийн утгын
 
Testing boolean difference
Testing boolean differenceTesting boolean difference
Testing boolean difference
 
Digital Systems Design
Digital Systems DesignDigital Systems Design
Digital Systems Design
 
"Гол мөрний эрэг татмын экосистемийн үйл ажиллагааны зохистой нөхцөлийн үнэлг...
"Гол мөрний эрэг татмын экосистемийн үйл ажиллагааны зохистой нөхцөлийн үнэлг..."Гол мөрний эрэг татмын экосистемийн үйл ажиллагааны зохистой нөхцөлийн үнэлг...
"Гол мөрний эрэг татмын экосистемийн үйл ажиллагааны зохистой нөхцөлийн үнэлг...
 
хэрэглэгдэхүүн
хэрэглэгдэхүүнхэрэглэгдэхүүн
хэрэглэгдэхүүн
 
Algebr ba-geometr-n1-hargalzaa
Algebr ba-geometr-n1-hargalzaaAlgebr ba-geometr-n1-hargalzaa
Algebr ba-geometr-n1-hargalzaa
 
12 жил дууг бага наснб хүүхдэд заах
12 жил дууг бага наснб хүүхдэд заах12 жил дууг бага наснб хүүхдэд заах
12 жил дууг бага наснб хүүхдэд заах
 
гэрэл
гэрэлгэрэл
гэрэл
 
3 р анги цаг хугацаа
3 р анги цаг хугацаа3 р анги цаг хугацаа
3 р анги цаг хугацаа
 
БАГА БОЛОВСРОЛ - ХҮН БАЙГАЛЬ
БАГА БОЛОВСРОЛ - ХҮН БАЙГАЛЬБАГА БОЛОВСРОЛ - ХҮН БАЙГАЛЬ
БАГА БОЛОВСРОЛ - ХҮН БАЙГАЛЬ
 
36cf0793 4435-4275-8353-6f21e4612435
36cf0793 4435-4275-8353-6f21e461243536cf0793 4435-4275-8353-6f21e4612435
36cf0793 4435-4275-8353-6f21e4612435
 
Neural network pruning with residual connections and limited-data review [cdm]
Neural network pruning with residual connections and limited-data review [cdm]Neural network pruning with residual connections and limited-data review [cdm]
Neural network pruning with residual connections and limited-data review [cdm]
 
холбогч эд, булчингийн эд , мэдрэлийн эд
холбогч эд, булчингийн эд , мэдрэлийн эдхолбогч эд, булчингийн эд , мэдрэлийн эд
холбогч эд, булчингийн эд , мэдрэлийн эд
 
хорвоотой танилцсан түүх
хорвоотой танилцсан түүххорвоотой танилцсан түүх
хорвоотой танилцсан түүх
 
Уран зохиол /Үр могой /
Уран зохиол /Үр могой /Уран зохиол /Үр могой /
Уран зохиол /Үр могой /
 

Destaque

BVPresentation
BVPresentationBVPresentation
BVPresentation
Ben Arditi
 
Flick Film FestivalInternship
Flick Film FestivalInternshipFlick Film FestivalInternship
Flick Film FestivalInternship
Kayla Kehler
 

Destaque (20)

Desarrollo sostenible presentacion escrito
Desarrollo sostenible presentacion escritoDesarrollo sostenible presentacion escrito
Desarrollo sostenible presentacion escrito
 
Antibiotic Resistance
Antibiotic ResistanceAntibiotic Resistance
Antibiotic Resistance
 
ffrdc-primer-april-2015
ffrdc-primer-april-2015ffrdc-primer-april-2015
ffrdc-primer-april-2015
 
Tune TVi
Tune TViTune TVi
Tune TVi
 
Voice_Feb23
Voice_Feb23Voice_Feb23
Voice_Feb23
 
BVPresentation
BVPresentationBVPresentation
BVPresentation
 
7 simple rules to totally rock as a new lom
7 simple rules to totally rock as a new lom7 simple rules to totally rock as a new lom
7 simple rules to totally rock as a new lom
 
b_p_T_M_New
b_p_T_M_Newb_p_T_M_New
b_p_T_M_New
 
Inside architecture
Inside architectureInside architecture
Inside architecture
 
Ambienti virtuali apprendimento
Ambienti virtuali apprendimentoAmbienti virtuali apprendimento
Ambienti virtuali apprendimento
 
National 16 p2
National 16 p2National 16 p2
National 16 p2
 
klinik medika edukasi PJK
klinik medika edukasi PJKklinik medika edukasi PJK
klinik medika edukasi PJK
 
resume2
resume2resume2
resume2
 
Evaluation
EvaluationEvaluation
Evaluation
 
Flick Film FestivalInternship
Flick Film FestivalInternshipFlick Film FestivalInternship
Flick Film FestivalInternship
 
C V - Mohan Savant
C V - Mohan SavantC V - Mohan Savant
C V - Mohan Savant
 
Clinica
ClinicaClinica
Clinica
 
The Rise And Rise of High Bay Warehousing
The Rise And Rise of High Bay WarehousingThe Rise And Rise of High Bay Warehousing
The Rise And Rise of High Bay Warehousing
 
Rola użyteczności przestrzeni publicznej w nowoczesnych miastach
Rola użyteczności przestrzeni publicznej w nowoczesnych miastachRola użyteczności przestrzeni publicznej w nowoczesnych miastach
Rola użyteczności przestrzeni publicznej w nowoczesnych miastach
 
Slideshare
SlideshareSlideshare
Slideshare
 

VolumeRendering

  • 1. SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 1072 GRAFIČKO KORISNIČKO SUČELJE ZA VIZUALIZACIJU VOLUMENA Nebojša Popović Zagreb, prosinac, 2006.
  • 2. Ime i prezime: Nebojša Popović Matični broj: 0036392237 Smjer: Računarstvo Mentor: prof dr. sc. Sven Lončarić
  • 3. Sadržaj Grafičko korisničko sučelje za vizualizaciju volumena 3 SADRŽAJ 1. UVOD............................................................................................................... 4 2. TEORIJSKE OSNOVE.................................................................................. 6 2.1. FIZIKALNI MODEL........................................................................................... 6 2.2. VOLUMETRIJSKO KOMPOZITIRANJE......................................................... 9 2.3. AKVIZICIJA PODATAKA............................................................................... 10 2.4. ALGORITMI ZA VIZUALIZACIJU VOLUMENA......................................... 12 3. ARHITEKTURA GRAFIČKIH PROCESORA....................................... 14 3.1. TRADICIONALNA ARHITEKTRUA............................................................. 14 3.2. PROGRAMIBILNA ARHITEKTURA............................................................ 16 3.3. GLSL JEZIK....................................................................................................... 18 4. KORIŠTENJE GRAFIČKOG SKLOPOVLJA U VIZUALIZACIJI... 22 4.1. VOLUMNA VIZUALIZACIJA KORIŠTENJEM 2D TEKSTURA................. 22 4.2. MEMORIJSKA RAZMATRANJA................................................................... 25 4.3. VOLUMNA VIZUALIZACIJA KORIŠTENJEM 3D TEKSTURA................ 26 4.4. INTERAKTIVNA PROMJENA TRANSFER FUNKCIJA.............................. 27 4.5. PROJEKCIJE MAKSIMALNOG INTENZITETA ( MIP ) ............................. 29 4.6.MODEL OSVJETLJENA................................................................................... 30 5. IMPLEMENTACIJA..................................................................................... 33 5.1. STRUKTURA PROGRAMSKE IMPLEMENTACIJE..................................... 33 5.2. KORIŠTENJE PROGRAMSKE IMPEMENTACIJE........................................ 34 5.3. REZULTATI....................................................................................................... 40 6. ZAKLJUČAK................................................................................................. 41 7. LITERATURA.............................................................................................. 43 8. SAŽETAK...................................................................................................... 44
  • 4. 1. Uvod Grafičko korisničko sučelje za vizualizaciju volumena 4 1. UVOD Volume rendering podskupina je tehničke discipline koju zovemo «scientific visualization». «Scientific visualization» je disciplina koja se bavi vizualizacijom vektorskih ili skalarnih podataka koji su obično definirani u 3D prostoru. Svrha vizualizacije je analiza podataka koja može biti potpomognuta segmentacijom ili isključivo vizualna analiza. Pod pojmom «scientific visualization» osim volumnog renderiranja podrazumjevamo i «isosurfacing», «vector field visualization», vizualizaciju toka i sl. Slika 1. – Primjeri primjene vizualizacije volumena u medicini i industriji dobiveni našom programskom implementacijom. Prva slika prikazuje CT ljudske glave, a druga slika CT motora sa uključenim modelom osvjetljenja Volume rendering je način vizualizacije 3D skalarnih polja. Osnovni element 3D skalarnog polja je voxel. Svaki voxel odre en je prozirnošču i bojom (color, opacity). Pod 3D skalarno polje obično podrazumjevamo niz 2D snimaka dobivenih CT ili MRI akvizicijom na temelju kojih radimo 3D rekonstrukciju volumena. Svim algoritmima za vizualizaciju volumena je zajedničko da vizualizaciju 3D skalarnog polja rade na taj način da svaki voxel, odnosno 1 element 3D skalarnog polja daje doprinos konačnoj slici odnosno 2D projekciji 3D volumena na površinu prikaza. Na taj način pogledom na
  • 5. 1. Uvod Grafičko korisničko sučelje za vizualizaciju volumena 5 volumen dobivamo informaciju o unutrašnjosti tijela, za razliku od tipične računalne grafike u kojoj je tijelo sačinjeno od poligonalnog modela i pogledom na rekonstruiranu scenu imamo samo informaciju o površini tijela. Stoga klasičnu računalnu grafiku nazivamo surface rendering za razliku od volumne vizualizacije – volume rendering. Primjena tehnike vizualizacije volumena je široka. Mi smo se tijekom izrade rada fokusirali na medicinskoj primjeni i proučavali medicinske podatke. Volume rendering osim medicinske primjene možemo koristiti i u industriji. Primjerice promatramo li volume rendering CT snimke bloka motora možemo uočiti pukotine koje vizualnom inspekcijom površine ne možemo uočiti jer nema površinskih oštečenja, već su ona u unutrašnjosti bloka. Vizualizaciju volumena možemo koristiti u geologiji za analizu strkuture tla, primjerice kod donošenja odluke o odabiru lokacije za naftnu bušotinu. U meteorologiji volume rendering koristimo za vizualizaciju zračnih masa koje diferenciramo s obzirom na različite parametre svake prostorne točke, primjerice tlak, temperatura i sl. Dakle volumnu vizualizaciju primjenjujemo u situacijama kada nam je potrebna vizualizacija nekog prostornog objekta na način da steknemo uvid i u njegovu unutrašnjost. Na taj način olakšavamo interpretaciju kompleksnih trodimenzionalnih podataka. Cilj ovog diplomskog rada bio je razviti programsku implementaciju volumne vizualizacije potpomognutu suvremenim grafičkim hardware-om. Pribjegava se hardware-skoj potpori zbog izuzetne vremenske zahtjevnosti algoritama vizualizacije volumena. Korištenjem hardware-ske podrške postižemo real-time efekt. Cilj rada tako er je stvoriti modularnu implementaciju koju kasnije možemo koristiti u okviru druge aplikacije. Taj zahtjev je rješen na taj način da je kompletna implementacija volume rendering algoritma realizirana u dll modulu (dynamic link library). Dostupan je set API funkcija koje omogučuju korištenje kompletne funkcionalnosti software-a. Korištenjem navedenog modula realizirano je i grafičko sučelje za pregled podataka i podešavanje parametara renderiranja. Programska impementacija realizirana je u C/C++ programskim jezicima korištenjem openGL modula, win32 API i GLSL (openGL shading language) jezika na Windows platformi. Korištenjem GLSL-a omogućen je rad aplikacije u realnom vremenu potpomognut modernim arhitekturama grafičkih kartica, neovisno o proizvo aču kartice.
  • 6. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 6 2. TEORIJSKE OSNOVE VIZUALIZACIJE VOLUMENA 2.1. Fizikalni model Dakle predmet obrade je trodimenzionalno skalarno polje. To polje nazivamo volumenom. Elementi trodimenzionalnog polja nazivaju se voxeli analogno pixelima u obradi fotografije. Volumna vizualizacija je simulacija propagacije svjetla kroz neki medij (slika 1). Volumen promatramo kao blok djelomično prozirnih obojanih čestica koje u interakciji sa zrakama svjetla prolaze kroz volumen. Svjetlo u volumenu može biti emitirano, absorbirano, raspšeno, reflektirano, ovisno o svojstvima čestica. Osim tih efekata fizikalno je moguće razmatrati i fosforescenciju (svjetlo se absorbira i reemitira nakon nekog vremena) i fluorescenciju (svjetlo se absorbira i emitira na drugoj frekvenciji), me utim zbog tehničkih zahtjeva simulacije fizikalni model reducirat ćemo na što jednostavniji model. izvor svjetla promatrač slika (ravnina projekcije) volumen Slika 2 : Protok svjetla kroz volumen i položaj promatrača Protok fotona kroz prostor specijalan je slučaj Boltzmanove transportne teorije koja se odnosi na transport statističke distribucije čestica (poput fotona) kroz prostor. Lacroute [95] opisuje adaptaciju navedenog fizikalnog modela za primjenu u računalnoj grafici i volumnoj vizualizaciji. Protok fotona kroz uniformni prostor brzo stiže do ravnotežnog stanja, pa je nakon toga protok fotona kroz neku regiju prostora u danom smjeru vremenski konstantan. Stoga ćemo promatrati relaciju koja opisuje energetski balans. ∫ →++Φ−=∇⋅ 2 '),()',(),(),()(),( S t drLrkrrLrrL ωωωωωεωωω (1.1) ),( ωrL - označava isijavanje po steradianu (radiance). Isijavanje po steradioanu predstavlja gustoću snage emitiranu fotonima u dano smjeru. Jedinica je W/m2 sr. Prema
  • 7. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 7 relaciji isijavanje duž odre ene zrake svjetla jedanko je sumi od tri člana koji predstavljaju pozitivne i negativne doprinose duž volumena. )(rtΦ - je koeficijent ekstinkcije (m-1 ) i označava vjerojatnost po jediničnoj udaljenosti da će foton putujući duž zrake biti absorbiran ili raspršen u volumenu u drugom smjeru. ),( ωε r - je funkcija emisije (W/m3-sr) koja uračunava fotone emitirane unutar volumena )',( ωω →rk - je kernel raspršivanja ( jedinica sr-1 m-1 ) i predstavlja vjerojatnost po jedinici udaljenosti i po prostornom kutu da foton koji se kreće u smjeru ω ' bude raspršen u smjeru ω . Tu funkciju integriramo pomoženu sa isijavanjem iz svih smjerova (S2 ) da bi uračunali fotone raspršene u smjeru zrake. Relaciju (1.1) možemo navesti i u integralnoj formi. '),'(),(),( ),( )',(),( drrQerLerL B B rr rr BB rr ωωω ττ ∫ Γ −− += (1.2) ∫Γ Φ≡ ),( ')'(),( sr t drrsrτ (1.3) ∫ →+≡ 2 ')',()',(),(),( S drLrkrrQ ωωωωωεω (1.4) Ovdje je τ integral ekstincijskog koeficijenta duž ravne putanje izme u r i s. Putanja izme u dvije točke označena je sa Γ(r,s). ),( ωBB rL je funkcija koja specificira uvjete preko zatvorene površine koja obuhvaća volumen. Točka rB je sjecište izme u površine koja obuhvaća volumen i zrake iz r u smjeru ω . ),( ωrQ je suma izraza za emisiju i raspršivanje. Relacija (1.2) nam govori da je gustoća isijavanja u bilo kojoj točci duž zrake jednaka doprinosu od isijavanja koje ulazi kroz rub volumena plus suma doprinosa duž zrake. Svi ti doprinosi pomnoženi su funkciom eksponencijalnog prigušenja koja ovisi o
  • 8. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 8 udaljenosti od točke promatranja do izvora. Navedena relacija se u pojednostavljenom obliku primjenjuje u mnogim tehnikama vizualizacije i računanja osvjetljenja. Mi ćemo ju tako er koristiti u volumnoj vizualizaciji ali maksimalno pojednostavljenu. Uvest ćemo pretpostavke koje nam omogućuju implementaciju takvog modela osvjetljenja. Pretpostavit ćemo da nema apsorpcije od izvora svjetla do ulaska u volumen. Nadalje pretpostavljamo da nema raspršivanja unutar volumena. Pretpostavljamo izotropnu absorpciju (apbsorpcja je neovisna o smjeru zrake ω ). I posljednja pretpostavka je da imamo konačan broj izvora svjetlosti. Uz takve pretpostavke možemo izbaciti dio izraza koji se odnosi na raspršivanje. Dobivamo model prema kojem se ukupna energija fotona akumulira u svakom voxelu i tada re-emitira zajedno sa emisijom trenutnog voxela. Takav model često se naziva emission-absorbtion only zbog toga što je zanemareno raspršivanje odnosno scattering. Uz navedena pojednostavljenja možemo navesti sljedeću relaciju. ')'()( ' '')''( dxxexL B x x t x x dxx ε∫ ∫Φ− = (1.5) U izrazu (1.5) izvršena je reparametrizacija pa poziciju duž smjera pogleda predstavlja varijabla x' sa gornjom granicom xB ( točka izlaska zrake iz volumena). Ovu jednadžbu ćemo numerički evaluirati i pomoću nje možemo realizirati sustav za volumnu vizualizaciju. Da bi dobili projekciju volumena kroz ravninu propuštamo zraku svjetlosti (kao na slici 3) kroz svaku točku konačne slike. Zraka prolazi kroz volumen i dolazi u interakciju sa voxelima volumena. Svaki voxel duž zrake emitira/apsorbira odre eni dio svjetlosti i daje svoj doprinost gustoći isijavanja za trenutnu zraku. Propuštanjem svih zraka dobivamo konačnu sliku, a L na «kraju» svake zrake računamo relacijom (1.5) . Navedena tehnika vizualizacije naziva se ray-casting i klasičan je način volumne vizualizacije.
  • 9. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 9 promatrač slika (ravnina projekcije) zraka «pogleda» Slika 3 : Ovo je pojednostavljen model sustava za vizualizaciju volumena. Propuštanjem zrake svjetlosti kroz ravninu projekcije (zaslon) te volumen, računamo interakciju svjetla sa voxel-ima duž putanje i tako izračunavamo intenzitet svjetla u točci T. 2.2. Volumetrijsko kompozitiranje (volumetric compositing) Dakle za realizaciju sustava za volumnu vizualizaciju moramo evaluirati relaciju (1.5) za svaku točku konačne slike. Naravno da bi implementirali rješavanje relacije na računalu moremo ju svesti na diskretan oblik. Diskretan oblik relacije naziva se volumetrijsko kompozitiranje (volumetric compositing) i glasi: ∏∑∑ − = ∆− − = ∑ ∆−− = ⋅∆=∆⋅= − = 1 0 1 0 1 0 1 0 )( i j x n i ii xn i j i j j exxexL φ φ εε (1.6) Pri tome vrijedi: εi = ε (x + i∆x) Фi = Ф(x + i∆x) (1.7) Uvedimo supstituciju: αi = 1 – e–Фi∆x gustoća (opacity) voxela i Ci = (εi / αi) ∆x boja voxela i ci = Ci αi predkalkulirana boja i gustoća (opacity) (1.8) Uz supstitucije (1.8) možemo navesti konačan oblik volumetric compositing jednadžbe. ∏∑ − = − = −= 1 0 1 0 1)( i j j n i icxL α (1.9) Relacija (1.9) često se piše i na sljedeći način primjenom over operatora.
  • 10. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 10 L(x) = c0 + c1(1 – α0) + c2(1 – α0) (1 – α1) + ... + cn-1(1 – α0 ) ... (1 – αn-2) = c0 over c1 over .... over cn-1 (1.10) Navedena tehnika volumetrijskog kompozitiranja koristi se u većini algoritama volumne vizualizacije za estimaciju integrala (1.5). Sada možemo navesti pojednostavljen algoritam za realizaciju vizualizacije volumena. • Za svaki pixel konačne slike propusti zraku svjetlosti kroz pixel slike o Za svaki voxel duž zrake izračunaj boju i gustoću na temelju skalarne vrijednosti volumena u točci (x,y,z) o Izvrši volumno kompozitiranje za svaki voxel duž volumena. Uočavamo da konačna slika ima n2 pixela. Neka svaka zraka prolazom kroz volumen dolazi u interakciju sa n voxela vidimo da je složenost algoritma O(n3 ). Ako imamo volumen dimenzije 512x512x512 voxela računanje volumne vizualizacije vremenski je zahtjevno. Postoje tehnike koje ubrzavaju taj proces, primjerice shear-warp transformacija ili early ray termination ali njihova brzina još uvijek nije zadovoljavajuća. Me utim korištenjem napredne arhitekture grafičkih procesora danas prisutnih u širokoj potrošnji možemo postići vizualizaciju u realnom vremenu. Pod realnim vremenom podrazumjevat ćemo brzine iscrtavanja od ~20 slika u sekundi i više. 2.3. Akvizicija volumnog podatka Dakle da bi vizualizirali volumen, moramo ga prvo snimiti odnosno dohvatiti nekom metodom. Dohvat odnosno akvizicija volumena odnosi se na neki način snimanja primjerice trodimenzionalni snimak dijela tijela u medicinske svrhe. Takve snimke mi smo najčesšće koristili prilikom testiranja naše implementacije volume rendering sustava. Riječ je o MRI ili CT snimkama ljudske anatomije. Neki od načina akvizicije su: • računalna tomografija ( CT – computer tomography) • magnetska rezonancija ( MRI - magnetic resonance imaging) • ultrazvuk • PET (positron emission tomography) • SPECT (single photon emission computerized tomography) Važno je primjetiti da od gore navedenih metoda CT i MRI mjere anatomske stukture kao funkciju prostora, dok PET i SPECT promatraju vremensku promjenu strukture. S
  • 11. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 11 obzirom da je riječ o vizualizaciji trodimenzionalnog skalarnog polja ne mora nužno biti riječ o snimku, već možemo vizualizirati i neki analitički model primjerice model atoma sa prikazom energetskih stanja i sl. Možemo ukratko proanalizirati rad CT i MRI akvizicije s obzirom da smo najviše upotrebljavali snimke dobivene tom metodom. 2.3.1 Računalna tomografija (CT) Računalna tomografija generira snimak tako da odre uje gustoću tvari u unutrašnjosti tijela. Propuštanjem X-zrake kroz tijelo, i mjerenjem njenog prigušenja s druge strane detektorom, CT ure aj utvr uje iznos integrala apsorpcijske funkcije. ∫− = dxx eIxI )( 0)( µ (1.11) Pri tome je µ(x) funkcijska ovisnost apsorpcije o položaju duž X-zrake. Da bi na temelju jedno dimenzionalne apsorpcijske funkcije odredili strukturu dvodimenzionalnog presijeka tijela možemo primjerice propustiti niz zraka čiji izvorišni položaji čine radijalnu strukturu. Na temelju takvog radijalnog snimka možemo rekonstruirati dvodimenzionalni presjek. Niz takvih presjeka čini našu željenu 3D strukturu odnosno volumen. rengenska cijev X-zrake detektor Slika 4 : pojednostavljen prikaz CT snimanja 2.3.2 MRI akvizicija MRI je tako er tehnika snimanja unutrašnjosti volumena no, za razliku od CT-a koji prikazuje samo razliku u intenzitetu duž zrake, MRI prikazuje i male razliku u strukturi i time je pogodan za situacije u kojima treba precizan opis tkiva poput snimanja
  • 12. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 12 mozga. Prva implementacija nastala je 1980 godine i predstavljala je revoluciju u medicinskom snimanju. MRI snimanje bazira se na reakciji protona (vodikove jezgre) na vanjsko magnetsko polje. Tijelo prvo podvrgavamo snažnom magnetskom polju te ono utječe na orijentaciju protona. Nakon toga niz radio valova odašilje se kroz tijelo i remeti orijentaciju protona te oni dolaze u stanje rezonancije. Rezonanciju mjeri osjetljiva antena i omogućuje računanje gustoće protona (proton density - PD), širinu latice spina (T1), i vrijeme relaksacije spina (T2) za svaku točku prostora. Vrijednost voxela računa se kao srednja vrijednost navedenih veličina – PD, T1, T2. Osim kvalitetnije snimke MRI ima još jednu prednost nad CT snimanjem. S obzirom da ne izlaže tijelo X-zrakama nedestruktivan je po ljudsko zdravlje no cijena samog snimanja (u financijskom smislu) je veća. Slika 5 : Usporedba CT snimke (lijevo) i MRI snimke (desno). Uočljivo je da MRI snimak sadži preciznu informaciju o strukturi tkiva 2.4 Algoritmi za volumnu vizualizaciju Postoji više algoritama za volumnu vizualizaciju. Naša implementacija realizirana je teksturno baziranom volumnom vizualizacijom. Bitno je napomenuti da većina algoritama oponaša propagaciju zrake svjetla volumnim kompozitiranjem prikazanim u relaciji (1.10). Tako er je bitno spomenuti da algoritme dijelimo na one orijentirane na sliku i one orijentirane na volumen (image order te objekt order) ovisno o redosljedu prolaza algoritma. Ako propuštamo zraku svjetla kroz svaki pixel slike i tada pratimo kroz koje voxel-e prolazi riječ je o image order algoritmu. Ako algoritam prolazi redak
  • 13. 2. Teorijske osnove vizualizacije volumena Grafičko korisničko sučelje za vizualizaciju volumena 13 po redak, stupac po stupac, te presjek po presjek kroz voxel-e volumena tada je riječ o objekt order algoritmu. Naš pristup spada u object order algoritme. image order object order volumen ravnina projekcije promatrač promatrač Slika 6 : Ilustracija pokazuje razliku image order (lijevo) te objekt order (desno) algoritma. Dakle razlika je u redosljedu kojim algoritam obilazi voxele volumena. Najbitniji algoritmi za volumnu vizualizaciju su: • Ray casting (tradicionalan pristup) • Splatting • Shear-warp algoritam • Volume rendering u frekvencijskoj domeni • Hardware accelerated volume rendering Možemo se na intuitivan način osvrnuti na spomenute algoritme. Ray casting smo već opisali. Spada u image order algoritme i složenost mu je O(n3 ). Splatting je object order algoritam. Ideja je da se iterira voxel po voxel i da se svaki voxel projicira, točnije «baca» na ravninu projekcije i gleda kakav je otisak ostavio odnosno koji mu je doprinos konačnoj slici (uspore uje se s bacanjem grude snjega na površinu). Frequency Domain Volume rendering pomoću FFT i IFT transformacija u 3 dimenzije obavlja volumnu vizualizaciju pritom koristeći teorem o projekciji. Frequency Domain Volume rendering reducira kompleksnost algoritma na O( n2 log n)
  • 14. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 14 3. ARHITEKTURA GRAFIČKIH PROCESORA 3.1 Tradicionalna arhitektura Da bi dobili uvid u način rada hardware-ski ubrzanog volumne vizualizacije prvo ćemo objasniti način rada klasične računalne grafike i tradicionalnog grafičkog hardware- a. U klasičnoj računalnoj grafici prikazujemo samo površinu objekta. Površina objekta aproksimirana je manjim ili većim brojem poligona, najčešće trokuta kao osnovnog geometrijskog primitivna. Grafičke kartce zbog toga imaju arhitekturu prilago enu procesiranju jako velikog broja poligona. Dakle cijela scena je sastavljena od pologona. Ti poligoni mogu biti osjenčani da bi se dobio privid osvjetljenosti scene. Osjenčanost poligona odre ujemo na temelju kuta izme u normale na površinu poligona te smjera iz kojeg dolazi svjetlost i smjera promatrača (slika 8). Nadalje na površinu poligona možemo projicirati neku sliku i tu tehniku nazivamo teksturiranje. Time površina dobiva uvjerljiviji izgled. Trokut opisujemo tako da zadamo njegove vrhove kao vektore u trodimenzionalnom prostoru (i,j,k). Matematičkim tranformacijama poput translacije i rotacije pomičemo objekte u prostoru a tako er pomičemo i izvor svjetlosti i kameru odnosno promatrača. Nakon obavljenih prostornih tranformacija, sjenčanja i teksturiranja scenu moramo projicirati na ravninu odnosno ekran. Projekciju vršimo pomoću perspektivne ili ortogonalne transformacije. Dakle grafički procesor obavlja navedene operacije umjesto CPU jedinice, i obavlja ih daleko brže i time rasterećuje sustav. Grafička kartica organizira svoje operacije u protočnu strukturu. Protočnu strukturu grafičke kartice i openGL sustava objasnit ćemo na pojednostavljenoj apstraktnoj razini. Slika 7 : Pojednostavljeni prikaz arhitekture grafičkog akceleratora GEOMETRIJSKE TRANSFORMACIJE RASTERIZACIJA OPERACIJE NA FRAGMENTIMA
  • 15. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 15 normala izvor svjetla Slika 8 : Lijeva slika pokazuje da bilo kakvu plohu u prosturu možemo aproksimirati većim ili manjim brojem poligona. Desna slika prikazuje ovisnost osjenčanosti poligona o kutu izme u normale i zrake svjetlosti. Primjetimo da je donji poligon intenzivnije osvjetljen zbog manjeg kuta normale i smjera svjetlosti Geometrijske transformacije U fazi geometrijskih transformacija grafički akcelerator obavlja afine transformacije, odnosno množenje sa matricama transformacije (rotacija, translacija). Za svaki vektor računa se lokalno osvjetljenje na bazi normale i položaja svjetla. Iz liste lektora formiraju se primitivi – poligoni (primitive assembly). Zatim se svi vektori projiciraju na ravninu da bi stvorili 2D prikaz trodimenzionalne scene. Rasterizacija Nakon što je geometrijska scena projicirana na ravninu, vrši se dekompozicija poligona na fragmente. Fragmenti su elementi projicirane slike koji će kasnije biti pretvoreni u pixel-e. Generiraju se teksturne koordinate koje odre uju kako će se tekstura «naljepiti» na poligon i zatim se primjenjuje teksturiranje – pridjeljivanje teksture poligonima. U toj fazi primarna boja fragmenta kombinira se sa bojom iz teksturnog elementa. Operacije na fragmentu Tu spadaju alpha test, stencil test, depth test i alpha blending. Alpha test je faza u kojoj se odbacuju svi fragmenti čija neprozirnost (opacity) ne zadovoljava specificirani uvjet. Stencil test odbacuje sve fragmente kojima je postavljen stencil buffer (dodatni spremnik koji možemo koristiti primjerice za stvaranje sjena). Depth test odbacuje sve fragmente
  • 16. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 16 koji su zaklonjeni odnosno nevidljivi promatraču. Alpha blending je postupak u kojem se vrijednost fragmenta kombinira sa frame buffer-om (spremnik u kojem se formira konačna 2D slika). Alpha blending se najčešće koristi za primjerice iscrtavanje polu prozirnih poligona što ćemo koristiti za volumnu vizualizaciju. niz vektora (vertex) poligonalni model rasterizacija Slika 9 : Ilustracija sastavljanja primitiva (primitive assembly) i rasterizacije 3.2 Programirljiva arhitektura Arhitektura opisana u prethodnom poglavlju je fiksna (fixed function pipeline) zato što programer aplikacije ne može utjecati na redosljed ili način izvo enja operacija. Me utim na novijem grafičkom hardware-u susrećemo se s programirljivom arhitekturom. Programeru je dopušteno interferiranje sa operacijama u pipeline-u. Na izvo enje operacija transformacije i osvjetljenja (T&L – transformation & lighting) možemo utjecati vertex programiranjem, a na operacije vezane uz fragmente – fragment programiranjem. S obzirom na različite arhitekture različitih proizvo ača grafičkih kartica u ranijim fazama vertex i fragment programiranja mogli smo programirati jedino korištenjem API funkcija niske razine, specifične za ure aje pojedinih proizvo ača. Na tržištu grafičkih kartica široke potrošnje apsolutno dominiraju ATI i NVIDIA, tako da je pristup specifičnoj funkcionalnosti bio omogućen openGL ekstenzijama. Približno ista funkcionalnost omogućena je kroz odgovarajuće DirectX API funkcije . OpenGL
  • 17. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 17 ekstenzije su set API funkcija koje izlaze iz okvira openGL standarda i vezane su za proizvo ača. Slika 10 : Programirljivo grafičko sklopovlje odnosno utjecaj vertex i fragment programiranja na protočnu strukturu. Starije OpenGL ekstenzije koje su omogućavale programirljivost protočne strukture su GL_ATI_fragment_shader te GL_NV_registry_combiner. Funkcionalnost na DirectX 8.x podsustavu bila je omogućena kroz Vertex_shader 1.x te Pixel Shader 1.x API funkcije. Noviji set API funkcija dostupan je u openGL-u kroz GL_ARB_fragment_program i GL_ARB_vertex_program. Oznaka GL_ARB u prefiksu znači da su ekstenzije odobrene od strane Open GL Arhitecture Review Board tijela koje se bavi standardizacijom openGL ekstenzija. Približno ista funkcionalnost omogućena je u DirectX 9.x podsustavu Vertex Shader 2.x te Pixel Shader 2.x API funkcijama. Bitno je napomenuti da je noviji set API funkcija neovisan o proizvo aču grafičke kartice što predstavlja bitno olakšanje u razvoju grafičkih aplikacija i put prema standardiziraciji GPU (graphics processor unit) programiranja. Protočnastruktura Transformacije i osvjetljenje (T&L) Sastavljanje primitiva (primitive assembly) Rasterizacija Operacije na fragmentu Vertex Processor Fragment Processor
  • 18. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 18 Navedene API funkcije su niske razine (low level API) no danas postoje i jezici visoke razine namjenjeni programiranju protočne strukture. Neki od jezika visoke razine su: • Cg ( «C for graphics») – jezik koji je predložen od strane NVIDIA-e • HLSL («High Level Shading Language») – dio directX-a (Microsoft) • GLSL («Open GL Shading Language») – predložen od strane 3D labs-a Mi smo implementaciju bazirali na GLSL jeziku te ćemo ga stoga detaljnije opisati. Valja napomenuti da su navedeni jezici u širokoj primjeni u računalnoj grafici i predstavljaju revoluciju u kvaliteti i brzini grafike. 3.3 GLSL jezik Prilikom implementiranja aplikacije za GLSL jezik odlučili smo se prvenstveno zbog toga što je neovisan o proizvo aču i dio je OpenGL 2.0 standarda. Open GL koristili smo zbog platformske neovisnosti, dakle po potrebi bi mogli programski kod prilagoditi za drugi operativni sustav osim Microsoft Windows-a. GLSL je programski jezik visoke razine čija je sintaksa bazirana na sintaksi programskog jezika C. GLSL program sastoji se od vertex i fragment programa (vertex shader, fragment shader). Možemo pojednostavljeno reći da vertex shader odre uje poziciju vektora, a fragment shader boju vektora, odnosno fragmenta koji je u konačnici pixel. Vertex shader Ulazi u vertex shader su podaci o vektoru koje mu šalje OpenGL aplikacija, primjerice boja, pozicija, normala i sl. Vertex shader može obavljati sljedeće operacije: • Transformacije pozicije vektora • Transformaciju normale • Generiranje teksturnih koordinata • Osvjetljenje na razini vektora • Računanje boje Prilikom pisanja vertex shader-a nemoramo implementirati svu funkcionalnost već samo one dijelove koje trebamo za volumnu vizualizaciju. Vertex shader mora postaviti varijablu gl_Position. Vertex procesor ima pristup OpenGL stanjima pa može obavljati operacije vezane uz osvjetljenje i može pristupati teksturama. Nema pristup frame buffer-u.
  • 19. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 19 Fragment shader Zadužen je za operacije: • Računanje boja i teksturnih kooordinata sa interpoliranim vrijednostima (na razini pixel-a) • Primjenu teksture • Računanje magle • Računanje interpoliranih normala ako je potrebno osvjetljenje na razini pixel-a (per pixel lighting) Ulazi u fragment shader su interpolirane vrijednosti iz prethodnih stadija poput pozicije nomrale i sl. Te vrijednosti su u vertex shader-u izračunate na razini vektora, me utim ovdje ih razmatramo na razini fragmenta – kasnije pixel-a. Fragment shader nemože utjecati na poziciju pixela na slici jer je ona izračunata u vertex shader-u. Izlaz iz ovog stadija može biti zapisan u gl_FragColor ili možemo odbaciti (discard) vrijednost fragmenta. Tako er ovdje nemamo pristup frame buffer-u što znači da se operacije poput alpha blending-a obavljaju nakon ove faze. Jenostavnim primjerom ilustrirat ćemo upotrebu GLSL-a N - normala θ L – izvor svjetla Slika 11 : Poligon, normala na poligon i izvor svjetla Na slici (11) vidimo situaciju u kojoj računamo osvjetljenje poligona na temelju normale i smjera dolazne svjetlosti. Osvjetljenje ćemo računonati po Lambert-ovom zakonu koji kaže da je svjetlina ravnine koja difuzno raspršuje svjetlost proporcionalna kosinusu kuta
  • 20. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 20 smjera svjetla i normale na površinu. Ovaj zakon matematički je formuliran u relaciji (3.1). )cos(θ⋅⋅= dd MLI (3.1) Pri tome je Ld difuzni koeficijent izvora svjetla a Md difuzni koeficijent materijala. Vertex shader uniform vec3 lightDir; uniform float Md, Ld; void main() { vec3 normal, lightDir; float NdotL; float diffuse; normal = normalize( gl_NormalMatrix * gl_Normal ); NdotL = max( dot(normal, lightDir), 0.0); diffuse = Md*Ld*NdotL; gl_FrontColor = diffuse; gl_Position = ftransform(); } Ovaj trivijalni vertex shader prvo računa normalu odnosno transformira ju u prostor promatrača (eye space) i normalizira. Zatim računa skalarni produkt izme u normale i smjera svjetla te na temelju difuznih konstanti Md i Ld (relacija (3.1)) prenesene iz aplikacije računa konačnu boju vektora. S obzirom da smo ovdje izračunali i poziciju i boju vektora u fragment shaderu nemoramo obavljati dodatne operacije. Fragment shader void main() { }
  • 21. 3. Arhitektura grafičkih procesora Grafičko korisničko sučelje za vizualizaciju volumena 21 Ovim jednostavnim primjerom demonstrirali smo kako pomoću GLSL-a možemo koristiti programirljivost protočne strukture. Naša implementacija intenzivno koristi GLSL za primjerice interaktivnu promjenu transfer funkcija, model osvjetljenja, isosurfacing i sl. Napomenut ćemo još da GLSL programski odsječak kao i svaki drugi moramo kompajlirati da bi ga preveli u strojni kod i izvršili. Me utim kompajliranje nećemo izvoditi u zasebnom okružju već ćemo API funkcije za kopajliranje GLSL koda izvoditi iz same aplikacije. Slika (12) ilustrira taj proces. Dakle proces kompajliranja GLSL-a odvija se tijekom izvršavanja same aplikacije, odnosno «on the fly». Bitno je primjetiti da nam to omogućuje modificiranje GLSL programskog odsječka bez da kompajliramo cijelu aplikaciju. programski kod aplikacije .... programski kod aplikacije .... Slika 12 : Proces kompajliranja GLSL koda koji se ne odvija tijekom kompajliranja same aplikacije već tijekom izvršavanja aplikacije (on fly) VERTEX SHADER glCreateProgram glAttachShader glAttachShader glLinkProgram glUseProgram glCreateShader glShaderSource glCompileShader FRAGMENT SHADER glCreateShader glShaderSource glCompileShader Datoteka sa kodom vertex shader-a Datoteka sa kodom fragment shader-a
  • 22. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 22 4. KORIŠTENJE GRAFIČKOG SKLOPOVLJA U VIZUALIZACIJI VOLUMENA Nakon što smo opisali osnove računalne grafike i protočne strukture grafičkih sustava u ovom poglavju detaljnije ćemo opisati kako iskoristiti grafičko sklopovlje novije generacije za volumnu vizualizaciju. Već smo spomenuli da klasična računalna grafika aproksimira cijelu scenu nizom poligona. Me utim nama je cilj prikazati trodimenzionalno skalarno polje i nemamo poligonalni model našeg volumena. Grafički procesori mogu iscrtavati samo poligone pa je jedino rješenje da volumen spremimo u 2D ili 3D teksture i na emo način da aproksimiramo volumnu vizualizaciju teksturiranim poligonima. Ovaj pristup donijeti će nam ekstremno ubrzanje u odnosu na algoritme koji koriste samo CPU. Tako er ćemo pokazati kako iskoristiti grafički procesor za druge tehnike vizualizacija poput isosurfacing-a i projekcija maksimalnog intenziteta – MIP. 4.1 Volumna vizualizacija korištenjem dvodimenzionalnih tekstura Jedan od načina da prikažemo volumen pomoću grafičkog procesora je da svaki presjek volumena spremi u jednu dvodimenzionalnu teksturu. Tada volumen aproksimiramo nizom poligona na koje su primijenjene teksture koje sadrže presjeke volumena na različitim dubinama. Da bi dobili efekt volumnog renderiranja teksturni elementi poligona moraju biti poluprozirni ovisno o vrijenosti voxel-a u volumenu. Grafički procesor prilikom iscrtavanja svakog poligona njegove fragmente spaja na način da ih kobinira sa frame buffer-om. Frame buffer je dio memorije grafičke kartice koji će sačinjavati konačnu sliku prikazanu korisniku. Konfiguracija koja omogućuje prikazivanje poluprozirnih elemenata naziva se alpha blending. Dakle mi ćemo volumnom vizualizacijom postići alpha blendingom niza poluprozirnih tekstura koje sadrže presjeke volumena. Taj proces ilustriran je slikom (13)
  • 23. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 23 alpha blending Slika 13 : Korištenjem alpha blendinga poluprozirnih tekstura postižemo elekt volumnog kompozitiranja Konfiguracija alpha blendinga koja odgovara našem volumnom kompozitiranju postavlja se sljedećim nizom OpenGL funkcija : glEnable ( GL_BLEND ); glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); Ovakva konfiguracija se u računalnoj grafici koristi za dobivanje efekta prozirnosti. Ako imamo dovoljan broj presjeka volumena koji se prikazuju teksturiranim poligonima dobit ćemo aproksimaciju volumne vizualizacije visoke kvalitete. Kad na ovaj način iscrtavamo volumen on će biti ispravno prikazan ako rotiranjem volumena ne do emo do emo u situaciju u kojoj se smjer pogleda približava ravnini poligona odnosno okomici na normalu poligona. Tada bi vidjeli da se radi o presjecima i vidjeli bi «kroz presjeke». Taj problem možemo rješiti tako da volumen spremimo u tri skupine tekstura. Svaka skupina sprema volumen (x,y,z) u obliku drugačijih presjeka. Jedna skupina sadrži presjeke volumena duž x osi, druga duž y i treća duž z osi. Koju skupinu presjeka odnosno koordinatnu os ćemo odabrati za iscrtavanje ovisi o tome koja je pozicija promatrača. Ako je promatrač najbliže x osi tada ćemo iscrtati presjeke duž x osi. Anologno vrijedi za preostale osi. Ova tehnika ilustrirana je slikom (14)
  • 24. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 24 z os z os y os y os x os x os promatrač je najbliže y osi promatrač je najbliže x osi Slika 14 : Pozicija promatrača odre uje koji ćemo skup presjeka iscrtavati. Iscrtat ćemo skup presjeka duž one osi kojoj je promatrač najbliži, tako da ne bi bio vidljiv razmak odnosno prazan prostor izme u presjeka. Analogno razmatranje vrijede za z os Dakle postupak volumne vizualizacije korištenjem 2D tekstura je sljedeći. Volumen podjelimo na presjeke duž x, y, i z osi i ta tri skupa presjeka spremimo u sistemsku memoriju. Iz sistemske memorije te presjeke učitamo u niz 2D tekstura koje ćemo kasnije primjeniti na poligone. Postupak iscrtavanja možemo ilustrirati sljedećim pseudokodom. IzračunajSmjerPogleda( &smjerPogleda ); OdrediNajvećuKomponentu( smjerPogleda ); if( najvećaKomponenta == x ) { IscrtajPresjekeDužXOsi() } if( najvećaKomponenta == y) { IscrtajPresjekeDužYOsi()
  • 25. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 25 } if( najvećaKomponenta == z ) { IscrtajPresjekeDužZOsi() } 4.2 Memorijska razmatranja Ovdje moramo navesti još neka razmatranja koja su zajednička 2D i 3D teksturno orijentiranom pristupu. Memorija integrirana na grafičkoj kartici omogućuje iscrtavanje tekstura i imamo brz pristup toj memoriji prilikom GPU (graphics processor unit) programiranja. Teksture mogu biti spremljene i u sistemsku memoriju me utim pristup sistemskoj memoriji je vremenski preskup i loše se odražava na performanse sustava. Usko grlo predstavlja grafička sabirnica (AGP ili PCI express) koja nema dovoljnu propusnost za naše potrebe. Nama je cilj postići real-time sustav dakle iscrtavanje grafike ~10 puta u sekundi i više. Ako teksture učitavamo iz sistemske memorije doći će do zastoja i iscrtavanje se više ne odvija u realnom vremenu. Dakle cijeli volumen moramo spremiti u memoriju grafičke kartice. U trenutku pisanja ovog rada većina grafičkih kartica ima integrirano 128 MB ili 256 MB memorije. Naš volumen spremljen je u datoteku kao niz skalarnih vrijednosti u datoteku. Te skalarne vrijenosti su intenziteti svakog voxel-a u volumenu. Spremljeni su presjek po presjek, a svaki presjek redak po redak. Skalarne vrijednosti odnosno intenziteti svakog voxel-a u datoteci mogu biti spremljeni kao 8 bitni, 12 bitni ili 16 bitni brojevi. S obzirom da raspolažemo sa maksimalno 256 MB video memorije naš teoretski maksimum je volumen dimenzija 512*512*512 sa 16 bitnom preciznošću zapisa voxel-a. Me utim taj maksimum će u praksi biti nešto manji zbog toga što memorija grafičke kartice mora pohranjivati i druge podatke dodjeljene od operativnog sustava. Sada možemo uočiti nedostatak 2D pristupa – moramo spremati tri skupa presjeka istog volumena u video memoriju. Drugim rječima imamo u «skupoj» video memoriji tri puta spremljen isti volumen ali na drugačiji način – presjeci po x, y i z osi.
  • 26. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 26 4.3 Volumna vizualizacija korištenjem trodimenzionalnih tekstura Volumnu vizualizaciju potpomugnutu grafičkim procesorom možemo realizirati i pomoću 3D tekstura. Danas većina grafičkih kartica podržava 3D teksture. Cijeli volumen spremamo u jednu 3D teksturu. Veličina volumena dakle nesmije biti veća od veličine memorije grafičke kartice kao što je navedeno u prethodnom poglavlju. Prednost 3D tekstura je to što ne moramo spremati 3 iste kopije u video memoriju. Me utim nedostatak su nešto lošije performanse. Performanse su nešto lošije zbog toga što prilikom iscrtavanja grafički procesor teksturne koordinate odre uje na 3D teksturi i time vrši trilinearnu interpolaciju za razliku od 2D teksturnog pristupa gdje se vrši bilinearna interpolacija. Performanse su nešto lošije ali je kvaliteta konačne slike bolja. Prisjetimo se da grafički procesor može iscrtavati samo poligone tako da opet moramo aproksimirati volumen 2D poligonima na koje je primjenjena tekstura. Razlika je u tome što se tekstura na poligon primjenjuje pomoću 3D teksturnih koordinata i iz vrijednosti 3D teksture. Za crtanje poligona imamo dva pristupa. • poligoni okomiti na koordinatne osi (object aligned slices) • poligoni okomiti na smjer pogleda (view aligned slices) Poligone orijentirane na koordinatne osi objasnili smo u prethodnom poglavlju. Kod poligona orijentiranih prema smjeru pogleda imamo veću kvalitetu slike jer su fizikalno «ispravniji». Ova tehnika nešto je sporija jer se teksturne koordinate generiraju automatski za razliku od 2D pristupa gdje ih mi «ručno» zadajemo. Ovaj princip ilustriran je slikom (14). Na desnom dijelu slike možemo uočiti da presjecanjem našeg 3D volumena ravninom nastaju poligoni čija struktrua i pozicija ovise o smjeru pogleda. Dakle za svaku poziciju promatrača potrebno je računati sjecište ravnine okomite na pogled i volumena. Na sreću grafički procesor omogućuje automatsko generiranje teksturnih koordinata. U našoj aplikaciji implementirane su i 2D teksturni pristup i 3D teksturni pristup, a poligoni su posloženi duž koordinatnih osi.
  • 27. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 27 smjer pogleda z os smjer pogleda y os x os Slika 15 : Poligoni orijentirani prema smjeru pogleda (view aligned slices) 4.4 Interaktivna promjena transfer funkcija U ovom poglavlju razmatrat ćemo vrlo važno područje volumne vizulizacije a to su transfer funkcije. Transfer funkcija je funkcija koja odre uje na koji način će se izvorna vrijednost voxel-a mapirati u (R, G, B, A) vrijednost, odnosno boju i neprozirnost. Možemo formalno napisati: f(x) = (r,g,b,a) pri čemu su r,g,b,a vrijednosti iz skupa [0,255] Prilikom spremanja podatka u OpenGL teksturu možemo odabrati format u kojem će podatak biti zapisan. Dozvoljeni formati su GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, i GL_LUMINANCE_ALPHA. Ti formati odre uju način interpretacije jednog ili više bajtova pojedinih voxel-a iz datoteke. Tablica za dohvat boja uz pomoć indeksa (Color Lookup Table) GL_COLOR_INDEX sprema bajt voxel-a iz memorije u teksturu gdje je svaki element 4-bajtni kvartet (R, G, B, A). RGBA je četvero bajtni kvartet u kojem bajtovi označavaju iznos crvene, plave, zelene i neprozirne komponente. Pretvorbu iz color_index-a u RGBA kvartet vrši se pomoću lookup tablice. To je tablica sa 256 elemenata od kojih je svaki jedan RGBA kvartet. Mi možemo takvu tablicu koristiti kao trnasfer funkciju, ona nam omogućuje da različite izvorne vrijednosti voxel-a preslikamo u različite boje. Koje vrijednosti se mapiraju u koje boje ovisi o tome što želimo postići i o svojstvima volumena. Primjerice možemo prikazati samo lubanju ako pretpostavimo da su njene vrijenosti iznad 60% maksimalnog intenziteta i prikazujemo samo one voxel-e koji su
  • 28. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 28 iznad 60% intenziteta. Odabir transfer funkcija zasad se vrši empirijski jer ne postoje metode koje automatski odre uju idealnu transfer funkciju. Primjerice odabir transfer funkcija omogućuje nam da pregledavamo samo odre ena tkiva ili granice izme u tkiva a da ne vršimo eksplicitnu segmentaciju volumena. To možemo učiniti naravno samo aproksimativno. U idućim poglavljima pokazat ćemo kako možemo procijeniti granice izme u tkiva. Opisani pristup ima jednan veliki nedostatak. Ako transfer funkciju pridodjeljujemo volumenu preko lookup tablice tada svaka promjena tablice mora biti popraćena ponovnim učitavanjem čitavog volumena. To je zato što se interno u teksturu ne sprema samo color_index već ekstrapolirani kvartet. Dakle na ovaj način nemožemo mijenjati transfer funkciju u realnom vremenu. Ovisno teksturiranje (dependent texture read) Ovisno teksturiranje je tehnika u kojoj se vrijednost texel-a (teksturni element kao pixel) koristi kao teksturna koordinata za pristup drugoj teksturi. Otuda nam i dolazi naziv dependent texturing jer ulaz u jednu teksturu (teksturne koordinate) ovisi o izlazu prethodne teksture. Korištenjem modernih grafičkih procesora navedenu operaciju možemo izvoditi u realnom vremenu. To tako er predstavlja iznimno ubrzanje u odnosu na klasično vizualiziranje volumena gdje smo kod promjene transfer funkcije trebali iznova učitati cijeli volumen. Sada grafički procesor mjenja transfer funkciju «on the fly» tako da možemo interaktivno u realnom vremenu i punoj kvaliteti mijenjati transfer funkciju i time znatno lakše pronaći onu koja nam odgovara. Ilustrirat ćemo opisanu tehniku ovisnog teksturiranja sljedećim segmentom GLSL koda. uniform sampler1D texDep; uniform sampler3D texData; ... void main(){ int colorIndex = texture3D(texData, gl_TexCoord[0].stp); vec4 colorRGBA = texture1D(texDep, colorIndex ); } ...
  • 29. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 29 Navedeni isječak fragment shader-a demonstrira kako vrijednost jedne teksture koristimo kao teksturnu koordinatu za pristup drugoj. Mi smo ovdje koristili jednodimenzionalne transfer funkcije gdje boja voxel-a ovisi samo o njegovoj originalnoj vrijednosti – intenzitetu. Moguće je konstruirati i dvodimezionalne transfer funkcije gdje RGBA vrijednost voxel-a ovisi o intenzitetu i lokalnom gradijentu u toj točci volumena. Moguće je čak konstruirati i trodimenzionalne transfer funkcije gdje RGBA vrijednost voxela ovisi o gradijentu te prvoj i drugoj derivaciji duž normale u danoj točci prostora. Takav pristup opisali su Kniss, Kindlmann, Hansen [6] Slika 16 : Prikazan je isti volumen na koji su primjenjene različite transfer funkcije. Promjenu transfer funkcije naša aplikacija obavlja u realnom vremenu. 4.5 Projekcije maksimalnog intenziteta (MIP) Osim klasičnog volumnog vizualiziranja volumen možemo prikazati i na drugačiji način. Jedan od načina su projekcije maksimalnog intenziteta (Maximum Intensity Projection – MIP ). Kada zraka svjetla prolazi kroz volumen nećemo vršiti volumno kompozitiranje već ćemo tražiti voxel najvećeg intenziteta i njega projicirati na ravninu. Tako ćemo dobiti sliku na kojoj su iscrtane najveće vrijednosti iz volumena duž smjera pogleda. Da bi to postigli moramo promjeniti konfiguraciju OpenGL da spriječimo vršenje klasičnog volumnog kompozitiranja. if( renderingMode == MIP) { glEnable ( GL_BLEND );
  • 30. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 30 glBlendFunc( GL_ONE, GL_ONE ); glBlendEquationEXT( GL_MAX_EXT ); } Primjetimo da funkcija glBlendEquationEXT spada u OpenGL ekstenzije i mora biti podržana od strane proizvo ača. GLSL kod ovdje ostaje bez većih promjena. Slika 17 : Projekcija maksimalnog intenziteta – MIP. S lijeve strane CT stopala. S desne strane CT glave 4.6 Modeli osvjetljenja Model osvjetljenja uvest ćemo zbog činjenice da osvjetljenje u računalnoj grafici poboljšava percepciju površine objekta. Već smo spomenuli da je za računanje osvjetljenja poligona potrebna normala na poligon te smjer pogleda i zrake svjetla. Očiti problem je da mi nemamo ni poligonalni model u klasičnom smislu a time ni normalu na ravninu poligona. Ovaj problem možemo rješiti tako da pokušamo odrediti normalu za svaki voxel. Prisjetimo se da gradijent neke funkcije odre uje smjer najbrže promjene te funkcije. ),,(),,( I z I y I x zyxIgradI ∂ ∂ ∂ ∂ ∂ ∂ =∇= (4.1) Ako u volumenu imamo površinu čiji voxeli imaju iste vrijednosti (isosurface) tada će gradijent intenziteta I(x,y,z) pokazivati u smjeru normale. Gradijent ćemo naravno aproksimirati numerički. Gradijent možemo aproksimirati na sljedeći način.
  • 31. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 31 [ ]),,1(),,1( 2 1 ),,( zyxfzyxfzyxI x −−+= ∂ ∂ (4.2) [ ]),1,(),1,( 2 1 ),,( zyxfzyxfzyxI y −−+= ∂ ∂ (4.3) [ ])1,,()1,,( 2 1 ),,( −−+= ∂ ∂ zyxfzyxfzyxI z (4.4) Gradijent ćemo zbog brzine izvo enja izračunati u fazi pretprocesiranja. Gradijent se izračunava za svaki voxel volumena i ima tri komponente (i,j,k). Svaka komponenta bit će osam bitan broj tako da gradijent možemo spremati u prva tri člana RGBA kvarteta a četvrti član ostavit ćemo za vrijednost intenziteta voxela odnosno originalnu vrijednost. Vidimo da nam za volumnu vizualizaciju sa osvjetljenjem treba 4 puta više memorije. Sada ćemo umjesto da spremimo samo volumen u istu teksturu spremiti i originalni volumen ( I(x,y,z) – originalna vrijednost voxela (x,y,z)) i normalu odnosno gradijent za svaki voxel. ),,( zyxI x∂ ∂ ),,( zyxI x∂ ∂ ),,( zyxI x∂ ∂ I(x,y,z) Slika 18 : U teksturu sad osim samog volumena I(x,y,z) pohranjujemo i normalu Sad kada su nam u fazi fragment shader-a dostupe normale, sam volumen, svjetlo i smjer pogleda možemo izračunati osvjetljenje. Osvjetljenje računamo trokomponentnim modelom navedenim sljedećom relacijom. r sda hnLlnLLL )()( oo ++= (4.5) Pri tome je La – koeficijent ambijentalne komponente svjetla, ona je konstantna Ld - koeficijent difuznog osvjetljenja Ls - koeficijent specular osvjetljenja R G B A
  • 32. 4. Korištenje grafičkog sklopovlja u vizualizaciji volumena Grafičko korisničko sučelje za vizualizaciju volumena 32 n - normala na površinu l - smjer zrake svjetla h - kut izme u smjera pogleda i zrake svjetla r - eksponent odsjaja (shinnines) Ovakav model osvjetljenja možemo računati na razini voxel-a u realnom vremenu korištenjem GLSL fragment shader-a . Slika 19 : CT i MRI snimak bez osvjetljenja. Usporediti sa slikom (20) Slika 20 – Hibridna metoda prikaza, kombinacija volumnog vizualiziranja i sjenčanja realizirana našom aplikacijom. S lijeve strane imamo CT snimak, s desne MRI snimak sa približno istim parametrima sjenčanja
  • 33. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 33 5. PROGRAMSKA IMPLEMENTACIJA 5.1 Struktura programske implementacije Programska implementacija namijenjena za Windows platformu realizirana je programskim jezikom C/C++. Za interakciju sa operativnim sustavom korištene su Win32 API funkcije. Za iscrtavanje grafike korišten je grafički podsustav OpenGL. Bitno je napomenuti da je OpenGL multiplatformski grafički library tako da je našu implementaciju moguće u razumnom roku prilagoditi za drugi operativni sustav primjerice Linux. Za pristup naprednim mogućnostima grafičkog procesora korišten je tako er multiplatformski jezik GLSL koji je dio OpenGL 2.0 standarda. Prilikom stvaranja implementacije cilj je bio realizirati modularan sustav za vizualizaciju koji će se kasnije moći koristiti i u okviru drugih projekata. To je postignuto smještanjem cijele funkcionalnosti unutar dll (dynamic link library) modula. To znači da programer druge aplikacije može uključiti dll modul u svoj projekt i korištenjem našeg seta API funkcija koristiti volumna vizualizacija bez znanja o načinu rada sustava. Osim dll modula implementirano je i grafičko korisničko sučelje tako er korištenjem win32 API funkcija. Win32 API korišten je zbog bolje kontrole nad procesima poput komunikacije porukama izme u prozora, iscrtavanjem, osvježavanjem slike i sl. detaljima vezanim uz operativan sustav. Osim navedenih prednosi win32 API je najniža razina kojom aplikacijski programer može komunicirati sa operativnim sustavom. Na taj način možemo postići maksimalnu brzinu izvo enja. Dijagram na slici (21) prikazuje kako dll modul vrši komunikaciju sa operativnim sustavom i OpenGL grafičkim podsustavom bez znanja krajnjeg korisnika i aplikacijskog programera. Dakle cijelu funkcionalnost aplikacijski programer i implementirano korisničko sučelje imaju na raspolaganju putem API funkcija realiziranog dll modula. Bez uplitanje u API funkcije operativnog sustava i arhitekturu grafičke kartice aplikacijski programer može iscrtavati volumnu grafiku u realnom vremenu.
  • 34. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 34 Slika 21 : Apstraktni dijagram implementiranog sustava 5.2 Korištenje implementacije U ovom poglavlju opisat ćemo neke od API funkcija koje smo realizirali i stavili na raspolaganje aplikacijskom programeru. Bit će objašnjeni neki praktični implementacijski detalji. Pomoću navedenih API funkcija realizirali smo sustav za volumnu vizualizaciju sa grafičkim korisničkim sučeljem. Za korištenje dll modula potrebno je u projekt uključiti header datoteku glDLL.h te datoteku VolRenDll.lib. Datoteka VolRenDll.dll mora biti u sistemskom direktoriju ili u direktoriju aplikacije koju razvijamo. U datoteci glDLL.h nalaze se deklaracije struktura i funkcija nužnih za komunikaciju s modulom za volumnu vizualizaciju ( VolRenDll.dll ), a datoteka VolRenDll.lib predstavlja import library koji je potreban kompajleru da dohvati adresu funkcija implementiranih u navedenom modulu. Nakon navedenog konfiguriranja možemo u svega nekoliko linija koda vizualizirati volumen, interaktivno mijenjati transfer funkcije, podešavati parametre prikaza, osvjetljenja i sl. Bitno je napomenuti da su u datoteci glDLL.h prototipovi API funkcija realiziranih dll-om te strukture potrebne za rad sa tim funkcijama. Strukture nam služe za pohranjivanje i prenošenje raznih parametara vizualizacije. Ukratko ćemo opisati potrebne strukture. DLL MODUL Win32 API OpenGL API APLIKACIJSKI PROGRAMER Rad sa prozorima i porukama Konfiguracija OpenGL sustava Volumna vizualizacija KORISNIČKO SUČELJE KORISNIK
  • 35. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 35 LIGHTPARAMETARS typedef struct ltPrms { COLORREF rgbAmbient; COLORREF rgbDiffuse; COLORREF rgbSpecular; int intAmbient; int intDiffuse; int intSpecular; int intShinines; int intIsoValue; } LIGHTPARAMETARS; Navedena struktura služi za opisivanje parametara osvjetljenja, primjerice intenzitet i boja pojedinih komponenta boje – specular, diffuse, ambient. SYSTEMINFO typedef struct sysinf { int GLSL_support; int texture_support_3D; int max_2d_tex_size; int max_3d_tex_size; int video_memory; int system_memory; long int processor_speed; } SYSTEMINFO; Pomoću ove strukture možemo od dll modula dohvatiti osnovne podatke o sustavu kao što su količina dostupne sistemske i video memorije, GLSL podrške grafičkog procesora i sl. CLIPPING typedef struct cl { BOOL enabled; int mouse_function; int current_clip; int front; int back; int top; int bottom; int left; int right; float angX[6];
  • 36. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 36 float angY[6]; float angZ[6]; float D[6]; }CLIPPING; Pomoću ove strukture definirat ćemo način na koji će dll modul rezati volumen (clipping). Moguće je definirati do 6 ravnina rezanja. Za svaku ravninu rezanja možemo odrediti njen pomak duž referentne osi i kut rotacije oko x, y, z osi i time odrediti proizvoljno bilo koji položaj ravnine za rezanje u prostoru. RAWFILEINFO typedef struct rfi { int xDim; int yDim; int zDim; int bitsPerVoxel; int spacingX; int spacingY; int spacingZ; } RAWFILEINFO; Ovom strukturom ćemo prenositi u dll modul informaciju o datoteci tipa RAW. RAW datoteka sadrži volumen odnosno slijedno spremljene voxel-e volumena, ali ne i informacije o dimenziji volumena ili preciznosti. Tako da ova informacija mora biti nužno prenesena od strane korisnika tj. aplikacijskog programera. TFPARAMS typedef struct tfp { int numRedPoints; int numGreenPoints; int numBluePoints; int numAlphaPoints; int redPointsX[20]; int redPointsY[20]; int greenPointsX[20]; int greenPointsY[20]; int bluePointsX[20]; int bluePointsY[20]; int alphaPointsX[20]; int alphaPointsY[20];
  • 37. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 37 float valueR[256]; float valueG[256]; float valueB[256]; float valueA[256]; } TFPARAMS; Ova struktura omogućuje nam proizvoljno definiranje transfer funkcija za svaku komponentu. Komponente su crvena, plava, zelena i neprozirna (RGBA). Ovdje definiramo kako ćemo izvornu vrijednost voxel-a mapirati u RGBA boju. Nakon što smo objasnili osnovne strukture podataka objasnit ćemo i neke osnovne funkcije za inerakciju s modulom za volumna vizualizacija. Sve funkcije imaju zaglavlja definirana u glDLL.h datoteci. InitRenderer BOOL InitRenderer(HWND hwndParent, int x1, int y1, int x2, int y2) Navedena funkcija inicijalizira prozor namjenjen za iscrtavanje openGL grafike, pritom specificira roditeljski prozor (parent) te dimenzije i poziciju prozora za iscrtavanje grafike ResizeRenderer void ResizeRenderer(int x, int y, int x2, int y2); Navedena funkcija mijenja veličinu i poziciju OpenGL prozora. KillRenderer int KillRenderer(); Uništava OpenGL prozor i vrši dealokaciju volumena iz sistemske i grafičke memorije. LoadVolume int LoadVolume ( char *hdrFile, char *imgFile, int format, RAWFILEINFO *rfI); Funkcija učitava volumen specifirane lokacije i formata u dll modul. Dostupni formati su analyze mayo ( sastoji se od dvije datoteke datoteka.hdr i datoteka.img ) i raw format.
  • 38. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 38 RenderVolume int RenderVolume(float aX, float aY, float aZ, float zoom); Funkcija prikazuje volumen zarotiran za specificiran broj stupnjeva oko x,y,z osi i udaljen od pogleda za specificiranu udaljenost. DrawRenderer int DrawRenderer(); Funkcija vrši osvježavanje prikaza (repaint) potrebno zbog nekog razloga poput promjene transfer funkcije, promjene parametara i sl. UpdateTF void UpdateTF(TFPARAMS tfParams); Funkcija unosi novu transfer funkciju u dll modul. Parametri nove transfer funkcije su specificirani TFPARAMS strukturom koju prenosimo kao parametar funkcije. UpdateLightParameters void UpdateLightParameters(LIGHTPARAMETERS lghtParams); Ova funkcija unosi nove parametre osvjetljenja preko LIGHTPARAMETERS strukture objašnjene ranije. Ovo su najosnovnije funkcije koje smo realizirali, detaljnije su objašnjene u dokumentaciji gdje su opisane i ostale funkcije. Sada kad smo opisali osnovne funkcije i strukture možemo navesti kratak primjer koda koji pokazuje koliko je jednostavno aplikacijskom programeru koristiti naš dll modul. HWND hwndParent; TFPARAMS tfParams; LIGHPARAMETERS ltParams; // .... InitRenderer( hwndParent, 100, 100, 500, 500 ); LoadVolume(fileNameHDR, imgNameHDR, 0, NULL); RenderVolume( 30, 30, 50, -2); //....
  • 39. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 39 // mijenjamo parametre transfer funkcije i osvjetljenja // UpdateLightParameters(ltParams); UpdateTF(tfParams); DrawRenderer(); //... //.... // KillRenderer();
  • 40. 5. Programska impelementacija Grafičko korisničko sučelje za vizualizaciju volumena 40 5.3 Rezultati Slika 22 : Primjer transfer funkcije Slika 23 : Primjer «rezanja» volumena u realnom vremenu
  • 41. Zaključak Grafičko korisničko sučelje za vizualizaciju volumena 41 6. ZAKLJUČAK Razvili smo kompletan sustav za volumnu vizualizaciju korištenjem moderne arhitekture grafičkih procesora koji se u trenu pisanja ovog rada nalaze već u nižem i srednjem segmentu tržišta. Ovakav pristup donio nam je veliko ubrzanje procesa vizualizacije u odnosu na bilo koji algoritam koji koristi samo središnji procesor računala (CPU). Ubrzanja su znatna i kreću se u rasponu od nekoliko desetaka do nekoliko stotina puta. Teksturno orijentiran pristup volumnoj vizualizaciji omogućio je stvaranje prvih sustava za volumnu vizualizaciju u realnom vremenu na osobnim računalima bez specijalizirane sklopovske opreme. Osim klasičnog volumnog vizualiziranja pokazali smo da grafički procesor možemo iskoristiti za brojna poboljšanja prikaza. Omogućena je promjena transfer funkcija u realnom vremenu. Realizirano je rezanje volumena (clipping) u realnom vremenu. Model osvjetljenja tako er je primjenjen u realnom vremenu. Omogućeno je i nekoliko načina renderiranja osim klasičnog volumnog. Tu spadaju MIP – projekcije maksimalnog intenziteta, zatim isosurfacing (prikazivanje onih dijelova volumena koji imaju iste vrijednosti intenziteta) te hibridni prikaz koji ujedinjuje sjenčanje volumena i volumne vizualizacije. Cilj hibridnog pristupa je poboljšano uočavanje granice različitih materijala odnosno tkiva u promatranom volumenu. Implementacija podržava dva formata datoteka za spremanje volumena. Riječ je o analyze mayo formatu te RAW datotekama. Najveći problem teksturno orijentiranog pristupa je ograničena veličina memorije grafičke kartice. Nemožemo u realnom vremenu renderirati volumen koji zauzima više memorije nego što stane u grafičku karticu. Razlog tome je što se dio koji ne stane mora tijekom iscrtavanja učitavati iz sistemske memorije. Memorijska sabirnica predstavlja usko grlo sustava i onemogućuje real time efekt ekstremno velikih volumena. Na sreću većina volumena stane u memoriju grafičke kartice - koja se u trenutku pisanja ovog teksta kreće od 128MB do 256MB. Rješenje memorijskog problema je bricking odnosno spremanje volumena u manje podvolumene i njihovo učitavanje tijekom raznih faza u protočnoj strukturi. Kada iscrtavamo jedan podvolumen drugi bi trebali učitavati koristeći protočnu strukturu. Me utim efektan bricking još uvijek je vrlo težak problem. Daljnja poboljšanja uključivala bi napredniji odabir transfer funkcija. Primjerice mogli bi konstruirati 2D i 3D transfer funkcije na temelju informacije o gradijentu i prvoj i drugoj derivaciji duž normale na procijenjenu plohu. Ne postoje idealne metode za odabir transfer funkcije. Naprednije metode obično
  • 42. Zaključak Grafičko korisničko sučelje za vizualizaciju volumena 42 kombiniraju empirijski pristup sa matematičkim procjenama volumena, dakle uvijek je potrebna interakcija korisnika. Sustavi za odabir transfer funkcija su tako poluautomatski. Transfer funkcije vjerojatno su najteži problem u volumnom vizualiziranju i područje mogućeg daljnjeg rada.
  • 43. Reference Grafičko korisničko sučelje za vizualizaciju volumena 43 7. REFERENCE [1] Andrew Steven Winter, Volume graphics, Field-based modelling and rendering, Phd thesis, Department of Computer Science, University of Wales, 2002 [2] Philippe G. Lacroute, Fast volume rendering using shear-warp factorization of the viewing transformation , Phd thesis, Departments of Electrical Engineering and Computer Science, Stanford University, 1995 [3] Volume rendering for 3D display, Magnus Wahrenberg, Master of Science thesis, KTH Computer Science and Communication, 2006 [4] Klaus Engel, Markus Hadwiger, Joe M. Kniss, Aaron E. Lefohn, Christof Rezk Salama, Daniel Weiskop, Course notes 28, Real-time volume graphics, Siggraph 2004 [5] Scientific computing and imaging institute publications http://www.sci.utah.edu/cgi-bin/sci_publications.pl [6] Joe Kniss, Gordon Kindlmann, Charles Hansen, Multi-Dimensional Transfer Functions for Interactive Volume Rendering, Scientific computing and imaging institute [7] Gordon Lothar Kindlmann, Semi automatic generation of transfer functions for direct volume rendering, Master of Science thesis, University of Cornell, 1999
  • 44. Sažetak Grafičko korisničko sučelje za vizualizaciju volumena 44 8. SAŽETAK Cilj diplomskog rada bilo je stvaranje sustava za volumnu vizualizaciju koji radi u realnom vremenu koristeći grafički procesor. Stvoreno je modularno rješenje koje osim klasičnog volumnog renderiranja implementira i tehnike sjenčanja, MIP (maximum intensity projection) prikaz, rezanje volumena (clipping) te hibridnu metodu tj. kombinaciju sjenčanja i klasičnog pristupa. Objašnjen je način rad klasične računalne grafike a zatim i način korištenja protočne strukture grafičkog procesora za realizaciju navedenog cilja. U ovom radu objašnjena je fizikalna pozadina sustava volumnog renderiranja i način primjene na grafičkom procesoru. Objašnjen je teksturni pristup volumnom vizualiziranju i njegove varijante 2D i 3D teksturni pristup. Tako er su objašnjene razlike izme u presjeka poredanih duž koordinatnih osi i presjeka poredanih duž smjera pogleda. Opisan je GLSL jezik i njegova primjena u volumnom renderiranju posebice interaktivnoj promjeni transfer funkcija. Opisani su i najvažniji tehnički detalji same aplikacije. ABSTRACT The goal of this work was to create real time volume rendering system which uses graphics proccesor. We have created a modular solution with implementation of “classic” volume rendering, lighting model, maximum intensity projection-MIP, clipping and hybrid method which combines volume rendering with lighting effect. We have outlined general principles of computer graphics and then afterwards we explained how to use graphics processor pipeline to achieve our goal – real time volume rendering. The physical model of volume rendering system was also explained. We described texture-based approach and it’s main variants - 2D and 3D texturing. Also we have shown difference between axis aligned and object aligned slices. Basics of GLSL language were shown with it’s application in volume rendering especially interactive transfer function editing. And finally we briefly discussed basic tehnical details of application itself. KEYWORDS: real time volume rendering, texture based volume rendering, GPU volume rendering