Program wizualizacji modelu klatki piersiowej
na podstawie przetworzonych obrazów
przekrojów poprzecznych
Praca dyplomowa napisana pod kierunkiem
dr Marka Dorosa
Celem pracy jest zaprojektowanie i uruchomienie programu wizualizacji modelu klatki piersiowej na podstawie obrazów przekrojów poprzecznych z wyodrębnionymi narządami takimi jak np. serce, płuca, kości, ściana torsu. Program uwzględnia więc detale anatomiczne istotne dla prowadzonych obserwacji. Celem ich może być np. diagnostyka lub edukacja.
Niniejsza prezentacja przedstawia następujące tematy:
Algorytm maszerujących kwadratów,
Algorytm maszerujących sześcianów,
Narzędzia, biblioteki i pliki graficzne,
Projekt Visible Human ®,
Pliki MCS,
Program,
Przykładowe obiekty 3D
Algorytm maszerujących kwadratów
Algorytm maszerujących kwadratów (ang. Marching Squares) stanowi dwuwymiarowy przypadek algorytmu maszerujących sześcianów (ang. Marching Cubes), którego autorami są: Harvey Cline i William Lorensen (US Patent 4.710.876). Oba algorytmy operują na wypełnionych powierzchniach konturowych, które w przypadku trójwymiarowym mogą stanowić np. przekroje poprzeczne. Rys. 1 przedstawia przykładową powierzchnię konturową:
Rys.1 Przykładowa powierzchnia konturowa.
Kolejnym krokiem algorytmu maszerujących kwadratów jest dokonanie podziału powierzchni na szereg kwadratów, poprzez wykreślenie poziomych i pionowych linii. Od gęstości podziału siatki zależy dokładność odwzorowania brzegu konturu. Przykładową siatkę
przedstawia Rys. 2:
Rys. 2 Powierzchnia konturowa z siatką kwadratów.
Przecięcia linii tworzą punkty, które można jednoznacznie zakwalifikować do jednego z dwóch przypadków: punkt zawiera się w powierzchni konturowej albo jest poza nią. Biorąc pod uwagę, że kwadrat posiada 4 wierzchołki i każdy wierzchołek może być w dwóch stanach, do rozważenia pozostaje 24 możliwych przypadków. Na Rys. 3 żółtymi kropkami oznaczono te wierzchołki kwadratów, które zawierają się w powierzchni konturowej:
Rys.3 Wierzchołki siatki zawierające się w powierzchni.
Ostatnim etapem algorytmu jest przybliżone wyznaczenie punktów przebiegu linii konturowej w połowach długości tych krawędzi, przez które przechodzi brzeg konturu. Jak łatwo zauważyć będą to takie krawędzie, w których jeden koniec zawiera się w powierzchni konturowej, drugi zaś leży poza tą krawędzią. Na Rys. 4 kolorem czerwonym zaznaczono linię otrzymaną z połączenia takich punktów:
Rys.4 Zarys powierzchni konturowej.
Jak widać przebieg linii konturowej wyznaczonej przez algorytm nie jest szczególnie dokładny. Pewną poprawę efektów daje zagęszczenie siatki kwadratów, dalej jednak brak informacji o faktycznym miejscu przecięcia powierzchni konturowej z krawędzią kwadratu powoduje niedokładności.
Niewielka modyfikacja algorytmu niweluje opisaną wadę. Wystarczy wyliczyć faktyczne miejsca przecięcia brzegu powierzchni konturowej z krawędziami kwadratów, aby znacznie polepszyć przybliżenie kształtu linii konturowej do brzegu obszaru. Na Rys. 5 czerwonym kolorem poprowadzoną linię przez tak wyliczone punkty przecięć:
Rys. 5 Dokładny zarys powierzchni konturowej.
Algorytm maszerujących sześcianów
Po „dwuwymiarowym” wstępie idea algorytmu działającego w trzech wymiarach jest prosta. Sąsiednie warstwy trójwymiarowego obiektu dzielone są na komórki o kształcie sześcianów. Komórka albo zawiera fragment konturu albo nie. Na podstawie porównania wartości w poszczególnych wierzchołkach sześcianu możliwe jest ustalenie przebiegu powierzchni konturowej. Z kombinatoryki wynika, iż przy 8 wierzchołkach sześcianu istnieje 256 (28) możliwych przypadków przebiegu powierzchni konturowej. Autorzy algorytmu maszerujących sześcianów wskazali, że tablica 256 przypadków może zostać zredukowana do 15 poprzez połączenie symetrycznie równoważnych i uzupełniających się. Przypadki te przedstawia Rys. 6:
Rys. 6 15 podstawowych przypadków algorytmu maszerujących sześcianów.
Narzędzia, biblioteki i pliki graficzne
Program został napisany w całości w języku C++ przy użyciu kompilatora Borland C++ Builder 4.0 Standard. Do wizualizacji grafiki 3D została zastosowana biblioteka OpenGL. Oprócz komponentów z biblioteki VCL (ang. Visual Component Library) w programie zostały wykorzystane następujące biblioteki:
OpenGLPanel v0.5BCB4 autorstwa Daniela Plakosha - obsługa wyświetlania grafiki OpenGL,
UrlLabel v1.5 autorstwa Ahto Tannera - etykieta z odnośnikiem do adresów WWW,
DRAG & DROP COMPONENT SUITE v3.7 autorstwa Angusa Johnsona i Andersa Melandera - obsługa techniki drag & drop.
Opracowany program akceptuje dane obrazowe w następujących formatach:
PCX - 1 bit na piksel (2 kolory), skompresowane algorytmem RLE (ang. Run Length Encoding),
PCX - 4 bity na piksel (16 kolorów), skompresowane algorytmem RLE,
PCX - 8 bitów na piksel (256 kolorów), skompresowane algorytmem RLE,
PCX - 24 bity na piksel (16,7 mln kolorów), skompresowane algorytmem RLE,
BMP - 24 bity na piksel (16,7 mln kolorów), bez kompresji,
TARGA - 24 bity na piksel (16,7 mln kolorów), bez kompresji.
Wielkość danych obrazowych ograniczona jest jedynie pojemnością pamięci operacyjnej komputera.
Projekt Visible Human ®
Dane przetwarzane przez program pochodzą m.in. z projektu Visible Human®. Są to obrazy w formacie JPEG z rozdzielczością 96 dpi w 16,7 mln kolorów o rozmiarze (w pikselach) 800 x 500. Obrazy są fotografiami sekcyjnymi zrobionymi w odstępie 1 cm. Rys. 7 i 8 przedstawiają przekrój ciała człowieka oraz wydzielony kontur płuc:
Rys. 7 Przykładowy przekrój ciała człowieka pochodzący z projektu Visible Human.
Rys. 8 Przekrój płuc wyodrębniony z przekroju ciała człowieka.
Pliki MCS
Pliki MCS (ang. Marching Cubes Script) są zwykłymi plikami tekstowymi, które służą do opisu parametrów sceny i budowy obiektów 3D na podstawie przekrojów poprzecznych. Składnia pliku MCS obejmuje kilkanaście poleceń, które można podzielić na dwie grupy:
instrukcje definiujące obiekty 3D na podstawie dostępnych przekrojów.
instrukcje definiujące parametry sceny 3D, z możliwością użycia wartości domyślnych,
Polecenia służących do definiowania obiektów 3D:
Begin - początek obiektu 3D;
End - koniec obiektu 3D;
Color - kolor powierzchni obiektu;
PlaneColor - kolor analizowanych płaszczyzn zawierających przekroje;
Texture - nazwa pliku graficznego zawierająca teksturę do pokrycia powierzchni obiektu 3D;
ObjectType - typ wyświetlanego obiektu 3D; możliwe wartości to:
Points - punkty,
WireFrames - odcinki (krawędzie trójkątów),
FlatTriangles - trójkąty z cieniowaniem płaskim,
Triangles - trójkąty z cieniowaniem Gourauda oraz uśrednionymi wektorami normalnymi,
TexturedTriagles - trójkąty z nałożoną teksturą,
EdgeLayers - krawędzie warstw obiektu,
Layers - warstwy obiektu,
TexturedLayers - warstwy obiektu pokryte teksturą;
Step - krok algorytmu maszerujących sześcianów/kwadratów;
File - nazwa pliku do analizy oraz współrzędna Z położenia danej warstwy;
Polecenia dotyczące ustawień sceny 3D:
Title - tytuł wyświetlanego okna;
BackgroundColor - kolor tła sceny;
Left, Right, Bottom, Top, Near, Far - współrzędne odpowiednio lewej, prawej, dolnej, górnej, bliższej i dalszej płaszczyzny odcinania tj. wielkości wyświetlanej sceny 3D;
AmbientLight - kolor światła otaczającego;
DiffuseLight - kolor światła rozproszonego;
LightPos - położenie źródła światła w scenie;
Przykładowy skrypt MCS:
Title "Lung"
BackgroundColor 255 255 255
Left -200
Right 200
Bottom -200
Top 200
Near -200
Far 200
AmbientLight 128 128 128
DiffuseLight 192 192 192
LightPos -400 400 400
Begin
Color 255 0 0
PlaneColor 0 0 0
Texture "texture.pcx"
ObjectType "TexturedTriangles"
Step 11
File "1341.pcx" 90
File "1351.pcx" 75
File "1361.pcx" 60
File "1371.pcx" 45
File "1381.pcx" 30
File "1391.pcx" 15
File "1401.pcx" 0
End
Program
Opracowany program umożliwia tworzenie, wczytywanie, zapis i obróbkę plików MCS oraz zmianę poszczególnych parametrów sceny 3D tj. składowe kolorów i położenia źródła światła, zmiana rozmiaru sceny oraz obroty wokół osi współrzędnych. Zmiany parametrów sceny są natychmiast widoczne w oknie programu.
Ponadto w programie zaimplementowano zapis zawartości okna do pliku graficznego oraz jego kopiowanie do schowka. Wszelkie błędy związane z operacjami dyskowymi sygnalizowane są poprzez stosowne komunikaty. Program obsługuję technikę drag & drop.
Rys. 9 przedstawia wygląd głównego okna programu:
Rys. 9 Wygląd ogólny programu
Przykładowe obiekty 3D
Poniższe rysunki przedstawiają efekty działania programu:
Rys. 10 Obiekt typu Points
Rys. 11 Obiekt typu WireFrames
Rys. 12 Obiekt typu Edge Layers
Rys. 13 Obiekt typu Flat Triangles
Rys. 14 Obiekty typu Triangles z naniesioną siatką współrzędnych
Rys. 15 Obiekty typu Layers wraz z osiami współrzędnych