PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY DIPLOMOVÁ PRÁCE Metody modelování tělesa z rovinných řezů 2011 Bc. Markéta Krmelová
Místopřísežně prohlašuji, že jsem celou práci včetně příloh vypracoval samostatně. 4.duben 2011 Bc. Markéta Krmelová i
Anotace Tato práce navazuje na bakalářskou práci, která se zabývala rekonstrukcí 3D obrazu z počítačového tomografu, ve které byly uvedeny metody pro výpočet povrchu tělesa, zejména metoda Marching Cubes. V této práci budou podrobněji popsány další metody modelování, obzvláště metoda Dividing cubes, metoda Opláštění kontur, metoda Marching Cubes 33 a jejich porovnání s metodou Marching Cubes. Dále bude představen objemový rendering. Součástí této práce je také vytvoření programu, který bude demonstrovat představené metody na datách získaných z výpočetního tomografu. ii
Ráda bych na tomto místě poděkovala svému vedoucímu diplomové práce Ing. Michalovi Dobešovi, Ph.D., za obětavou spolupráci i za čas, který mi věnoval při konzultacích. Nemalý dík však patří také mým rodičům a nejbližším přátelům za podporu, které se mi od nich dostalo. iii
Obsah 1. Úvod 1 1.1. Rozvržení práce............................ 2 2. Algoritmy zobrazující povrch 3 2.1. Metoda opláštění kontur....................... 3 2.2. Metoda Marching Cubes....................... 4 2.2.1. Vylepšení metody o filtrování malých částí......... 4 2.3. Metoda Marching Cubes 33..................... 7 2.4. Metoda Dual Contouring....................... 9 2.5. Metoda Dual Marching Cubes.................... 9 2.6. Metoda Marching Tetrahedra.................... 9 2.7. Metoda Dividing Cubes....................... 10 3. Metoda opláštění kontur 12 3.1. Výpočet řezů............................. 12 3.2. Rekonstrukce povrchu opláštěním kontur.............. 16 4. Dividing Cubes 21 4.1. Princip algoritmu Dividing Cubes.................. 21 5. Marching Cubes 33 24 6. Algoritmy pro přímé zobrazování objemu 27 6.1. Metody nehledající povrch...................... 27 6.2. Metody s jednoduchým zobrazením povrchu............ 30 6.3. Metody zobrazující povrch s normálou............... 31 6.4. Metody uvažující integraci světla na dráze paprsku........ 33 7. A Simple and Flexible Volume Rendering Framework for Graphics-Hardware-based Raycasting 34 7.1. Ovládání programu.......................... 37 8. Porovnání metod pro zobrazení trojrozměrných dat 40 9. Závěr 42 10.Conclusion 43 Reference 44 i
A. Uživatelská příručka 45 A.1. Struktura CD............................. 45 A.2. Ovládání aplikace........................... 45 A.2.1. Zobrazit snímky........................ 46 A.2.2. Zobrazení 3D modelu metodou Surface renderingu..... 47 A.2.3. Zobrazení dat metodou Volume renderingu......... 47 A.3. Vstupní data............................. 47 ii
Seznam obrázků 1. Originální mapa doktora Johna Snowa zobrazující ložiska cholery v Londýně roku 1854 [13]....................... 1 2. Vstupní objekt............................. 3 3. Sada řezů................................ 3 4. Ukázka odhadu skutečného povrchu pokud nemáme další informaci o tvaru tělesa mezi řezy........................ 4 5. Výsledek bez filtrování malých částí................. 5 6. Výsledek po odfiltrování malých částí................ 6 7. Díry vzniklé nejednosnačností algoritmu Marching Cubes...... 7 8. Dva různé způsoby triangulace povrchu jednoho případu...... 7 9. Všechny možné případy triangulace povrchu............. 8 10. Vlevo rekurzivní dělení krychle. Vpravo odovídající octree. Zdroj [13] 9 11. Vlevo nahoře je zobrazeno původní těleso, vpravo nahoře aproximovaný povrch získaný metodou Dual Marching Cubes, vlevo dole Marching Cubes a vpravo dole Dual Contouring........... 10 12. 2 varianty umístění trojúhelníků v čtyřstěnu............. 10 13. 2 způsoby dělení krychle na čtyřstěny................. 11 14. Kontura a kontura s dírou....................... 12 15. Všechny možné konfigurace...................... 13 16. Příklad................................. 13 17. Nejednoznačnosti Marching Squares................. 14 18. Řez a příslušná hierarchie kontur................... 15 19. Nalevo je počet průsečíků s l lichý, tj. k je díra, vpravo je k vnější kontura................................. 16 20. Kritérium překrytí kontur....................... 17 21. Zobecněné válce............................ 17 22. Správné a chybné propojení kontur.................. 18 23. Chybné spojení kontur......................... 19 24. Maximální objem............................ 20 25. Označení vrcholů............................ 24 26. Označení face.............................. 24 27. Označení................................ 27 28. Výstup z programu Volume - maximum intensity projection.... 28 29. Výstup z programu Volume - summed intensity projection..... 28 30. Výstup z programu Volume - average intensity projection..... 29 31. Výstup z programu Volume - zobrazní povrchu bez výpočtu normál. 30 32. Výstup z programu Volume - zobrazní povrchu bez výpočtu normál II.................................... 30 33. Výstup z programu Volume - Z-buffer gradient shadding...... 31 34. Výstup z programu Volume - Voxel gradient shading........ 32 35. Výstup z programu Volume - Gray-level gradient shading..... 32 iii
36. Maximum intensity projection..................... 35 37. Transparent isosurface......................... 35 38. Kombinace přímého zobrazení povrchu a izoplochy......... 36 39. Isosurface................................ 36 40. Sphere mapping............................ 37 41. Clipped volume rendering....................... 37 42. Metody uvažující integraci světla na dráze paprsku......... 38 43. Refraction................................ 38 44. Dialog aplikace............................. 46 45. Okno se snímky............................. 47 46. Okno s 3D modelem.......................... 48 47. Okno s daty zobrazenými pomocí metody Volume renderingu... 48 iv
Seznam tabulek 1. Testy jednotlivých případů...................... 26 v
1. Úvod Prakticky v každém odvětví lidské činnosti se můžeme setkat s nějakými daty. Specifickým typem dat jsou pak data objemová. Příkladem takovýchto dat jsou například informace získané z výpočetního tomografu. Naším úkolem je pak tato data zobrazit. Tento postup, který je obecně označován jako vizualizace objemových dat, převádí vstupní data do grafické podoby. Vizualizace je použitelná v mnoha různorodých oblastech, jako je medicína, fyzika, geografie či v dnes značně oblíbeném herním průmyslu. Jako první použil k vědeckým účelům vizualizaci doktor John Snow v roce 1855. Doktor Snow sestavil kartografický plánek, jehož kopii znázorňuje obrázek 1., s cílem nalézt zdroj epidemie cholery. Obrázek 1. Originální mapa doktora Johna Snowa zobrazující ložiska cholery v Londýně roku 1854 [13] Díky jeho přelomové myšlence se tehdy podařilo najít zdroje nákazy. Byly jimi studny, které byly znečištěny kalem prosakujícím z nedaleké žumpy (oběti 1
cholery jsou na obrázku znázorněny tečkami a studny křížky). Samotný proces vizualizace je realizován algoritmy, které umožňují zobrazení rozsáhlých souborů prostorových dat. Většina těchto algoritmů má poměrně vysoké nároky na výkon a paměť. Vizualizace využívá také poznatky i z jiných disciplín, než jen z počítačové grafiky a sice z odvětví počítačového vidění či umělé inteligence. V dalších kapitolách se budeme zabývat algoritmy k vizualizaci dat, která byla získána z výpočetního tomografu ve formě série snímků. Data byla zapůjčena s laskavým svolením radiodiagnostického oddělení nemocnice v Ústí nad Orlicí. 1.1. Rozvržení práce Celá tato práce je rozdělena do třech velkých celků. V první části se budeme zabývat metodami Surface renderingu. V druhé kapitole to bude souhrn těchto metod. Ve třetí kapitole se budeme podrobněji věnovat metodě Opláštění kontur. Čtvrtá kapitola bude představovat metodu Dividing Cubes a poslední kapitola tohoto celku představí metodu Marching Cubes 33. Druhým větším celkem budou metody Volume renderingu. V šesté kapitole si popíšeme tyto metody. V sedmé kapitole si představíme framework na zobrazování metod volume renderingu. Třetí část tvoří srovnání všech metod v závislosti na jejich použitelnosti pro práci s daty z výpočetního tomografu. 2
2. Algoritmy zobrazující povrch Jednou z nejdůležitějších úloh počítačové grafiky je zobrazování prostorových modelů. Tvorba reálného obrazu na základě počítačového modelu, nejčastěji 3D, se nazývá rendering. Máme dva typy zobrazení trojrozměrného objektu. Jedním je tzv. Surface rendering (povrchové zobrazení), kde vytváříme geometrickou reprezentaci povrchu tělesa. Metody na tomto principu nepracují přímo s daty, ale snaží se povrch aproximovat sítí trojůhelníků a až poté data zobrazují. Výhodou tohoto přístupu je snížení množství dat, kde místo celé mřížky vzorků zůstane pouze povrch tělesa. V této části si uvedeme několik algoritmů, které převádějí data reprezentující objemová tělesa do povrchové reprezentace. Velmi častá je aproximace povrchu sítí trojúhelníků. 2.1. Metoda opláštění kontur Existuje několik možností, jak zaznamenat těleso. Jednou z nich je pomocí jeho hranice v jednotlivých řezech, tzv. konturách. Obrázek 2. Vstupní objekt. Princip této metody je následující. Z výpočetního tomografu získáme sadu řezů tělesa. V nich pak hledáme kontury reprezentující povrch tělesa v jednotlivých řezech. Hlavním problémem je, jak přiřadit jednotlivé kontury k sobě a jak je následně aproximovat sítí trojúhelníků. Obrázek 3. Sada řezů. Nevýhodou této metody, stejně jako tomu je u jiných metod surface renderingu, je, že dostaneme pouze odhad skutečného povrchu. Jelikož nemáme in- 3
formaci o tělese mezi jednotlivými konturami, tak je zde průběh povrchu pouze odhadován. K lepší aproximaci je potřeba znát další informace o tvaru tělesa. a) b) c) d) e) Obrázek 4. Ukázka odhadu skutečného povrchu pokud nemáme další informaci o tvaru tělesa mezi řezy. Této metodě se budeme podrobněji věnovat v kapitole 3. 2.2. Metoda Marching Cubes Tato metoda, jejíž princip byl prvně publikovan v roce 1987 W. Lorensenem a H. Clinem v knize Computer graphics, patří mezi nejčastěji implementované metody, hledající povrch tělesa. Autoři vytvořili tento algoritmus k nalezení izoplochy v tomografických datech a k jejímu pokrytí sítí trojúhelníků. Vstupem algoritmu je objem dat (hodnoty hustoty uspořádané v pravidelné mřížce) a konstanta pro práh. Výstupem je izoplocha ve formě sítě trojúhelníků. Hlavní myšlenka, jak samotný název tohoto algoritmu napovídá, spočívá v tom, že data, která jsou uložena v pravoúhlé prostorové mřížce (tu si můžeme představit jako kolekci krychlí naskládaných vedle sebe), postupně procházíme. Pro všechny krychle o straně h (kde h jsou rozestupy mezi jednotlivými vzorky dat) na základě hodnot funkce v krajních bodech mřížky, vygeneruje každé krychli trojúhelníky, které nejlépe aproximují zvolenou izoplochu. Vrcholy těchto trojúhelníků leží na hranách krychle. Takto získaných trojúhelníků bývá velké množství, neboť pro každou krychli mohou vzniknout až 4. Například pro zpracování tomografických dat v rozlišení 100 100 100 vzorků obdržíme řádově až 4 miliony trojúhelníků. Druhou slabinou je, že způsob triangulace povrchu se určuje pouze na základě hodnot osmi vrcholů tvořících krychli a ne globálně s ohledem na její okolí. Proto se vyskytují potenciálně nejednoznačné případy, kdy nemůžeme s jistotou říci, kudy hledaný povrch prochází. Podrobnější popis a způsob implementace této metody je popsán v bakalářské práci [3]. Později tato metoda byla upravena o možnost filtrování malých částí (šumu vzniklého v počítačovém tomografu). 2.2.1. Vylepšení metody o filtrování malých částí Výsledný obraz z výpočetního tomografu je závislý na hustotě tkáně v těle. V těle se nacházejí tkáně s podobnou hustotou, či různou hustotou na povrchu 4
a uvnitř. Z tohoto důvodu je někdy obtížné určit práh vymezující hranice jednotlivých tkání. Tento nepříjemný fakt navíc do výsledného obrazu zanáší malé části, které ve výsledném obraze tvoří šum. Zatímco určit práh vymezující hranice jednotlivých tkání je poměrně težký úkol, fitrování malých částí je o poznání snadněji řešitelné. Při řešení tohoto problému je potřeba určit, které trojúhelníky k sobě patří (tj. tvoří souvislou část tkáně) a dále podle námi zvolenéhé hodnoty odfiltrovat ty části, které jsou menší. Tento problém lze řešit průchodem mřížky ještě před samotným výpočtem trojúhelníků. Při tomto průchodu uvažujeme pouze body, které patří do tělesa, tj. mají hustotu větší než je stanovený práh. Procházíme postupně mřížku a při prvním nalezení bodu, patřícímu do zobrazované množiny, přiřadíme tomuto bodu index. Tento index postupně přiřazujeme všem jeho sousedům (ve smyslu šestisousednosti) a sousedům jeho sousedů a tak dále. Když už nemáme žádný bod, který bychom mohli přidat, zvýšíme index. Opět projdeme postupně celou mřížku a pro první neoznačený bod, který má větší hustotu než je práh, celý postup opakujeme. Když už máme označeny všechny body, spočítáme počty bodů s jednotlivými indexy. Ty body, které určují objekt menší než je zvolená hodnota, nebudou do výpočtu trojúhelníků metodou Marching Cubes zahrnovány. Výsledek tohoto vylepšení je zobrazen na obrázku 6. Pro srovnání jsou stejná data zobrazena nevylepšenou metodou Marching Cubes na obrázku 5. Obrázek 5. Výsledek bez filtrování malých částí. 5
Obrázek 6. Výsledek po odfiltrování malých částí. 6
2.3. Metoda Marching Cubes 33 Tato metoda byla představena v roce 2003 v článku [4]. Tento algoritmus byl navržen pro to, aby eliminoval nedostatky původní metody Marching Cubes. Jak bylo výše řečeno, metoda Marching Cubes nebere v úvahu globální pohled na těleso a tím mohou vznikat nejednoznačnosti. Jednou z nejednoznačností je možnost vzniku děr, která je zobrazena na obrázku 7. Obrázek 7. Díry vzniklé nejednosnačností algoritmu Marching Cubes. Dalším typem nejednoznačnosti je topologická struktura tělesa (obr. 8.). Obrázek 8. Dva různé způsoby triangulace povrchu jednoho případu. Metoda Marching Cubes 33 používá rozšířenou tabulku, kde namísto 15 různých případů jak aproximovat povrch tělesa v krychli uvažuje 32 případů. Principielně tato metoda pracuje úplně stejně jako metoda Marching Cubes, jen v nejednoznačných případech se dopočítává, který případ použije. Více podrobností o této metodě nalezneme v článku [4]. Obrázky v této subkapitole jsou převzaty z již zmiňovaného článku [4]. V rámci této práce byla tato metoda implementována a budeme se jí podrobněji věnovat v jedné z následujících kapitol. 7
Obrázek 9. Všechny možné případy triangulace povrchu. 8
2.4. Metoda Dual Contouring Tato metoda vychází z metody Marching Cubes. A byla představena v článku [8]. Tato metoda zjednodušuje pravidelnou mřížku do struktury zvané Octree mřížka (Octree je stromová struktura, která má pro každý interní uzel právě 8 potomků viz. obrázek 10.) tím, že sloučí sousedící bunky sítě, ve kterých je povrch tělesa plocha. Tato metoda vždy produkuje těleso bez děr. Má však často za následek praskliny v povrchu mezi přilehlými octree buňkami. Tato nepříjemnost se obvykle řeší pomocí nějakého záplatování. Obrázek 10. Vlevo rekurzivní dělení krychle. Vpravo odovídající octree. Zdroj [13] 2.5. Metoda Dual Marching Cubes Další modifikací metody Marching Cubes a metody Dual Contouring, která eliminuje jejich nedostatky, je metoda Dual Marching Cubes. Tuto metoda byla představena v článku [7] Scottem Schaeferem a Joe Warrenem. Metoda je založená na zarovnávání vrcholů mžížky ke dvěma implicitním funkcím. Tato metoda dává velice dobré výsledky. Narozdíl od metody Marching Cubes negeneruje takové množství trojúhelníků. Pokud sousedící trojúhelníky tvoří témeř rovinu, tak jsou nahrazeny větší plochou. Pro srovnání je přiložen obrázek 11. přejatý z článku [7], kde je zobrazeno těleso pomocí metody Marching Cubes, Dual Contouring a Dual Marching cubes. Z obrázku je patrné, že nejlepší výsledky z těchto metod dává metoda Dual Marching cubes. 2.6. Metoda Marching Tetrahedra Tato metoda byla poprvé uvedena B.A. Paynem a A.W. Togou v knize Surface Mapping Brain Function on 3D Models [6] v roce 1990. Tato metoda je jakýmsi 9
Obrázek 11. Vlevo nahoře je zobrazeno původní těleso, vpravo nahoře aproximovaný povrch získaný metodou Dual Marching Cubes, vlevo dole Marching Cubes a vpravo dole Dual Contouring. pokusem o odstranění nejednoznačností v metodě Marching Cubes. Princip spočívá v tom, že se krychle rozdělí na 5 čtyřstěnů a trojúhelníky se umísťují do nich. Toto rozdělení je možné 2 způsoby, které se musejí z důvodu zachování návaznosti trojúhelníků sítě pravidelně střídat. Vznikají 2 varianty umístění trojúhelníků viz. obr. 12. Obrázek 12. 2 varianty umístění trojúhelníků v čtyřstěnu. Pro jeden vrchol uvnitř a 3 vně vznikne jeden trojúhelník a pro 2 vrcholy uvnitř a 2 vně vzniknou 2 trojúhelníky. Problém děr byl v tomto algoritmu zcela vyřešen, ale na úkor neúměrného nárustu počtu trojúhelníků a nutnosti střídání způsobu dělení krychle (To je nutné pro zachování spojitosti povrchu). Toto dělení je zobrazeno na obrázku 13. Zlepšení návaznosti lze vylepšit dělením na 6 či 24 čtyřstěnů, ale počet trojúhelníků je pak neúnosný. Z tohoto důvodu tento algoritmus není v praxi příliš používán. 2.7. Metoda Dividing Cubes Tento algoritmus byl přestaven v roce 1988 v publikaci Two Algorithms for the Three-Dimensional Reconstruction of Tomograms [1]. Jeho autory jsou H.E. 10
Obrázek 13. 2 způsoby dělení krychle na čtyřstěny. Cline, W.E Lorensen, S.Ludke, C.R. Crawford a B.C. Teeter. Autoři řešili převážně problém pomalého vykreslování tělesa, který vzniká při rasterizaci obrovského množství malých plošek. Místo plošek se zde vykreslí pouze povrchové body s normálou, které mají takovou velikost, že se zobrazují do jednoho obrazového bodu. Touto modifikací se značně zvýší rychlost vykreslování. Díky tomu, že každý bod má svojí normálu, lze vypočítat světelné podmínky při rotaci tělesa či změně polohy světelného zdroje. Nevýhodou této metody je ztráta informace o tom, ke které ploše bod náleží, a nemožnost přiblížení tělesa. Tento algoritmus dává stejně kvalitní výsledky jako algoritmus Marching Cubes, přičemž efektivně využívá možností rastrového displeje a negeneruje nezobrazitelné detaily. Více se této metodě a její implementaci budeme věnovat v kapitole 4. 11
3. Metoda opláštění kontur Tato metoda se skládá z několika dílčích problémů, které si popíšeme a nastíníme jejich možná řešení. Jedním z nich je problém, který byl zmíněn v úvodu této práce a sice problém hledání hranic tělesa v datech. V této části se budeme zabývat problematikou výpočtu jednotlivých kontur. Nejprve uvedeme použitou terminologii. Z výpočetního tomografu získáme data ve formě série snímků. Z nich chceme vypočítat sadu řezů. Sadou řezů rozumíme množinu řezů S, přičemž každý řez se skládá z množiny kontur, které odpovídají průniku hranice tělesa a roviny řezu. Kontura je orientovaný jednoduchý uzavřený polygon c i = p 1, p 2,..., p n, kde i je index kontury v rámci řezu a p k, k = 1,..., n jsou vrcholy polygonu představující průnik tělesa a roviny řezu. Dále se předpokládá, že se kontury v rámci jednoho řezu neprotínají. Definujeme dva typy kontur: Vnější kontura a Díra, které jsou pro ilustraci znázorněny na obrázku 14. Vnější obrysy jsou orientovány proti a vnitřní ve směru hodinových ručiček. Obrázek 14. Kontura a kontura s dírou. 3.1. Výpočet řezů V následující části si popíšeme, co vše je potřeba pro výpočet řezů. Nejprve je zapotřebí vypočítat průnik tělesa s rovinou řezu, sestavit jednotlivé kontury a nastavit jim orientaci. Jednotlivé kroky si detailně rozebereme: 1. Hledání průniku tělesa s rovinou řezu K výpočtu průniku tělesa s rovinou řezu použijeme metodu Marching Squares, jejímž výstupem bude hranice tělesa. Máme danou dvourozměrnou mřížku s indexy i a j (odpovídající krokům na ose x a y) s rozestupem h. Mřížka je o rozměru m n (hodnoty i = 0,..., m 1 a j = 0,..., n 1). Označme si f ij = f(x 0 + ih, y 0 + jh) hodnoty funkce v jednotlivých bodech mřížky a f 0 hodnotu, pro kterou hledáme křivku. 12
Každému bodu mřížky přiřadíme f ij = f(x 0 +ih, y 0 +jh). Každému čtverci v mřížce spočítáme index a z tabulky hran zjistíme, na kterých hranách leží koncové body úseček. Každé úsečce interpolujeme polohu krajních bodů na základě hodnot v mřížce. Nakonec úsečku vykreslíme. Pokud se na popsaný postup zaměříme detailněji, tak něděláme ve skutečnosti nic jiného, než že pro každý vrchol čtverce určíme zda je vnitřním bodem plochy ohraničené izokřivkou f(x, y) = f 0. To určíme z podmínky f ij f 0. Je zřejmé, že je-li jeden bod vnitřním bodem (f ij f 0 ) a druhý vnějším bodem (f ij < f 0 ), pak musí křivka f = f 0 procházet někde mezi těmito body. Na obrázku 15. jsou znázorněny všechny možné konfigurace. Díky ním můžeme každému čtverci jednoznačně přiřadit index. Obrázek 15. Všechny možné konfigurace. Index čtverce můžeme vyjádřit jako číslo ve dvojkové soustavě takto: index = 2 0 A + 2 1 B + 2 2 C + 2 3 D, kde A, B, C, D jsou hodnoty 0 nebo 1, podle toho, zda body A, B, C, D jsou vnitřními nebo vnějšími body. Celkově index nabývá hodnot 0... 15 a přesně nám rozlišuje jednotlivé případy. Poté, co získáme daný index, se podíváme do tabulky úseček příslušících k danému čtverci. Odtud zjistíme, na kterých hranách leží konce úseček. Vzdálenost krajního bodu úsečky od krajních bodů mřížky by bylo možné ponechat h, ale to by nám dávalo jen hrubý výsledek. Proto je vhodnější 2 použít lineární interpolaci. D = 2 x3 C = 6 4 y2 A = 3 1 B = 3 Obrázek 16. Příklad. 13
Tuto interpolaci si ukážeme na příkladu. Mějme čtverec viz. obr. 16. Hodnoty funkce v jednotlivých bodech máme napsané u jednotlivých vrcholů. Zadanou hranicí je hodnota funkce f 0 = 4. V našem případě, když dosadíme do vzorce index = 2 0 A+2 1 B +2 2 C +2 3 D, dostaneme index = 0+0+4+0 = 4. Pokud se podíváme do tabulky úseček definovanou obrázkem 15., najdeme v ní, že krajní body úsečky leží na hranách 2 a 3. Na zálkadě lineární interpolace nyní spočítáme vzdálenost x a y od krajních bodů. Označíme si a hodnotu ve výchozím bodě a b v koncovém. Nyní hledáme funkci ve tvaru: I(u) = mu + n, I(a) = 0, I(b) = h, kde h je délka hrany čtverce. I(u) = f 0 a b a. V našem případě tedy: x = y = f 0 f(d) f(c) f(d) h = 4 2 6 2 h = h 2, f 0 f(b) f(c) f(b) h = 4 3 6 3 h = h 3. Jelikož toto číslo počítáme ze dvou koncových bodů hrany bez ohledu na to, ve kterém se nacházíme čtverci, bude výsledná křivka na společné hraně spojitá. Propojením celé mřížky dostaneme kompletní vrstevnici. Chyba oproti původní vrstevnici v principu nemůže být větší než je rozlišení h. Při použití metody Marching Squares vznikají nejednoznačnosti. Na obrázku 17. není možné rozhodnout zda použít spíše úsečky v prvním řádku, nebo ve druhém. Obrázek 17. Nejednoznačnosti Marching Squares. V rámci algoritmu se jedná naštěstí pouze o věc konvence - pokud první a druhý řádek nekombinujeme bude výsledná křivka všude plynule navazovat. Při použití případů z prvního řádku bude mít křivka tendenci tvořit nesouvislé struktury, při použití případů z druhého řádku se budou 14
tvořit souvislejší celky. 2. Sestavení kontur Vstupem této části algoritmu je množina úseček S = s 1, s 2,..., s n, ze kterých chceme sestavit kontury. Koturu sestavujeme tak, že k němu přidáváme úsečky z množiny S a zároveň je z této množiny odebíráme. Úsečku přidáváme k mnohoúhelníku, který právě vytváříme, pokud některý její krajní bod inciduje s jedním ze dvou stávajících krajních bodů polygonu. Pokud již nemůžeme k mnohoúhelníku žádné další úsečky přidat a přitom není množina S prázdná, začneme vytvářet další konturu stejným způsobem. 3. Nastavení orientace kontur Nastavení orientace kontur vyžaduje znalost hierarchie kontur v rámci řezu. Po sestavení kontur totiž nevíme, zda-li je kontura vnější nebo se jedná o díru. A X D X E F B C A B D C E F Obrázek 18. Řez a příslušná hierarchie kontur. K určení hierarchie kontur v rámci jednoho řezu vytváříme tzv. strom vnoření, který je zobrazen na obrázku 18. K vytvoření stromu je třeba určit, která kontura je vnější a která je díra. Využijeme faktu, že kontura je dírou, leží-li uvnitř jiné kontury. K tomu využijeme technika Ray-crossingu. V prvním kroku zjistíme nejlevější průsečík přímky q s konturou k. Označíme jej P k. V druhém kroku zjišťujeme počet průsečíků přímky q s konturou l nalevo od P l. Platí, že k je uvnitř l právě tehdy, když je počet průsečíků lichý (viz. obr. 19.). 15
l l k k Obrázek 19. Nalevo je počet průsečíků s l lichý, tj. k je díra, vpravo je k vnější kontura. 3.2. Rekonstrukce povrchu opláštěním kontur V další fázi algoritmu, do které vstupuje množina mnohoúhelníkových kontur, se snažíme nalézt odhad původního tvaru povrchu ve formě trojúhelníkové sítě. Ve své podstatě se jedná o interpolaci křivek plochou, která je aproximovaná sítí trojúhelníků. Tyto algoritmy, které náleží do rodiny oplašťovacích algoritmů, jsou publikovány zhruba od poloviny 70. let. Konstrukce pláště kontur není v obecném případě triviální úlohou. Při řezání objektů totiž dochází ke ztrátě informací o datech mezi řezy. Tyto informace při rekonstrukci chybějí a proto je výsledkem jen hrubá aproximace povrchu. Metody opláštění kontur lze podle použitého principu rozdělit na Objemové metody a Povrchové metody. Objemové metody vyžadují vzdálenost mezi řezy shodnou nebo alespoň porovnatelnou s hustotou vzorků v řezu. Vzorky v řezech jsou chápány jako prostorová mřížka a pro vyplnění kontur se používají standardní algoritmy na hledání izolochy (například algoritmus Marching Cubes). Čím větší je však vzdálenost mezi sousedními řezy, tím více tento přístup selhává, neboť je založen na překrývání promítnutých kontur. Povrchové metody pracují přímo s řezy a interpolují postupně dvojice sousedních korespondujících kontur pásy trojúhelníků. Vzájemné přiřazení kontur je klíčovým problémem, na kterém závisí výsledná rekonstrukce povrchu. Pro zjištění, zda jsou dvě kontury sousední (patří stejnému objektu) neexituje jednoznačný postup. K řešení je potřeba mít další informace o struktuře vzorkovaného objektu. Jiný postup volíme v případě, kdy rekonstruujeme několik kulovitých útvarů a jiný postup při rekonstrukci objektu stromové struktury. Pro úplnost uveďme několik heuristických postupů: - Plocha překrytí kontur. Nejjednodušší a současně nejpoužívanější heuristikou je dostatečná velikost plochy překrytí kontur v sousedních řezech. Překrytí je definováno jako velikost oblasti průniku kolmé projekce kontur. Poměr velikosti plochy překrytí k ploše větší z kontur, případně ploše vzniklé jejím sjednocením porovnáváme se zadanou konstantou. Tento postup je použitelný pouze pro jednoduché tvary objektů při dostatečně malé vzdálenosti řezů. Pokud zpracovávaná data nejsou dostatečně hustá pro 16
překrytí obrysů stejného objektu v sousedních řezech, pak tyto metody vytvářejí více objektů. Velikosti překrytí lze hrubě odhadnout plochou průniku obdélníkových obálek (bounding boxes), nicméně s rostoucí členitostí a protáhlostí je odhad stále nepřesnější. Mnohem přesnější je rasterizovat kontury do dvou bitových map a po vyplnění zjistit velikost průniku logickou operací AND jako počet společných pixelů. Obr. 20. Obrázek 20. Kritérium překrytí kontur. - Zobecněné válce. Pokud má těleso stromovou strukturu kruhového či oválného průřezu, pak tyto data nejsou vhodná pro použití překrývajícího kritéria. Využívá se tedy metody zobecněných válců, která používá globálnější pohled na datovou množinu. Tuto metodu navrh Soroka v roce 1981. Válce tvoří řezy ve tvaru elips, jejichž středy leží přibližně na přímce (odchylují se o méně než je zadaná chyba). K popisu jednotlivých elips nám pak stačí pouze úhel natočení hlavní poloosy, souřadnice středu a délky poloos (obr. 21.). Obrázek 21. Zobecněné válce. Podobnou metodu navrh Mayers v roce 1992. Jeho metoda pracovala ve třech krocích. V prvním se z elips sestavily válcové úseky, ty se ve druhém kroku pospojovaly do objektů. Ve třetí jsou nalezena větvení. Snahou této 17
metody je sestavit co nejdelší válcové úseky. Uvedený postup je vhodný k rekonstrukci dlouhých vláknitých či větvících se struktur bez cyklů. Slabým místem metody je první krok, při kterém může dojít ke spojení vzdálených vzájemně posunutých elips a k následnému šíření chyby. - Strom minimálního pokrytí v grafu kontur. Tato metoda oproti předcházející pracuje globálněji. Vznikla, aby se předcházelo propagacím chyb vzniklých v prvním kroku algoritmu Zobecněných válců. V první fázi se setaví graf možných spojnic kontur tak, aby každé kontuře odpovídal jeden uzel a každé možné spojnici (spojnice je každá možná dvojice kontur v sousednich řezech) jedna hrana. Tyto hrany jsou pak ohodnoceny podle vzdálenosti kontur. V tomto grafu potom hledáme strom minimálního pokrytí. Tento strom se pak rozdělí na větvící se a nevětvící se úseky. Na obrázku 22. je znázorněno správné a chybné propojení kontur. Obrázek 22. Správné a chybné propojení kontur. Tato metoda dává pro větvení lepší výsledky než metody dříve uvedené a nedochází zde k šíření lokálních chyb. Stejně jako přechozí metoda však špatně hledá objekty s cykly. Může tedy vytvářet chybné hrany, které propojí oddělené objekty, které jsou blízko sebe. Nyní, když už máme vzájemně přiřazené kontury, se dostáváme k poslednímu problému, jako je nalezení meziřezového propojení, tj. vytvořit trojúhelníkovou síť z jejich bodů. 18
Propojení kontur Tento problém můžeme chápat jako problém interpolování množiny rovinných křivek plochou. Požadavkem je najít síť trojúhelníků, takovou, že trojúhleníky pokrývají celou plochu a vzájemně se nepřekrývají. Dva hlavní problémy jsou větvení a spojování kontur. Tyto dva problémy jsou vzájemně symetrické (stačí jen zaměnit pořadí řezů). Některé z uvedených metod umí spojovat pouze kontury ve vztahu 1:1 a triangulovat víko. Složitější algoritmy pak dovedou i interpolovat jednoduché i vícenásobné větvení (1 : 2 popřípadě 1 : n) nebo dokonce obecné větvení (m : n). Jednou z možných metod je tzv. Toroidní graf. V roce 1975 Keppel v [2] tuto úlohu formuloval jako úlohu, která využívá teorie grafů, tj. na problém hledání cyklu s minimální cenou v toroidním grafu. Množina uzlů odpovídá všem možným úsečkám propojující vrcholy sousedních kontur. Hrany pak představují trojúhelníky, které vzniknou ze dvojice úseček se společným vrcholem. Aby byla dodržena podmínka vzájemně se nepřekrývajících trojúhelníků, bereme v úvahu pouze vodorovné a svislé hrany. Úlohu můžeme zjednodušit, pokud nalezneme počáteční nejlepší spojnici. Cesta pak v této spojnici začíná a končí. Metody využívající grafové algoritmy nám dávají optimální výsledek, ale jsou výpočetně náročné pro kontury s mnoha vrcholy. Časová složitost těchto metod je O(n 2 ). Častěji se tedy využívají heuristické algoritmy, které nezkoumají celý obvod kontury, ale pouze definují kritéria, která musí splňovat nově přidaný trojúhelník. Možná kritéria mohou být definována jen pro jeden trojúhelník (lokální metriky), nebo definována globálně. Častěji se využínají lokální metriky. - Minimální povrch je nejjednodušší kritérium, protože se dá snadno určit (je to objem trojúhelníku). Nehodí se však pro případy, kdy jsou kontury vůči sobě vzájemně posunuty (obr. 23.). Obrázek 23. Chybné spojení kontur. - Směr přiřazení je kritérium preferující ty spojnice, jejichž směr se moc 19
neliší od směru spojnice těžišť kontur. Zde nastává problém v případě zavinutých kontur. - Maximální objem. Objemem rozumíme objem klínu, který tvoří trojúhelníková záplata a spojnice těžišť kontur (obr. 24.). U konkávních částí kontur se snažíme tento objem minimalizovat. Obrázek 24. Maximální objem. - Minimální délka spoje. Toto kritérium bere v úvahu délku úsečky, která spojuje sousední kontury. Mezi globální metriky patří například Ohodnocení mírou zásluh. Jednotlivé trojúhelníky na začátku ohodnotíme tak, že zásluha je rovna převrácené hodnotě délky. V další fázi dolaďujeme zásluhy sousedních trojúhelníků. Postupně odstraňujeme trojúhelníky, jejichž zásluha je nulová. Obecně nelze říci, které kritérium je nejlepší, protože pro každé kritérium lze najít případ, kdy toto kritérium selhává. 20
4. Dividing Cubes 4.1. Princip algoritmu Dividing Cubes Načteme objemová data a prahovou konstantu, pro kterou hledáme povrch. Do paměti načteme čtyři sousedící řezy. Vytvoříme krychli, kterou definujeme 8 body dvou sousedících řezů. Ve všech osmi vrcholech vypočítáme vektor gradientu - jednotlivé složky vypočítáme jako rozdíl mezi předchozím a následujícím sousedem ve směru každé osy. Ohodnotíme každou krychli. Krychle je: Vnitřní - pokud intenzita všech vrcholů je menší než prahová konstanta Vnější - pokud intenzita všech vrcholů je větší než prahová konstanta jinak protínají povrch hledaného obrazu Rozdělíme všechny krychle na a b c subkrychlí, které jsou velké jako zobrazované body. Denzitu každého vrcholu vypočítáme lineární interpolací. Procházíme jednotlivé subkrychle a hledáme ty, které leží na hranici tělesa (některé vrcholy leží uvnitř a některé vně). Interpolujeme vektor gradientu těchto krychlí. Vypočítáme intenzitu světla každého povrchového bodu, projekcí normálového vektoru podél směru pohledu. Pro účely této práce byl algoritmus mírně poupraven. Hlavní myšlenka této úpravy spočívala v tom, že pokud krychle je celá vně nebo celá uvnitř, tak lineární interpolací nezískáme subkrychli, která by byla na hranici tělesa. Pro takovéto krychle je zbytečné počítat gradienty a subkrychle. Díky tomuto drobnému vylepšení dochází k značnému urychlení výpočtu při zobrazování objemových dat. Velikost tohoto zrychlení závisí na povaze zobrazovaných dat. Hlavním problémem této metody je zvolení počtu subkrychlí. Z výpočetního tomografu nezískáváme data v pravidelné krychlové mřížce a je tedy potřeba vypočítat poměr počtu subkrychlí v jednotlivých směrech. Z parametrů výpočetního tomografu získáme vzdálenosti mezi řezy a mezi jednotlivýmu vzorky v rámci jednoho řezu. V naší implementaci metody Dividing Cubes jsou tato data uložena v ini souboru. Víme tedy poměry jednotlivých 21
vzdáleností. Zvolíme počet subkrychlí pro jednu vzdálenost a pro ostatní dvě dopočítáme pomocí tohoto poměru. Následující obrázky ukazují některé výsledky v závislosti na počtu subkrychlí: 1 1 2 2 2 4 5 5 10 8 8 16 Vykreslení této metody je sice rychlejší, než je tomu u algoritmu Marching Cubes, ale výpočet bodů narůstá s počtem subkrychlí. Kromě vysoké paměťové náročnosti, jak již bylo řečeno, není zde možnost přiblížení tělesa. Přiblížením by 22
vznikaly mezery mezi body a těleso by nebylo celistvé. Rovněž jako metodu Marching Cubes lze i tuto metodu obohatit o vylepšení, při kterém jsou filtrovány malé části, jak bylo popsáno a implementováno v metodě Marching Cubes. 23
5. Marching Cubes 33 Jak již bylo řečeno, tato metoda byla navržena tak, aby eliminovala jeden z nedostatků metody Marching Cubes a sice ten, že tato metoda nebere v úvahu topologickou strukturu tělesa. Jednoduchý algoritmus může vést k tomu, že modelované těleso může obsahovat díry (jak je vidět na obrázku 7.). Stejná konfigurace může být aproximována různými způsoby a jednoduchá 256 vstupová look up tabulka metody Marching Cubes nedokáže rozhodovat mezi způsoby. K tomu potřebujeme zavést pojem korektní topologie a pozitivní vrchol. Vrchol nazýváme pozitivní, pokud leží uvnitř zobrazovaného tělesa. Vrchol, který je vně nazýváme negativní vrchol. Řekneme, že výsledná síť je korektní, pokud je homeomorfní s F 1 (α), kde F je stejná jako f v každém vrcholu a v každé krychli nezmění znaménko více jak jednou. Pokud je tato podmínka splněna, pak se vyvarujeme dírám. Pokud aplikujeme stejný test na přilehlé krychle, tak nám to zajistí plynulý přechod mezi jednotlivými krychlemi. Obrázek 25. Označení vrcholů. K vyřešení nejednoznačností na stěně krychle (zda jsou dva pozitivní vrcholy A 0, C 0 na úhlopříčce spojeny skrz stěnu, nebo, zda jsou spojeny mimo stěnu) se používá tzv. face test. Jednotlivé stěny krychle nazýváme face. Jednotlivé face si označíme, jak ukazuje obrázek 26.. Obrázek 26. Označení face. Face test pro stěnu face (číslo stěny) s hodnotami vrcholů A, B, C, D pak může vypadat například takto: 24
Face test input : A, B, C, D, face output: true or false begin if (abs( A C B D ) < ε) then return face >= 0 return face A (A C B D) >= 0 end Vyřešením těchto nejednoznačností sice předejdeme vzniku děr, nicméně nám to nezaručuje správnou topologii, jak ukazuje obrázek 8. Musíme totiž vyřešit i vnitřní nejednoznačnosti. Vnitřní dvojznačnost nastává, když dva úhlopříčně protilehlé vrcholy A 0 a C 1, patří do vykreslované oblasti. Tyto vrcholy totiž můžeme buď spojit vnitřkem krychle, vytvořením jakéhosi tunelu, nebo je propojovat vnitřkem nebudeme. Nejprve vyřešíme face nejednoznačnost. Pokud existuje řetěz vrcholů patřících do tělesa (pojmenujme si je pozitivní vrcholy), spojující tyto dva vrcholy, které jsou propojeny buď hranami, nebo skrz pozitivní stěnu (face test vrátí hodnotu true), pak zde není vnitřní nejednoznačnost. Jinak musíme vyřešit, zda jsou tyto vrcholy propojeny pouze skrz krychli. Předpokládejme, že jsou propojeny přez vnitřek krychle. Jelikož zde platí trilinearita, pak funkce F nemůže změnit znaménko víckrát než jednou v jednom segmentu. Musí tedy existovat rovina, která je rovnoběžná s jednou ze stěn P = (A t, B t, C t, D t ), kde A t leží na stejné hraně jako A 0 a C t leží na stejné hraně jako C 1, a jsou zde tyto vrcholy propojeny skrze tuto rovinu. V následující tabulce 1. je popsáno, pro které případy je zapotřebí dělat testy. Rovněž je zde uvedeno jaké typy testů jsou nutné k určení případu, kterým bude krychle aproximována. Tyto případy nalezneme v již zmiňované tabulce případů 9. Více znamének ve sloupci znamená nutnost testovat více face krychle. Pro zajímavost je v tabulce uveden i počet trojúhelníků, který je potřeba k triangulaci povrchu. Při implementaci této metody byla rozšířená tabulka převzata z již představeného článku [4]. Tato metoda sice vyřešila nejednoznačnosti, které vznikají při použití zjednodušené look up tabulky, ale problém s tím, že metoda Marching Cubes generuje mnoho trojúhelníků, se zde ještě zvětšuje. Pro každou krychli může v případě 13 vzniknout až 12 trojúhelníků, což je 3x více než je tomu v jednoduché metodě Marching Cubes. 25
Tabulka 1. Testy jednotlivých případů Případ Face test Vnitřní test Výsledný podpřípad Počet trojúhelníků 0 0 1 1 2 2 3-3.1 2 + 3.2 4 4-4.1 2 + 4.2 6 5 3 6 - - 6.1.1 3 - + 6.1.2 7 + 6.2 5 7 - - - 7.1 3 + - - 7.2 5 - + - 7.2 5 - - + 7.2 5 + + - 7.3 9 + - + 7.3 9 - + + 7.3 9 + + + + 7.4.1 9 + + + - 7.4.2 9 8 2 9 4 10 + + 10.1.1 4 - - - 10.1.1 4 - - + 10.1.2 8 - + 10.2 8 + - 10.2 8 11 4 12 + + 12.1.1 4 - - - 12.1.1 4 - - + 12.1.2 8 + - 12.2 8 - + 12.2 8 13 45 podpřípadů, testuje se všech 6 face a případně i vnitřek 14 4 26
6. Algoritmy pro přímé zobrazování objemu V předchozí kapitole byl popsán jeden ze dvou způsobů renderingu- Surface rendering. Druhým typem zobrazování je Volume rendering (objemový rendering), kde zobrazujeme celá data bez výpočtu povrchu tělesa. Nemusíme tedy předem vědět, zda vzorek patří nebo nepatří k zobrazovanému objektu. Metody na bázi Volume renderingu můžeme rozšířit o možnost zobrazování poloprůhledných materiálů a struktur uvnitř jiných. Cílem této části je ukázat metody zobrazující trojrozměrná data objemovými metodami (Volume rendering). Jednou z nejznámějších metod je tzv. Ray casting neboli metoda vrhání paprsku. Zobrazování dat touto metodou lze dále členit na: metody pracující s daty bez hledání povrchu, metody hledající povrch, které nezjišťují normály, metody hledající povrch a jeho normály. Budeme brát v úvahu data v trojrozměrné mřížce. Písmenem I i si označíme hodnotu intenzity i-tého vzorku podél paprsku. Písmenem J označíme množinu započítaných vzorků (vzorků zasažených paprskem, případně vyhovují nějakému dalšímu kritériu) viz. 27. Obrázek 27. Označení. 6.1. Metody nehledající povrch Tyto metody tím, že nehledají povrch a nevyžadují žádné předzpracování, jsou rychlé a proto se hodí zejména pro vytváření náhledu. 27
Jednou z těchto metod je Maximum intensity projection. Tato metoda zobrazuje pouze nejjasnější struktury podél paprsku. Pro každý bod se vypočítává hodnota I pomocí vzorce: I = max i J I i. Obrázek 28. Výstup z programu Volume - maximum intensity projection. Jinou metodou je Summed intensity projection. Tato metoda počítá jas jako součet jasů podél paprsku pomocí vzorce: I = i J I i. Obrázek 29. Výstup z programu Volume - summed intensity projection. Obdobou toho je Average intensity projection, kde se navíc jas průměruje dle vzorce: I = i J I i J. 28
Obrázek 30. Výstup z programu Volume - average intensity projection. 29
6.2. Metody s jednoduchým zobrazením povrchu Tyto metody vyžadují znalost hraniční hustoty tělesa, které chceme zobrazit. Prvnímu pixelu na dráze paprsku, který patří do tělesa, přiřadíme hodnotu jasu podle hloubky (vzdálenosti od plochy procházející okrajem snímků). Obrázek 31. Výstup z programu Volume - zobrazní povrchu bez výpočtu normál. Takto zobrazený povrch ale nevypadá příliš objemově. Potlačuje šum vzorkování a s ním i hrany a nespojitosti. Ještě jednodušší metodou je zobrazit první pixel na dráze paprsku s jeho hodnotou. Tato metoda nezobrazuje tvar, ale pouze barvu povrchu objektu. Obrázek 32. Výstup z programu Volume - zobrazní povrchu bez výpočtu normál II. 30
6.3. Metody zobrazující povrch s normálou Těmito metodami získáme kvalitnější zobrazení objektu, díky tomu, že se snažíme odhadnout orientaci povrchu v místě dopadu paprsku. Zmíníme tři nejznámější metody pro odhad normál. První metodou je Z-buffer gradient shadding. Normálu aproximuje vektorem, jehož kolmým průmětem do plochy obrazovky je vektor gradientu v paměti hloubky. Složky normály vypočítáme: n 0 = Z(p x + 1, p y ) Z(p x 1, p y ), n 1 = Z(p x, p y + 1) Z(p x, p y 1), n 2 = 1, kde [p x, p y ] jsou souřadnice pixelu, pro který počítáme normálu. Na konci je potřeba takto vypočítaný vektor normovat. Tato metoda zachycuje tvar tělesa, ale na zaoblených površích jsou vidět vrstevnice (obrázek 33.). Obrázek 33. Výstup z programu Volume - Z-buffer gradient shadding. Další metodou je metoda Voxel gradient shading, která odhaduje oproti předešlé metodě normálu podle gradientu v binárním objemu vzorků. Složky gradientu nabývají hodnot { 1, 0, 1} a složky výsledné normály nabývají jednu z 27 hodnot. Složky gradientu spočítáme dle následujících vzorců: n 0 = b(p x + 1, p y, p z ) b(p x 1, p y, p z ), n 1 = b(p x, p y + 1, p z ) b(p x, p y 1, p z ), n 2 = b(p x, p y, p z + 1) b(p x, p y, p z 1), kde [p x, p y, p z ] jsou souřadnice pixelu a hodnota b(p x, p y, p z ) nabývající 1 nebo 31
0 představuje funkci příslušnosti pixelu k povrchu. Stejně jako v předešlé metodě se i zde objevují vrstevnice (obrázek 34.). Obrázek 34. Výstup z programu Volume - Voxel gradient shading. Třetí metoda, kterou si představíme, je metoda Gray-level gradient shading, která předpokládá, že na povrchu dochází k největší změně hodnot vzorků, tj. opět počítáme s tím, že normála bude ve směru gradientu, ale budeme zde narozdíl od předchozí metody počítat s původními hodnotami. Složky normály tedy vypočítáme: n 0 = f(p x + 1, p y, p z ) f(p x 1, p y, p z ), n 1 = f(p x, p y + 1, p z ) f(p x, p y 1, p z ), n 2 = f(p x, p y, p z + 1) f(p x, p y, p z 1). Obrázek 35. Výstup z programu Volume - Gray-level gradient shading. 32
6.4. Metody uvažující integraci světla na dráze paprsku Metody na tomto principu kombinují vrhání paprsku s osvětlením objemových dat. Barvu pixelu ovlivňuje osvětlení elementů, které jsou na dráze paprsku k tomuto bodu. Jedním z představitelů těchto metod a jedinou metodou, kterou si zde představíme je Levoyova metoda. Tato metoda chápe objem jako pole voxelů a pracuje ve dvou krocích. Voxel si označíme X = [x, y, z]. V prvním kroku vypočítáváme barvu C(X) a průhlednost α(x) jednotlivých voxelů. Barvu určujeme je podle Phongova osvětlovacího modelu. Průhlednost se určí klasifikací, tj. hledáme-li povrch s hustotou h, pak pixelům s h(x, y, z) = h přiřadíme neprůhlednost 1 a ostatním 0. Pro odstranění šumu, můžeme pixelům s hodnotou blízkou hledané hustoty přiřadit neprůhlednost blízkou 1 (v závislosti na velikosti odchylek hustot). Dále se v této medodě využívá toho, že člověk vnímá obrysy a hrany intenzivněji než pozvolné přechody. Proto chceme zdůraznit rozhraní mezi objekty a potlačit vliv vnitřních voxelů. Toho lze dosáhnout vynásobením výsledné neprůhlednosti velikostí vektoru gradientu α (X) = h(x) α(x). Ve druhém kroku vytváříme z C(X) a α(x) výsledný dvojrozměrný obraz. Pro každý pixel je do objemu vyslán paprsek. Ten prochází pole C(X) a α(x) a akumuluje hodnoty jasu dle vzorce C out = C in (1 α(x)) + C(X)α(X). Paprsek vstupuje do objemu s intenzitou C in a je částečně utlumen průchodem. Barevnou složku každého pixelu tedy vypočítáme: C(R) = k i=0 {C i(r)α i (R) k j=i+1 (1 α j(r))} 33
7. A Simple and Flexible Volume Rendering Framework for Graphics-Hardwarebased Raycasting Jak bylo v vředchozích kapitolách uvedeno, tak exituje mnoho metod sloužících k zobrazení prostorových dat. Jedním z cílů této práce je tyto metody srovnat. K tomuto srovnání využijeme software Single Pass Volume Raycasting Demo od autorů Simona Stegmaiera, Magnuse Strengerta a Thomase Kleina, kteří efektivně implementovali 10 nejzajímavějších zobrazovacích metod za pomocí knihovny OpenGL. Celý program je navržen s plnou podporou pro nejnovější grafické karty a díky tomu je samotné zobrazování velice rychlé a efektivní. Základním stavebním kamenem aplikace Single Pass Volume Raycasting Demo je framework od stejných autorů, který je možné v podobě knihovny zahrnout do jakékoliv aplikace v jazycích C a C++. Metody, které byly do programu vybrány byly zvoleny tak, aby ukázaly variabilitu a snadnost použití tohoto frameworku. Podrobnější informace o implementaci najdeme v článku [9], který byl publikován v roce 2005. Všechny shadery v Simple and Flexible Volume Rendering Frameworku využívají raycastingu, který používá opakování funkce. Díky tomu se vykreslování provede v jediném průchodu, což má vliv předevsím na rychlost a kvalitu, která dosahuje výborných výsledků. V této kapitole podrobněji popíšeme některé implementované metody a rovněž představíme samotný program. Jednoduchou modifikací základního přímého volume renderingu je maximum intensity projection. Tato metoda byla již popsána v předešlé kapitole. Výstup této metody v aplikaci Single Pass Volume Raycasting Demo je vidět na obrázku 36. Autoři do výběru rovněž zahrnuli nejsnadněji implementovatelnou metodu zobrazující izoplochu a sice metodu využívající hledání změny diference na dráze paprsku. Na následující obrázku 37. je výstup z programu, kde je izoplocha znázorněna poloprůhlednou barvou. Přístup přímého volume renderingu a metod, které pracují s izoplochou můžeme kombinovat. Hledané těleso je pak můžné zobrazovat jako izoplochu a její okolí jako poloprůhledný objem. Tato kombinace je znázorněna na obrázku 38. U metod zobrazující data jako izoplochu je důležité vypočítávání odrazu světla od povrchu. Jedním ze základních metod je self-shadowing znázorněný na obrázku 39. Stejná technika byla použita k implementaci image-based lightening. Použili zde metodu sphere mappingu, která je založená na tom, že těleso zobrazuje jako vysoce odrazivý materiál. Těleso je zobrazeno jako zrcadlová plocha. Výsledek je možno vidět na obrázku 40. Dalším zde implementovaným rozšířením volume renderingu je metoda volume clipping. Zde byla implementovaná tak, že v každém bodě vzorku se rozho- 34
Obrázek 36. Maximum intensity projection. Obrázek 37. Transparent isosurface. duje, zda leží uvnitř, nebo vně clipping geometrie. Tato geometrije je definovaná jako povrch vzdáleného pole generovaného z polygonální sítě. Detailní informace o této metodě lze najít v [12]. V Single Pass Volume Raycasting Demo bylo pole zvoleno ve tvaru válce se středovou osou procházející tělesem. Na obrázku 41. je zřetelně vidět, že uvnitř lebky je díra ve tvaru válce. Žádná z již zmíněných metod neuspěla v modelování nepřímého útlumu světla. Proto se autoři rozhodli implementovat ve frameworku metodu Transluency shader. Tato metoda pracuje tak, že zmenšuje intenzitu světla na základě vzdálenosti, 35
Obrázek 38. Kombinace přímého zobrazení povrchu a izoplochy. Obrázek 39. Isosurface. kterou musel paprsek urazit než prošel objemem k hledanému povrchu. Třída těchto metod je již popsána v subkapitole Metody uvažující integraci světla na dráze paprsku. Na obrázku 42. je vidět výstup této metody. Dalším možným přístupem k zobrazování dat, který je zcela odlišný od již zmiňovaných metod, je refrakce. Tato metoda je v porovnání s ostatními uvedenými metodami mnohem obtížnější na výpočt, na druhou stranu je implementace je poměrně přímočará. Výsledek je vidět na obrázku 43. 36
Obrázek 40. Sphere mapping. 7.1. Ovládání programu Obrázek 41. Clipped volume rendering. Program se spouští pomocí konzolového programu runme.exe. V zobrazeném konzolém okně vidíme postup při výpočtu. Po dokončení výpočtů se v novém okně zobrazí data. Pomocí pohybu myši lze tělěsem otáčet, při stisku pravého tlačítka a pohybu myšli zmenšovat či zvětšovat velikost zobrazení. Další nastavení lze provádět pomocí klávesnice. My si představíme jen nejzákladnějí klávesové zkratky pro ovládání programu. 37
Obrázek 42. Metody uvažující integraci světla na dráze paprsku. Obrázek 43. Refraction. 38
klávesová zkratka funkcionalita ESC, q ukončení programu F1 - F10 přepínání mezi metodami zobrazení mezerník animace zobrazení w zobrazení hranice dat < / > zmenšení / zvětšení vzdálenosti vzorků { / } zesvetlení / ztmavení pozadí m / j zmenšení / zvětšení hraniční hodnoty zobrazovaného povrchu. /, zmenšení / zvětšení absorbce světla l zobrazení směru světelného paprsku Ctrl + myš změna pozice světla Více o tomto programu naleznete na adrese [11]. 39
8. Porovnání metod pro zobrazení trojrozměrných dat V předchozích kapitolách bylo představeno několik metod, které se používájí ke zpracování trojrozměrných dat. V našem případě budeme porovnávat tyto metody z hlediska vhodnosti zobrazení dat získaných z výpočetního tomografu. Tyto metody dělíme do dvou základních skupin. Jednou z těchto skupin je skupina algoritmů, které přímo zobrazují objem. Tomuto přístupu se souhrnně říká Volume rendering. Tyto metody se dále člení na metody, které pracují s daty, aniž by hledaly povrch zobrazovaného tělesa. Jako zástupci byly uvedeny metody Maximum intensity projection, Summed intensity projection a Average intensity projection. Z hlediska zobrazení dat získaných z počítačového tomografu mají tyto metody spíše informativní charakter. Jsou snadno implementovatelné, ale v našem případě ne moc vhodné. Další skupinou jsou metody, které sice hledají povrch, ale nezjišťují normály. Zobrazovaná tělesa pak nevypadají prostorově. Proto v našem případě nejsou příliš vhodné. Z hlediska vhodnosti použití na data získaná z výpočetního tomografu jsou metody, které zobrazují povrch a navíc k němu hledají normály, nejvhodnější. Jako zástupce této skupiny metod byly v této práci uvedeny metody Z-buffer gradient shadding, Gray-level gradient shading, Sphere mapping a Clipped volume rednering. Každá tato metoda hledá normály na povrchu tělesa odlišně, ale nedá se říci, která z nich by dávala nejlepší výsledky, protože všechny metody produkují kvalitativně srovnatelné výsledky. Poslední zde představenou skupinou jsou algoritmy, které uvažují integraci světla na dráze paprsku. Jako zástupce zde byla uvedena Levoyova metoda. Celkově metody pracující přímo s objemem, obzvláště poslední dvě zmíněné skupiny těchto metod, dávají velice dobré výsledky. Hlavní výhodou je, že tyto metody mohou být implementovány velice efektivně a může být k vykreslování použita přímo grafická karta, čímž se vykreslování výrazně zrychlí. Velkou nevýhodou těchto metod je ale, že pracují s celým objemem a tím pádem mají velké nároky na paměť. Druhou skupinou metod zpracovávajících trojrozměrná data jsou metody, které z dat počítají geometrickou reprezentaci povrchu. Tyto metody nepracují přímo s daty, ale snaží se je aproximovat sítí trojúhelníků, nebo body, a až pak data zobrazují. Zde představené metody se dále dělí na metody objemové a povrchové. Objemové metody chápou vzorky jako prostorovou mřížku. Tyto metody vyžadují vzdálenost mezi řezy shodnou nebo alespoň porovnatelnou s hustotou vzorku v řezu. Zástupci této metody jsou metody z rodiny Marching Cubes a metoda Dividing Cubes. Nejznámější metoda Marching Cubes pracuje na poměrně jednoduchém principu a proto je nejčastěji implementována. Tato metoda má dva hlavní problémy. Jedním je, že generuje mnoho trojúhelníků a tím neúměrně zatěžuje paměť. Tento neduh je řešen v metodě Dividing Cubes. Zde se nepočítají trojúhelníky, ale metoda počítá a zobrazuje pouze body a tím negeneruje nezobrazitelné detaily. Tato metoda však není vhodná k zobrazování dat získa- 40
ných z výpočetního tomografu, protože zde chybí možnost zoomování. Druhým nedostatkem metody Marching Cubes je, že nebere v úvahu topologii tělesa. To má za následek, že těleso nemusí být souvislé (mohou se v něm objevit díry) a někdy spojuje tělesa, která jsou blízko sebe. Prvním pokusem o vyřešení těchto nedostatků vznikla metoda Marching Tetrahedra. Tato metoda je však složitější na implementaci a generuje mnohonásobně více trojúhelníků. Z tohoto důvodu se v praxi tato metoda neujala. Mezi nezdařilejší úpravy metody určitě patří metoda Marching Cubes 33. Tato metoda bere v úvahu topologii tělesa a místo 15 případů, kterými metoda Marching Cubes aproximuje krychle, má takových případů 32. Výsledky této metody jsou velice dobré, avšak ani tato metoda neřeší množství generovaných trojúhelníků. O co hůř, tato metoda jich generuje ještě víc. Například pro data zápěstí metodou Marching Cubes získáme 207 714 trojúhelníků. Metodou Marching Cubes 33 získáme trojúhelníků o více jak 1 000 více (208 836). Další představená metoda Dual Contouring, narozdíl od dříve zmíněných vylepšení metody Marching Cubes, řeší problém množství generovaných trojúhelníků. Tato metoda slučuje trojúhelníky, které tvoří rovinu do jedné struktury. Bohužel tato metoda není úspěšná, co do správného aproximování povrchu tělesa. Sloučením této metody a metody Marching Cubes vznikla nová a jednoznačně nejlepší metoda metoda Dual Marching Cubes. Tato metoda nejen, že zachovává správnou topologii tělesa, tak také generuje méně trojúhelníků. Zcela jiný pohled na hledání povrchu má metoda Opláštění kontur. Ta patří do rodiny algoritmů povrchových. Tyto metody jsou hlavně vhodné pro aproximování dat, která mají větší rozestup mezi vzorky. Což není případ výpočetního tomografu, takže spíše než výhody této metody se zde projevují její nevýhody a těmi jsou množství různých přístupů pro aproximování dat. Jiné přístupy jsou vhodnější pro data válcového tvaru a jiné pro data s množstvím kulových útvarů. Proto tato metoda není moc vhodná pro data získaná z výpočetního tomografu, kde se v jednom vzorku dat můžou vyskytovat jak data válcového tvaru, tak data kulového. Přístupy zobrazování dat jak volume renderingem, tak surface renderingem se mohou i kombinovat. Tato kombinace je obzvláště výhodná v případě, kdy chceme zobrazit kost (použijeme surface rendering) a také zajímá-li nás poloha ostatních tkání vůči této kosti. K tomu je vhodné použít volume rendering obzvláště poloprůhledný. 41
9. Závěr Tato diplomová práce navazuje na bakalářskou práci [3], která se týkala metody Marching Cubes a její implementace. Hlavním cílem této práce bylo porovnat metodu Marching Cubes s jinými metodami, které se používají k zobrazování trojrozměrných dat, a nalézt nejvhodnější metodu k zobrazování dat získaných z výpočetního tomografu. Byly zde představeny dva základní principy zobrazování dat. Volume a Suface rendering. Z hlediska paměťové náročnosti jsou vhodnější metody surface renderingu, které nezobrazují celá data, ale vypočítávají povrch zobrazovaného tělesa a ten pak zobrazují. Mezi nimi je jednoznačně nejvhodnější metoda Dual Marching Cubes. Co se týče rychlosti jsou však vhodnější metody Volume renderingu, které můžeme vykreslovat přímo pomocí grafické karty. Součástí této práce je i software Vizualizace dat, který implementuje některé v této práci popsané metody. Tento program byl navržen s cílem předvést tyto metody, ale je možné ho použít jako koncovou aplikaci pro zobrazení dat z CT. 42
10. Conclusion This MSc. thesis builds on bachelor thesis [3], which presents the Marching Cubes method and its implementation. The main goal of this thesis was compare the Marching Cubes method with other methods, which could be used to display three-dimensional data, and find the most suitable method for displaying data obtained from the computer tomograph. There were presented two basic principles of imaging data. Volume rendering and Suface rendering. In terms of memory consumption is preferable surface rendering methods that do not display all the data, but calculated body surface of the display will then appear. Among them is clearly the preferred method Dual Marching Cubes. As far as rates are more appropriate methods of volume rendering, which can draw directly from the graphics card. Part of this work is software Vizualizace dat, which implements some methods, which are described in this thesis. This program was designed to demonstrate this methods, but it can be used as an application for displaying data from CT. 43
Reference [1] Cline H. E., Lorensen W. E., Ludke S., Crawford C. R., Teeter B. C.: Two algorithms for the three-dimensional reconstruction of tomograms., Medical Physics, May 1988. [2] Keppel E.: Approximating complex surfaces by triangulation of contour lines., IBM Journal of Research and Development, 1975. [3] Krmelová M.: Rekonstrukce 3D obrazu z počítačového tomografu., Bakalářská práce, 2009. [4] Lewiner T., Lopes H., Vieira A. W., Tavares G.: Efficient implementation of Marching Cubes cases with topological guarantees., Journal of Graphics Tools, 2003. [5] Levoy M.: Efficient Ray Tracing of Volume Data., University of North Carolina. [6] Payne B.A., Toga A.W.: Surface mapping brain function on 3D models., Computer Graphics and Applications, IEEE, 1990. [7] Schaefer S., Warren J.: Dual Marching Cubes: Primal Contouring of Dual Grids., Rice University. [8] Schaefer S., Warren J., Ju T.: Manifold Dual Contouring., Rice University. [9] Stegmaier S., Strengert M., Klein T., Ertl T.: A Simple and Flexible Volume Rendering Framework for Graphics-Hardware based Raycasting., Volume Graphics, 2005. [10] Sviták R. : Rekonstrukce povrchu objektů z řezů., Diplomová práce, Plzeň, 2001. [11] Volume Raycasting http://cumbia.informatik.unistuttgart.de/ger/research/fields/current/spvolren/ [12] Weiskopf D., Engel T., Ertl T.: Volume Clipping via Per-Fragment Operations in Texture-Based Volume Visualization., Procceedings of IEEE Visualization, 2002. [13] Wikipedie. http://cs.wikipedia.org [14] Žára J., Sochor J., Felkel P.: Moderní počítačová grafika., Computer Press, Brno, 2004. 44
A. Uživatelská příručka Součástí této práce bylo i vytvoření aplikace, která bude převádět data získaná z výpočetního tomografu do 3D reprezentace pomocí několika různých metod. Tato aplikace je tytvořená pro operacční systém Windows. Je programovaná v jazyce C++ s použitím Win32Api a OpenGl. Po spuštění aplikace se objeví dialogové okno, pomocí kterého se vyberou data, ketrá chceme zobrazit. Inicializace velikosti dat se načítá z ini souboru, který má stejný název jako soubor s daty. Některé vlastnosti lze přenastavit. Například zda chceme zobrazit pouze kost, nebo i kůži, hranice hustoty kosti nebo kůže a také průhlednost kůže. Dále si můžeme zvolit zda chceme filtrovat malé části nebo ne. Aplikace je distribuovaná se zdrojovými kódy, spustitelným souborem a také jsou přiložena data získaná z CT. A.1. Struktura CD Struktura k této práci přiloženého CD je následující. bin/ data/ doc/ src/ spvolren/ binární spustitelné soubory ukázková vstupní data diplomová práce (včetně zdrojových kódů v L A TEXu) zdrojové kódy aplikace a pomocných programů program Single Pass Volume Raycasting Demo A.2. Ovládání aplikace Aplikace se ovládá myší. Tlačítkem Otevřít se objeví klasický dialog na otevření souboru. Po načtení souboru se může změnit nastavení vykreslování. Můžeme zaškrtnout co chceme vykreslovat a případně upravit hranice hustoty kosti a kůže. Hustota kosti i kůže je číslo od 0 do 255 a možná průhlednost kůže je 0-100 %. Dále zde můžeme stanovit, zda chceme malé části filtrovat a co bereme, jako malou část. Nyní máme několik možností. Můžeme si nechat zobrazit pouze snímky, které získáme z CT (tlačítko Zobrazit snímky), nebo nechat interpolovat tato data a vykreslit 3D model. Pokud chceme k vykreslení použít nějakou metodu Surface renderingu, vybereme jí a klikneme na OK. Pokud chceme data vykreslit pomocí metody Volume renderingu, tak vybereme jednu z metod Volume renderingu a klikneme na tlačítko Renderovat. Samozřejmě můžeme dialog zavřít buď tlačítkem Cancel nebo zavžením dialogu. 45
Obrázek 44. Dialog aplikace. A.2.1. Zobrazit snímky Otevře se nám okno, kde bude první snímek, který jsme získali z CT. Na další snímek se můžeme posouvat šipkou vpravo (o snímek zpět šipkou vlevo). Nebo je možný posun při stisku levého tlačítka myši a posun myši doprava/doleva. Dále můžeme snímky mírně přiblížit či oddálit a to šipkama nahoru a dolů, případně tiskem pravého tlačítka myši a pohyb nahoru a dolů. Přiblížení nesmí být moc veliké, jinak budou snímky nesouvislé. 46
Obrázek 45. Okno se snímky. A.2.2. Zobrazení 3D modelu metodou Surface renderingu Otevře se nám okno, kde bude vykreslen interpolovaný objekt. Stisknutím pravého tlačítka myši a pohybem nahoru a dolů lze objekt přibližovat či oddalovat. Stisknutím levého tlačítka myši a jejím pohybem lze objektem otáčet. Dále se dá aplikace ovládat pomocí klávesnice. Použitím šipek se objektem rotuje a stisknutím shift + šipky nahorů a dolů se objekt přibližuje či oddaluje. Záhlaví okna tvoří název použité metody. A.2.3. Zobrazení dat metodou Volume renderingu Otevře se nám okno, kde bude vykreslen objekt. Stisknutím pravého tlačítka myši a pohybem nahoru a dolů lze objekt přibližovat či oddalovat. Velkým zvětšením dostaneme nesouvislá data. Záhlaví okna tvoří název použité metody. A.3. Vstupní data Aplikace bere jako vstupní data soubory s příponou.dat, které jsou získány z CT. Dále ke každému takovému souboru musí existovat inicializační soubor. Struktura inicializačního souboru je: Columns=224 Rows=256 Start=1 End=300 47
Obrázek 46. Okno s 3D modelem. Obrázek 47. Okno s daty zobrazenými pomocí metody Volume renderingu. Bits=8 SpacingX=0.888 SpacingY=0.888 48