File: TestMNITransforms.tcl

package info (click to toggle)
vtk7 7.1.1%2Bdfsg1-12
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 125,776 kB
  • sloc: cpp: 1,539,582; ansic: 106,521; python: 78,038; tcl: 47,013; xml: 8,142; yacc: 5,040; java: 4,439; perl: 3,132; lex: 1,926; sh: 1,500; makefile: 122; objc: 83
file content (138 lines) | stat: -rw-r--r-- 3,670 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package require vtk

#
# write to the temp directory if possible, otherwise use .
#
set dir "."
if {[info commands "rtTester"] == "rtTester"}  {
   set dir [rtTester GetTempDirectory]
}

# first, create an image to warp
vtkImageGridSource imageGrid
imageGrid SetGridSpacing 16 16 0
imageGrid SetGridOrigin 0 0 0
imageGrid SetDataExtent 0 255 0 255 0 0
imageGrid SetDataScalarTypeToUnsignedChar

vtkLookupTable table
table SetTableRange 0 1
table SetValueRange 1.0 0.0
table SetSaturationRange 0.0 0.0
table SetHueRange 0.0 0.0
table SetAlphaRange 0.0 1.0
table Build

vtkImageMapToColors alpha
alpha SetInputConnection [imageGrid GetOutputPort]
alpha SetLookupTable table

vtkBMPReader reader1
reader1 SetFileName "$VTK_DATA_ROOT/Data/masonry.bmp"

vtkImageBlend blend
blend AddInputConnection [reader1 GetOutputPort]
blend AddInputConnection [alpha GetOutputPort]

# next, create a ThinPlateSpline transform

vtkPoints p1
p1 SetNumberOfPoints 8
p1 SetPoint 0 0 0 0
p1 SetPoint 1 0 255 0
p1 SetPoint 2 255 0 0
p1 SetPoint 3 255 255 0
p1 SetPoint 4 96 96 0
p1 SetPoint 5 96 159 0
p1 SetPoint 6 159 159 0
p1 SetPoint 7 159 96 0

vtkPoints p2
p2 SetNumberOfPoints 8
p2 SetPoint 0 0 0 0
p2 SetPoint 1 0 255 0
p2 SetPoint 2 255 0 0
p2 SetPoint 3 255 255 0
p2 SetPoint 4 96 159 0
p2 SetPoint 5 159 159 0
p2 SetPoint 6 159 96 0
p2 SetPoint 7 96 96 0

vtkThinPlateSplineTransform thinPlate0
  thinPlate0 SetSourceLandmarks p1
  thinPlate0 SetTargetLandmarks p2
  thinPlate0 SetBasisToR2LogR

set filename "$dir/mni-thinplatespline.xfm"

# write the tps to a file
vtkMNITransformWriter tpsWriter
  tpsWriter SetFileName "$filename"
  tpsWriter SetTransform thinPlate0
  tpsWriter Write

# read it back
vtkMNITransformReader tpsReader
if { [tpsReader CanReadFile "$filename"] != 0 } {
  tpsReader SetFileName "$filename"
}
  set thinPlate [tpsReader GetTransform]

# make a linear transform
vtkTransform linearTransform
  linearTransform PostMultiply
  linearTransform Translate -127.5 -127.5 0
  linearTransform RotateZ 30
  linearTransform Translate +127.5 +127.5 0

# remove the linear part of the thin plate
vtkGeneralTransform tpsGeneral
  tpsGeneral SetInput $thinPlate
  tpsGeneral PreMultiply
  tpsGeneral Concatenate [[linearTransform GetInverse] GetMatrix]

# convert the thin plate spline into a grid
vtkTransformToGrid transformToGrid
  transformToGrid SetInput tpsGeneral
  transformToGrid SetGridSpacing 16 16 1
  transformToGrid SetGridOrigin -64.5 -64.5 0
  transformToGrid SetGridExtent 0 24 0 24 0 0
  transformToGrid Update

vtkGridTransform gridTransform
  gridTransform SetDisplacementGridConnection [transformToGrid GetOutputPort]
  gridTransform SetInterpolationModeToCubic

# add back the linear part
vtkGeneralTransform gridGeneral
  gridGeneral SetInput gridTransform
  gridGeneral PreMultiply
  gridGeneral Concatenate [linearTransform GetMatrix]
  # invert for reslice
  gridGeneral Inverse

# write to a file
vtkMNITransformWriter gridWriter
  gridWriter SetFileName "$dir/mni-grid.xfm"
  gridWriter SetComments "TestMNITransforms output transform"
  gridWriter SetTransform gridGeneral
  gridWriter Write

# read it back
vtkMNITransformReader gridReader
  gridReader SetFileName "$dir/mni-grid.xfm"
  set transform [gridReader GetTransform]

# apply the grid warp to the image
vtkImageReslice reslice
  reslice SetInputConnection [blend GetOutputPort]
  reslice SetResliceTransform $transform
  reslice SetInterpolationModeToLinear

# set the window/level to 255.0/127.5 to view full range
vtkImageViewer viewer
viewer SetInputConnection [reslice GetOutputPort]
viewer SetColorWindow 255.0
viewer SetColorLevel 127.5
viewer SetZSlice 0
viewer Render