forked from InsightSoftwareConsortium/ITK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ImageRegistration4.tcl
125 lines (85 loc) · 3.65 KB
/
ImageRegistration4.tcl
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
#=========================================================================
#
# Program: Insight Segmentation & Registration Toolkit
# Module: ImageRegistration4.tcl
# Language: C++
# Date: $Date$
# Version: $Revision$
#
# Copyright (c) Insight Software Consortium. All rights reserved.
# See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the above copyright notices for more information.
#
#=========================================================================
package require InsightToolkit
package require itkinteraction
set registration [ itkImageRegistrationMethodF2F2_New ]
set imageMetric [ itkMattesMutualInformationImageToImageMetricF2F2_New ]
set transform [ itkTranslationTransform2_New ]
set optimizer [ itkRegularStepGradientDescentOptimizer_New ]
set interpolator [ itkLinearInterpolateImageFunctionF2D_New ]
$imageMetric SetNumberOfHistogramBins 20
$imageMetric SetNumberOfSpatialSamples 10000
$registration SetOptimizer [ $optimizer GetPointer ]
$registration SetTransform [ $transform GetPointer ]
$registration SetInterpolator [ $interpolator GetPointer ]
$registration SetMetric [ $imageMetric GetPointer ]
set fixedImageReader [ itkImageFileReaderF2_New ]
set movingImageReader [ itkImageFileReaderF2_New ]
$fixedImageReader SetFileName [lindex $argv 0]
$movingImageReader SetFileName [lindex $argv 1]
$fixedImageReader Update
$movingImageReader Update
set fixedImage [ $fixedImageReader GetOutput ]
set movingImage [ $movingImageReader GetOutput ]
$registration SetFixedImage $fixedImage
$registration SetMovingImage $movingImage
set fixedImageRegion [ $fixedImage GetBufferedRegion ]
$registration SetFixedImageRegion $fixedImageRegion
$transform SetIdentity
set initialParameters [ $transform GetParameters ]
$registration SetInitialTransformParameters $initialParameters
$optimizer SetMaximumStepLength 4.00
$optimizer SetMinimumStepLength 0.005
$optimizer SetNumberOfIterations 200
set command [itkTclCommand_New]
$command SetInterpreter [GetInterp]
$command SetCommandString {
set currentParameter [$transform GetParameters]
puts "M: [$optimizer GetValue] P: [$currentParameter GetElement 0 ] [$currentParameter GetElement 1 ] "}
$optimizer AddObserver [itkIterationEvent] [$command GetPointer]
# Here the registration is done
$registration StartRegistration
# Get the final parameters of the transformation
set finalParameters [$registration GetLastTransformParameters]
# Print them out
puts "Final Registration Parameters "
puts "Translation X = [$finalParameters GetElement 0]"
puts "Translation Y = [$finalParameters GetElement 1]"
# Now,
# we use the final transform for resampling the
# moving image.
set resampler [itkResampleImageFilterF2F2_New ]
$resampler SetTransform [$transform GetPointer]
$resampler SetInput $movingImage
set region [ $fixedImage GetLargestPossibleRegion ]
$resampler SetSize [ $region GetSize ]
$resampler SetOutputSpacing [ $fixedImage GetSpacing ]
$resampler SetOutputOrigin [ $fixedImage GetOrigin ]
$resampler SetDefaultPixelValue 100
set outputCast [itkRescaleIntensityImageFilterF2US2_New]
$outputCast SetOutputMinimum 0
$outputCast SetOutputMaximum 65535
$outputCast SetInput [$resampler GetOutput]
#
# Write the resampled image
#
set writer [ itkImageFileWriterUS2_New ]
$writer SetFileName [lindex $argv 2]
$writer SetInput [ $outputCast GetOutput ]
$writer Update
wm withdraw .
exit