piątek, 23 stycznia 2009

VTK - czytamy serię danych

Analizując przykłady dostępne razem z biblioteką VTK, można zauważyć, że kilka z nich pokazuje jak przetwarzać i wyświetlać dane przestrzenne. Standardowo dostępny przykład (zdjęcie CT głowy) zapisany jest w postaci serii plików binarnych i może być odczytany za pomocą polecenia TCL:

vtkVolume16Reader v16
v16 SetDataDimensions 64 64
v16 SetDataByteOrderToLittleEndian
v16 SetFilePrefix "$VTK_DATA_ROOT/Data/headsq/quarter"
v16 SetImageRange 1 93
v16 SetDataSpacing 3.2 3.2 1.5


Co w przypadku innych formatów danych? Nie ma problemu. Za pomocą VTK możemy wczytywać wiele różnych, popularnych typów plików.

Dane testowe
Poniższe przykłady będą bazować na zdjęciach pobranych ze strony przeglądarki OsiriX. W dziale download klikamy na link DICOM sample image datasets Web Site i wybieramy serię zdjęć "MANIX". Po pobraniu rozpakowujemy do dowolnego katalogu. Jako, że zdjęcia są w formacie DICOM, można je również przekonwertować np. do TIFFa. Ja do tego użyłem ImageJ, który bardzo dobrze wspiera DICOMa.

Odczyt serii danych z formatu DICOM
Obsługa DICOMa w VTK jest świetnie opracowana. Wystarczy wskazać katalog ze zdjęciami, a biblioteka już sama rozpozna typ danych oraz rozdzielczość w każdym z wymiarów. Aby nie było żadnych problemów przy wczytywaniu zdjęć, warto upewnić się, że w katalogu nie ma innych plików, aniżeli pliki DICOM. W przeciwnym razie wyskoczy błąd o niezgodności danych.

vtkDICOMImageReader reader
reader SetDirectoryName "Osirix/manix/cer-ct/ANGIO CT"
reader Update


Odczyt serii danych z formatu TIFF
Tutaj już sami dokładnie musimy określić wszystkie parametry. Najpierw wskazujemy część stałą każdego pliku, który ma zostać wczytany, a następnie część zmienną. Jest to najczęściej licznik mający stałą długość - w poniższym przykładzie wynosi on 3. Później jeszcze określamy rozdzielczość w każdym wymiarze oraz podajemy jak są przeskalowane dane. Warto zwrócić uwagę, że druga wartość w rozdzielczości po Z wskazuje dodatkowo ile jest wszystkich plików (tutaj: 458).

vtkTIFFReader reader
reader SetFilePrefix "Osirix/manix/tiff/ANGIO CT0"
reader SetFilePattern "%s%03d.tif"
reader SetFileNameSliceOffset 0
reader SetFileNameSliceSpacing 1
reader SetDataExtent 0 512 0 512 0 458
reader SetDataSpacing 0.488281 0.488281 0.700012
reader Update


VTK wspiera również inne znane formaty plików graficznych, m.in. jpg (vtkJPEGReader), bmp (vtkBMPReader), png (vtkPNGReader).

Testujemy przykłady VTK dla własnych danych
Jak już wspomniałem na początku, w katalogu VTK jest kilkanaście gotowych programów, które operują na zdjęciu tomograficznym głowy. Nic nie stoi na przeszkodzie, aby te programy zadziałały dla naszych danych. Od czego zacząć? Możemy wejść do katalogu VTK/Examples/Medical/Tcl lub wyszukać sobie wszystkie pliki z rozszerzeniem *.tcl zawierające słowo quarter. Następnie w tych plikach zamieniamy odczyt z plików binarnych (blok rozpoczynający się od: vtkVolume16Reader v16) na odczyt z formatu DICOM. Możemy jeszcze zamienić słowo reader na nazwę poprzedniej zmiennej v16, aby nie musieć aktualizować całego skryptu.

Przykładowe wizualizacje dla danych OsiriX-Manix można zobaczyć poniżej:


0 komentarze:

Prześlij komentarz