Bildverarbeitung Praktikum
Ubung 9, Abgabe 02.07.2020¨
Dr. Christina Gillmann June 25, 2020
1 Aufgabe 0: Installieren von VTK und laden eines Ladensatzes
F¨ur diese Aufgabe ben¨otigen sie eine neue Bibliothek namens VTK (Visualization Toolkit).
Mit dieser Bibliothek erhalten sie alle wichtigen Werkzeuge f¨ur fortgeschrittene Visual- isierungen. Generell bietet VTK sehr viele Algorithmen zur Visualisierung (nicht nur im Rahmen der Bildverarbeitung).
Zur Installation ben¨otigen sie folgenden Befehl:
conda i n s t a l l −c anaconda vt k
VTK ist ziemlich groß und die Installation kann einige Minuten dauern.
Sie sollen diese Woche mit einem speziellen Datensatz arbeiten. Es handelt sich um den 3D CT scan eines Motors. Ich habe diesen Datensatz (engine.raw) in der Dropbox hinterlegt. Hierbei handelt es sich um ein sehr primitives Datenformat indem alle Werte einfach nur in einer Datei gespeichert sind (ohne header, der zus¨atzliche Informationen bietet). Deshalb m¨ussen Parameter wie Gr¨oße des Bildes und Pixel angegeben werden.
Sie finden folgend den Code der ihnen das Laden des Datensatzes erm¨oglicht.
Den Datensatz k¨onnen sie wie folgt laden:
i m p o r t v t k
# Read 3D RAW image
r e a d e r=v tk . vtkImageReader ( )
r e a d e r . S e t D a t a S c a l a r T y p e ( v tk . VTK UNSIGNED CHAR) # u n s i g n e d i n t 8 r e a d e r . SetFileName ( ’ e n g i n e . raw ’ )
r e a d e r . SetNumberOfScalarComponents ( 1 ) r e a d e r . S e t F i l e D i m e n s i o n a l i t y ( 3 )
r e a d e r . S e t D a t a B y t e O r d e r T o L i t t l e E n d i a n ( ) r e a d e r . S e t D a t a E x t e n t ( 0 , 2 5 5 , 0 , 2 5 5 , 0 , 1 2 7 ) r e a d e r . S e t D a t a S p a c i n g ( 1 . 0 , 1 . 0 , 1 . 0 )
r e a d e r . Update ( )
1
2 Aufgabe 1: Volume Rendering
Sie sollen den geladenen Datensatz mit Hilfe des Volume Renderings und einer 1-D Transferfunktion darstellen. Hieryu ben¨otigen sie folgenden Code:
renWin = vt k . vtkRenderWindow ( ) renWin . AddRenderer ( r e n 1 )
i r e n = vt k . v t k R e n d e r W i n d o w I n t e r a c t o r ( ) i r e n . SetRenderWindow ( renWin )
# Mit d i e s e r Funktion bestimmen s i e d i e O p a c i t y
# d e r j e w e i l i g e n Grauwerte im B i l d
o p a c i t y T r a n s f e r F u n c t i o n = v t k . v t k P i e c e w i s e F u n c t i o n ( ) o p a c i t y T r a n s f e r F u n c t i o n . AddPoint ( 2 0 , 0 . 0 )
o p a c i t y T r a n s f e r F u n c t i o n . AddPoint ( 2 5 5 , 0 . 2 )
# C r e a t e t r a n s f e r mapping s c a l a r v a l u e t o c o l o r .
c o l o r T r a n s f e r F u n c t i o n = v t k . v t k C o l o r T r a n s f e r F u n c t i o n ( ) c o l o r T r a n s f e r F u n c t i o n . AddRGBPoint ( 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 ) c o l o r T r a n s f e r F u n c t i o n . AddRGBPoint ( 6 4 . 0 , 1 . 0 , 0 . 0 , 0 . 0 ) c o l o r T r a n s f e r F u n c t i o n . AddRGBPoint ( 1 2 8 . 0 , 0 . 0 , 0 . 0 , 1 . 0 ) c o l o r T r a n s f e r F u n c t i o n . AddRGBPoint ( 1 9 2 . 0 , 0 . 0 , 1 . 0 , 0 . 0 ) c o l o r T r a n s f e r F u n c t i o n . AddRGBPoint ( 2 5 5 . 0 , 0 . 0 , 0 . 2 , 0 . 0 )
# The p r o p e r t y d e s c r i b e s how t h e d a t a w i l l l o o k . v o l u m e P r o p e r t y = vt k . vtkVolumeProperty ( )
v o l u m e P r o p e r t y . S e t C o l o r ( c o l o r T r a n s f e r F u n c t i o n )
v o l u m e P r o p e r t y . S e t S c a l a r O p a c i t y ( o p a c i t y T r a n s f e r F u n c t i o n ) v o l u m e P r o p e r t y . ShadeOn ( )
v o l u m e P r o p e r t y . S e t I n t e r p o l a t i o n T y p e T o L i n e a r ( )
# The mapper / r a y c a s t f u n c t i o n know how t o r e n d e r t h e d a t a . volumeMapper = v tk . vtkFixedPointVolumeRayCastMapper ( )
volumeMapper . S e t I n p u t C o n n e c t i o n ( r e a d e r . GetOutputPort ( ) )
# The volume h o l d s t h e mapper and t h e p r o p e r t y and
# can be u s e d t o p o s i t i o n / o r i e n t t h e volume . volume = v t k . vtkVolume ( )
volume . SetMapper ( volumeMapper ) volume . S e t P r o p e r t y ( v o l u m e P r o p e r t y ) r e n 1 . AddVolume ( r e a d e r . getOutput ( ) ) r e n 1 . ResetCamera ( )
2
renWin . S e t S i z e ( 6 0 0 , 6 0 0 ) renWin . Render ( )
i r e n . S t a r t ( )
a) Machen sie sich mit den Klassen ColorTransferFunction und OpacityTransferFunc- tion vertraut. Mit diesen sollen sie eine passende Transfer Funktion erstellen. Hierbei ist die Dokumentation von VTK hilfreich
b) Erstellen sie ein Histogramm des Eingangsbildes. Zeigen sie dieses an
c) Erstellen sie eine Transferfunktion mit Hilfe der Parameter in ColorTransferFunc- tion und OpacityTransferFunction. Sie k¨onnen dort beliebig viele Punkte f¨ur Trans- parenz und Farben einf¨ugen. Zwischen diesen Punkten wird VTK automatisch inter- polieren.
3 Aufgabe 2: Indirect Volume Rendering
In dieser Aufgabe sollen sie den Datensatz durch inderektes Volumen Rendering visual- isieren. Hierzu ben¨otigen sie folgenden Code.
# V i s u a l i z a t i o n
c o n t o u r=v t k . vtkMarchingCubes ( ) # v t k . v t k C o n t o u r F i l t e r ( ) c o n t o u r . S e t I n p u t C o n n e c t i o n ( r e a d e r . GetOutputPort ( ) )
c o n t o u r . ComputeNormalsOn ( ) c o n t o u r . S e t V a l u e ( 0 , 1 )
mapper = v t k . vtkPolyDataMapper ( )
mapper . S e t I n p u t C o n n e c t i o n ( c o n t o u r . GetOutputPort ( ) ) mapper . S c a l a r V i s i b i l i t y O f f ( )
a c t o r = v t k . v t k A c t o r ( ) a c t o r . SetMapper ( mapper ) r e n d e r e r=v t k . v t k R e n d e r e r ( ) r e n d e r e r . AddActor ( a c t o r )
window = v tk . vtkRenderWindow ( ) window . S e t S i z e ( 6 0 0 , 6 0 0 )
window . AddRenderer ( r e n d e r e r )
# C r e a t e i n t e r a c t o r , add window & add o b s e r v e r s i n t e r a c t o r = v tk . v t k R e n d e r W i n d o w I n t e r a c t o r ( ) i n t e r a c t o r . SetRenderWindow ( window )
# S t a r t r e n d e r e r & i n t e r a c t o r
3
window . Render ( )
i n t e r a c t o r . I n i t i a l i z e ( )
a) Finden sie einen guten Parameter f¨ur die Funktion setValue im Algorithmus March- ing Cubes. Hierbei kann ihnen das Histogramm Aufschluss geben.
b) Vergleichen sie die Visualisierungen aus beiden Aufgaben und diskutieren sie welche Vor und Nachteile der jeweilige Ansatz hat.
4