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
|
#==========================================================================
#
# Copyright Insight Software Consortium
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0.txt
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#==========================================================================*/
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 Update
# 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 [itkRescaleIntensityImageFilterF2UC2_New]
$outputCast SetOutputMinimum 0
$outputCast SetOutputMaximum 65535
$outputCast SetInput [$resampler GetOutput]
#
# Write the resampled image
#
set writer [ itkImageFileWriterUC2_New ]
$writer SetFileName [lindex $argv 2]
$writer SetInput [ $outputCast GetOutput ]
$writer Update
wm withdraw .
exit
|