Przykład
W tym przykładzie zostanie pokazane jak w danych wyciąć kulę. Zadanie to będzie o tyle łatwe, ponieważ w VTK istnieje już klasa wspomagająca rysowane kuli na obrazie, dzięki czemu nie musimy przeprowadzać sami żadnych operacji na pikselach (w przypadku innych kształtów niestety będzie to konieczne). Następnie tworzymy obiekt reprezentujący maskę (vtkImageMask), do którego przekazujemy obraz wejściowy i właśnie przygotowany obraz z kulą. Możemy również ustalić jakie wartości mają zostać wstawione w miejsce wyciętej kuli. W naszym przypadku wstawiamy "zera".
set extent [[reader GetOutput] GetExtent]
vtkImageEllipsoidSource imageSphere
imageSphere SetWholeExtent 0 [lindex $extent 1] 0 [lindex $extent 3] 0 [lindex $extent 5]
imageSphere SetCenter 40 40 40
imageSphere SetRadius $radius $radius $radius
vtkImageMask mask
mask SetImageInput [reader GetOutput]
mask SetMaskInput [imageSphere GetOutput]
mask SetMaskedOutputValue 0 0 0
mask NotMaskOn
mask ReleaseDataFlagOff
Tak przygotowany obiekt mask wstawiamy do potoku przetwarzania tradycyjnej wizualizacji objętościowej. Wynik tego działania możemy zobaczyć poniżej:
Dużą zaletą tego podejścia jest to, że operacja przycinania danych jest wykonywana jednorazowo i w żaden sposób nie wpływa na szybkość renderowania wizualizacji.
2 komentarze:
Witam.
Czy istniej możliwość wykonania odwrotnej operacji, tzn. ogranicznia danych tylko do danyc zawartych w kuli?
Bardzo proszę Szanownego Pana , o jakąś wskazówkę.
Pozdrawiam.
E tam, proszę nie przesadzaj z grzecznościami. To jest blog internetowy, a nie podanie o pracę;) Zwracaj się do mnie bezpośrednio.
Aby uzyskać odwrotny efekt, aniżeli ten opisany we wpisie wystarczy umieścić w komentarz instrukcję 'mask NotMaskOn'. Powodzenia:)
Prześlij komentarz