The information here is from 4th prototype of implementing the ImageRegistrationMethod
to SimpleITK. Its available an isolated "STRAW" branch:
https://github.com/blowekamp/SimpleITK/tree/STRAW_ImageRegistrationMethod
And also combined with the Progress topic:
https://github.com/blowekamp/SimpleITK/tree/STRAW
The goal was to add as many as possible metric and optimizer to determine a flexible interface and backend. As well as the needed callbacks and available methods needed during iteration events.
from __future__ import print_function
import sys
sys.path.insert(0,'/scratch/blowekamp/build/SimpleITK/SimpleITK-build/lib')
sys.path.insert(0,'/scratch/blowekamp/build/SimpleITK/SimpleITK-build/Wrapping')
import sys
import os
import SimpleITK as sitk
print(sitk.Version())
from myshow import myshow
def cmyshow(img1,img2,*args, **kw):
simg1 = sitk.Cast(sitk.RescaleIntensity(img1), sitk.sitkUInt8)
simg2 = sitk.Cast(sitk.RescaleIntensity(img2), sitk.sitkUInt8)
cimg = sitk.Compose(simg1, simg2, simg1/2.+simg2/2.)
myshow(cimg,*args, **kw)
SimpleITK Version: 0.8.0.dev134-g71000 Compiled: Jan 7 2014 11:37:44
The ImageRegistrationMethod
utilizes interpolators and transform. Lets review current support.
Currently, there are a variety of interpolators that are available for use in filters such as Resample
and Expand
filters. They are defined as an enumeration:
enum InterpolatorEnum { sitkNearestNeighbor = 1, sitkLinear = 2, sitkBSpline = 3, sitkGaussian = 4, sitkLabelGaussian = 5, sitkHammingWindowedSinc = 6, sitkCosineWindowedSinc = 7, sitkWelchWindowedSinc = 8, sitkLanczosWindowedSinc = 9, sitkBlackmanWindowedSinc = 10 };
All of these interpolators can be utilized in the proposed SimpleITK ImageRegistrationMethods
.
The SimpleITK Transform
class is another facade interface to multiple ITK objects similar to the SimpleITK Image
class. It's designed for the user to be able to construct a variety of transform types specified as a enumerated type in the constructor.
enum TransformEnum { sitkIdentity, sitkTranslation, sitkScale, sitkScaleLogarithmic, sitkEuler, sitkSimilarity, sitkQuaternionRigid, sitkVersor, sitkVersorRigid, sitkAffine, sitkComposite, sitkDisplacementField };
The interface intrinsically has methods to write the transform to a file and read an arbitray transform file.
Compositing transforms is also supported, although the interface to select which parameters need to be optimized in the registration still needs to be determined.
help(sitk.Transform)
Help on class Transform in module SimpleITK: class Transform(__builtin__.object) | C++ includes: sitkTransform.h | | Methods defined here: | | AddTransform(self, *args, **kwargs) | AddTransform(Transform self, Transform t) -> Transform | | GetDimension(self) | GetDimension(Transform self) -> unsigned int | | Return the dimension of the Transform ( 2D or 3D ) | | GetFixedParameters(self) | GetFixedParameters(Transform self) -> VectorDouble | | GetITKBase(self, *args) | GetITKBase(Transform self) -> itk::TransformBase | GetITKBase(Transform self) -> itk::TransformBase const * | | GetParameters(self) | GetParameters(Transform self) -> VectorDouble | | SetFixedParameters(self, *args, **kwargs) | SetFixedParameters(Transform self, VectorDouble parameters) | | SetParameters(self, *args, **kwargs) | SetParameters(Transform self, VectorDouble parameters) | | TransformPoint(self, *args, **kwargs) | TransformPoint(Transform self, VectorDouble point) -> VectorDouble | | WriteTransform(self, *args, **kwargs) | WriteTransform(Transform self, std::string const & filename) | | __del__ lambda self | | __getattr__ lambda self, name | | __init__(self, *args) | __init__(itk::simple::Transform self) -> Transform | __init__(itk::simple::Transform self, unsigned int dimensions, itk::simple::TransformEnum type) -> Transform | __init__(itk::simple::Transform self, Image displacement, itk::simple::TransformEnum type=sitkDisplacementField) -> Transform | __init__(itk::simple::Transform self, Transform arg2) -> Transform | | By default a 3-d identity transform is constructed. | | __repr__ = _swig_repr(self) | | __setattr__ lambda self, name, value | | __str__(self) | __str__(Transform self) -> std::string | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | __swig_destroy__ = <built-in function delete_Transform> | delete_Transform(Transform self) | | __swig_getmethods__ = {} | | __swig_setmethods__ = {}
tx = sitk.Transform(2, sitk.sitkTranslation)
print(tx)
TranslationTransform (0x7ffa9c9f35b0) RTTI typeinfo: itk::TranslationTransform<double, 2u> Reference Count: 2 Modified Time: 467 Debug: Off Object Name: Observers: none Offset: [0, 0]
print(tx.GetParameters())
print(tx.GetFixedParameters())
(0.0, 0.0) ()
The setting of the "Optimizer" and "Metric" for the ImageRegistration
methods is done with sets for exclusive functions with arguments to configure the component.
As ITK's methods is a ProcessObject
, so SimpleITK used the same Execute
methods for an interface but return a transform with the results.
However, the ITK object is modified the transform "in-place", which is not the expected behavior from this interface.
help(sitk.ImageRegistrationMethod)
Help on class ImageRegistrationMethod in module SimpleITK: class ImageRegistrationMethod(ProcessObject) | Proxy of C++ itk::simple::ImageRegistrationMethod class | | Method resolution order: | ImageRegistrationMethod | ProcessObject | __builtin__.object | | Methods defined here: | | Execute(self, *args, **kwargs) | Execute(ImageRegistrationMethod self, Image fixed, Image moving) -> Transform | | GetFixedImageRegionIndex(self) | GetFixedImageRegionIndex(ImageRegistrationMethod self) -> VectorUInt32 | | GetFixedImageRegionSize(self) | GetFixedImageRegionSize(ImageRegistrationMethod self) -> VectorUInt32 | | GetInterpolator(self) | GetInterpolator(ImageRegistrationMethod self) -> itk::simple::InterpolatorEnum | | GetMetricValue(self) | GetMetricValue(ImageRegistrationMethod self) -> double | | GetName(self) | GetName(ImageRegistrationMethod self) -> std::string | | GetOptimizerIteration(self) | GetOptimizerIteration(ImageRegistrationMethod self) -> unsigned int | | GetOptimizerPosition(self) | GetOptimizerPosition(ImageRegistrationMethod self) -> VectorDouble | | GetOptimizerStopConditionDescription(self) | GetOptimizerStopConditionDescription(ImageRegistrationMethod self) -> std::string | | GetTransform(self) | GetTransform(ImageRegistrationMethod self) -> Transform | | SetFixedImageRegion(self, *args, **kwargs) | SetFixedImageRegion(ImageRegistrationMethod self, VectorUInt32 size, VectorUInt32 index) -> ImageRegistrationMethod | | SetInterpolator(self, *args, **kwargs) | SetInterpolator(ImageRegistrationMethod self, itk::simple::InterpolatorEnum Interpolator) -> ImageRegistrationMethod | | SetMetricAsKullbackLeiblerCompareHistogram(self, *args, **kwargs) | SetMetricAsKullbackLeiblerCompareHistogram(ImageRegistrationMethod self, double epsilon=1e-12, VectorUInt32 histogramSize=std::vector< unsigned int >(2,256u)) -> ImageRegistrationMethod | | SetMetricAsMatchCardinality(self, measureMatches=True, numberOfSpatialSamples=0) | SetMetricAsMatchCardinality(ImageRegistrationMethod self, bool measureMatches=True, uint64_t numberOfSpatialSamples=0) -> ImageRegistrationMethod | | SetMetricAsMattesMutualInformation(self, numberOfHistogramBins=50, useExplicitPDFDerivatives=True, numberOfSpatialSamples=0) | SetMetricAsMattesMutualInformation(ImageRegistrationMethod self, unsigned int numberOfHistogramBins=50, bool useExplicitPDFDerivatives=True, uint64_t numberOfSpatialSamples=0) -> ImageRegistrationMethod | | SetMetricAsMeanReciprocalSquareDifference(self, _lambda=1.0, delta=0.00011) | SetMetricAsMeanReciprocalSquareDifference(ImageRegistrationMethod self, double _lambda=1.0, double delta=0.00011) -> ImageRegistrationMethod | | SetMetricAsMeanSquares(self, numberOfSpatialSamples=0) | SetMetricAsMeanSquares(ImageRegistrationMethod self, uint64_t numberOfSpatialSamples=0) -> ImageRegistrationMethod | | SetMetricAsMeanSquaresHistogram(self, *args, **kwargs) | SetMetricAsMeanSquaresHistogram(ImageRegistrationMethod self, VectorUInt32 histogramSize=std::vector< unsigned int >(2,256u)) -> ImageRegistrationMethod | | SetMetricAsMutualInformation(self, fixedImageStandardDeviation=0.4, movingImageStandardDeviation=0.4, numberOfSpatialSamples=50) | SetMetricAsMutualInformation(ImageRegistrationMethod self, double fixedImageStandardDeviation=0.4, double movingImageStandardDeviation=0.4, | uint64_t numberOfSpatialSamples=50) -> ImageRegistrationMethod | | SetMetricAsNormalizedCorrelation(self, subtractMean=False) | SetMetricAsNormalizedCorrelation(ImageRegistrationMethod self, bool subtractMean=False) -> ImageRegistrationMethod | | SetMetricAsNormalizedMutualInformationHistogram(self, *args, **kwargs) | SetMetricAsNormalizedMutualInformationHistogram(ImageRegistrationMethod self, VectorUInt32 histogramSize=std::vector< unsigned int >(2,256u)) -> ImageRegistrationMethod | | SetOptimizerAsAmoeba(self, *args, **kwargs) | SetOptimizerAsAmoeba(ImageRegistrationMethod self, double simplexDelta, double parametersConvergenceTolerance=1e-8, double functionConvergenceTolerance=1e-4, | unsigned int numberOfIterations=100) -> ImageRegistrationMethod | | SetOptimizerAsConjugateGradient(self) | SetOptimizerAsConjugateGradient(ImageRegistrationMethod self) -> ImageRegistrationMethod | | SetOptimizerAsExhaustive(self, *args, **kwargs) | SetOptimizerAsExhaustive(ImageRegistrationMethod self, double stepLength, VectorUInt32 numberOfSteps) -> ImageRegistrationMethod | | SetOptimizerAsGradientDescent(self, *args, **kwargs) | SetOptimizerAsGradientDescent(ImageRegistrationMethod self, double learningRate, unsigned int numberOfIterations) -> ImageRegistrationMethod | | SetOptimizerAsLBFGS(self, *args, **kwargs) | SetOptimizerAsLBFGS(ImageRegistrationMethod self, double defaultStepLength, double gradientConvergenceTolerance, double lineSearchAccuracy, | unsigned int maximumNumberOfFunctionEvaluations) -> ImageRegistrationMethod | | SetOptimizerAsOnePlusOneEvolutionary(self, *args, **kwargs) | SetOptimizerAsOnePlusOneEvolutionary(ImageRegistrationMethod self, double initialRadius, double epsilon=1.5e-4, unsigned int numberOfIterations=100, | double growthFactor=1.05, double shrinkFactor=0.9878) -> ImageRegistrationMethod | | SetOptimizerAsRegularStepGradientDescent(self, *args, **kwargs) | SetOptimizerAsRegularStepGradientDescent(ImageRegistrationMethod self, double maxStep, double minStep, unsigned int numberOfIterations, double relaxationFactor=0.5) -> ImageRegistrationMethod | | SetOptimizerScales(self, *args, **kwargs) | SetOptimizerScales(ImageRegistrationMethod self, VectorDouble scales) -> ImageRegistrationMethod | | SetTransform(self, *args, **kwargs) | SetTransform(ImageRegistrationMethod self, Transform Transform) -> ImageRegistrationMethod | | __del__ lambda self | | __getattr__ lambda self, name | | __init__(self) | __init__(itk::simple::ImageRegistrationMethod self) -> ImageRegistrationMethod | | __repr__ = _swig_repr(self) | | __setattr__ lambda self, name, value | | __str__(self) | __str__(ImageRegistrationMethod self) -> std::string | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | __swig_destroy__ = <built-in function delete_ImageRegistrationMethod> | delete_ImageRegistrationMethod(ImageRegistrationMethod self) | | __swig_getmethods__ = {'GetGlobalDefaultDebug': <function <lambda>>, '... | | __swig_setmethods__ = {} | | ---------------------------------------------------------------------- | Methods inherited from ProcessObject: | | Abort(self) | Abort(ProcessObject self) | | AddCommand(self, *args) | AddCommand(ProcessObject self, itk::simple::EventEnum event, Command cmd) -> int | AddCommand(ProcessObject self, itk::simple::EventEnum e, PyObject * obj) -> int | | DebugOff(self) | DebugOff(ProcessObject self) | | DebugOn(self) | DebugOn(ProcessObject self) | | GetDebug(self) | GetDebug(ProcessObject self) -> bool | | GetNumberOfThreads(self) | GetNumberOfThreads(ProcessObject self) -> unsigned int | | GetProgress(self) | GetProgress(ProcessObject self) -> float | | HasCommand(self, *args, **kwargs) | HasCommand(ProcessObject self, itk::simple::EventEnum event) -> bool | | RemoveAllCommands(self) | RemoveAllCommands(ProcessObject self) | | SetDebug(self, *args, **kwargs) | SetDebug(ProcessObject self, bool debugFlag) | | SetNumberOfThreads(self, *args, **kwargs) | SetNumberOfThreads(ProcessObject self, unsigned int n) | | ---------------------------------------------------------------------- | Static methods inherited from ProcessObject: | | GetGlobalDefaultDebug() | GetGlobalDefaultDebug() -> bool | | GetGlobalDefaultNumberOfThreads() | GetGlobalDefaultNumberOfThreads() -> unsigned int | | GetGlobalWarningDisplay() | GetGlobalWarningDisplay() -> bool | | GlobalDefaultDebugOff() | GlobalDefaultDebugOff() | | GlobalDefaultDebugOn() | GlobalDefaultDebugOn() | | GlobalWarningDisplayOff() | GlobalWarningDisplayOff() | | GlobalWarningDisplayOn() | GlobalWarningDisplayOn() | | SetGlobalDefaultDebug(*args, **kwargs) | SetGlobalDefaultDebug(bool debugFlag) | | SetGlobalDefaultNumberOfThreads(*args, **kwargs) | SetGlobalDefaultNumberOfThreads(unsigned int n) | | SetGlobalWarningDisplay(*args, **kwargs) | SetGlobalWarningDisplay(bool flag) | | ---------------------------------------------------------------------- | Data descriptors inherited from ProcessObject: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
Load some basic 2D data.
fixedInputFilename = "/scratch/blowekamp/build/SimpleITK/ITK//Examples/Data/BrainProtonDensitySliceBorder20.png"
movingInputFilename = "/scratch/blowekamp/build/SimpleITK/ITK//Examples/Data/BrainProtonDensitySliceShifted13x17y.png"
fixedInput = sitk.ReadImage(fixedInputFilename)
fixed = sitk.VectorIndexSelectionCast(fixedInput,0,sitk.sitkFloat32)
myshow(fixed, dpi = 50, title="Fixed Image")
movingInput = sitk.ReadImage(movingInputFilename)
moving = sitk.VectorIndexSelectionCast(movingInput,0,sitk.sitkFloat32)
myshow(moving, dpi = 50, title="Moving Image")
cmyshow(fixed,moving, title="Fixed Red, Moving Green", dpi = 50)
Tx=sitk.Transform(fixed.GetDimension(), sitk.sitkTranslation)
R = sitk.ImageRegistrationMethod()
R.SetMetricAsMeanSquares()
R.SetOptimizerAsRegularStepGradientDescent(maxStep=4.0, minStep=.01, numberOfIterations=200 )
R.SetOptimizerScales([1.0, 1.0])
R.SetTransform(Tx)
R.SetInterpolator(sitk.sitkLinear)
<SimpleITK.ImageRegistrationMethod; proxy of <Swig Object of type 'itk::simple::ImageRegistrationMethod *' at 0x11c9ad900> >
outTx = R.Execute(fixed,moving)
print(outTx)
TranslationTransform (0x7ffa9ce17cf0) RTTI typeinfo: itk::TranslationTransform<double, 2u> Reference Count: 4 Modified Time: 1480 Debug: Off Object Name: Observers: none Offset: [13.0025, 17.0001]
Use the resample filter to transform the moving image onto the fixed.
resampler = sitk.ResampleImageFilter()
resampler.SetReferenceImage(fixed);
resampler.SetInterpolator(sitk.sitkLinear)
resampler.SetDefaultPixelValue(100)
resampler.SetTransform(outTx)
outImg = resampler.Execute(moving)
cmyshow(fixed,moving, title="Fixed Red, Moving Green", dpi = 50)
cmyshow(fixed,outImg, title="Fixed Red, Registered Moving Green", dpi = 50)
Without observing the convergence of the optimizer it doesn't seem like much is happening. We need to monitor each iteration and observe the "active measurements" available.
def command_iteration(method) :
print("{0} = {1} : {2}".format(method.GetOptimizerIteration(),
method.GetMetricValue(),
method.GetOptimizerPosition()),
end='\n');
sys.stdout.flush();
def command_end(R):
global Tx
print("-------")
print(Tx)
print("Optimizer stop condition: {0}".format(R.GetOptimizerStopConditionDescription()))
print(" Iteration: {0}".format(R.GetOptimizerIteration()))
print(" Metric value: {0}".format(R.GetMetricValue()))
sys.stdout.flush();
R.RemoveAllCommands()
R.AddCommand( sitk.sitkIterationEvent, lambda: command_iteration(R) )
R.AddCommand( sitk.sitkEndEvent, lambda: command_end(R) )
0
Tx= sitk.Transform(2, sitk.sitkTranslation)
R.SetTransform(Tx)
outTx = R.Execute(fixed,moving)
0 = -0.851645918615 : (2.928696004171517, 2.7244705384991397) 1 = -0.875550714105 : (5.684290060754387, 5.623901757777356) 2 = -0.891407115088 : (8.707529320641259, 8.243066582197287) 3 = -0.906176226736 : (12.41837663638211, 9.73625518356649) 4 = -0.927406571702 : (11.859938534969237, 13.697081724440299) 5 = -0.958222051264 : (13.734989566608117, 17.230378149699575) 6 = -0.992960438427 : (11.786657878211088, 16.778710537413755) 7 = -0.985550044845 : (12.777641094834342, 16.912696597774627) 8 = -0.999260444543 : (13.736015750698524, 17.19821020340002) 9 = -0.993023295627 : (13.245635031797065, 17.100605129097048) 10 = -0.999092945444 : (12.768093504230574, 16.95243600461606) 11 = -0.999274043819 : (13.015199970639388, 16.990362173140575) 12 = -0.999995608842 : (12.903248164663516, 17.045966068136703) 13 = -0.999848065618 : (12.961855951974316, 17.024254843700206) 14 = -0.999972553147 : (13.017816530570817, 16.996422063689135) 15 = -0.99999563857 : (12.986954299121543, 17.001329728100174) 16 = -0.999997773879 : (13.00252708209414, 17.000053383519596) ------- TranslationTransform (0x7ffa9b45a520) RTTI typeinfo: itk::TranslationTransform<double, 2u> Reference Count: 6 Modified Time: 2459 Debug: Off Object Name: Observers: none Offset: [13.0025, 17.0001] Optimizer stop condition: ScaledRegularStepGradientDescentOptimizer: Gradient magnitude tolerance met after 0 iterations. Gradient magnitude (2.59101e-05) is less than gradient magnitude tolerance (0.0001). Iteration: 18 Metric value: -0.999999918971
We can also interactively update a matplotlib figure.
from IPython.display import clear_output
import time
def command_plot_value_start(method):
global x, ax, f
x = []
f, ax = plt.subplots()
ax.set_yscale('log')
ax.set_title("Metric Value")
def command_plot_value_end(method):
global x, ax
del x
del ax
plt.close()
def command_plot_value(method):
global x, ax, f
v = method.GetMetricValue()
x.append(v)
if( len(ax.lines) > 0 ):
ax.lines.pop(0)
ax.plot(x,'r')
display(f)
R.RemoveAllCommands()
R.AddCommand( sitk.sitkIterationEvent, lambda: clear_output(stdout=True, stderr=False) )
R.AddCommand( sitk.sitkStartEvent, lambda: command_plot_value_start(R) )
R.AddCommand( sitk.sitkIterationEvent, lambda: command_plot_value(R) )
0
R.SetOptimizerAsAmoeba(simplexDelta=4,parametersConvergenceTolerance=0.01,functionConvergenceTolerance=0.01);
outTx = R.Execute(fixed, moving)
It can be nice to automatically resample the output upon completion completion.
def command_display(method, xf):
resampler = sitk.ResampleImageFilter()
resampler.SetReferenceImage(fixed);
resampler.SetInterpolator(sitk.sitkLinear)
resampler.SetDefaultPixelValue(100)
resampler.SetTransform(xf)
outImg = resampler.Execute(moving)
cmyshow(fixed,outImg, title="Iteration {0}".format(method.GetOptimizerIteration()), dpi = 50)
R.RemoveAllCommands()
R.AddCommand( sitk.sitkIterationEvent, lambda: command_iteration(R) )
R.AddCommand( sitk.sitkEndEvent, lambda: command_end(R) )
R.AddCommand( sitk.sitkEndEvent, lambda: command_display(R,Tx) )
outTx = R.Execute(fixed, moving)
1 = 0.00110199438757 : (12.999410711228848, 16.99848399311304) 2 = 2078.14303813 : (16.999410711228848, 16.99848399311304) 3 = 1698.04638225 : (12.999410711228848, 20.99848399311304) 4 = 2563.13281019 : (8.999410711228848, 20.99848399311304) 5 = 1232.99423029 : (14.999410711228848, 17.99848399311304) 6 = 919.931615168 : (12.999410711228848, 18.99848399311304) 7 = 1114.13024808 : (14.999410711228848, 16.99848399311304) 8 = 1466.88464571 : (10.999410711228848, 18.99848399311304) 9 = 461.209943107 : (13.999410711228848, 17.49848399311304) 10 = 357.70600822 : (12.999410711228848, 17.99848399311304) 11 = 438.851348119 : (13.999410711228848, 16.99848399311304) 12 = 649.006197192 : (11.999410711228848, 17.99848399311304) 13 = 127.549317937 : (13.499410711228848, 17.24848399311304) 14 = 88.8034917656 : (12.999410711228848, 17.49848399311304) 15 = 109.107904678 : (13.499410711228848, 16.99848399311304) 16 = 178.896414209 : (12.499410711228848, 17.49848399311304) 17 = 34.1810933317 : (13.249410711228848, 17.12348399311304) 18 = 22.0759929752 : (12.999410711228848, 17.24848399311304) 19 = 27.2385629139 : (13.249410711228848, 16.99848399311304) 20 = 50.3061007327 : (12.749410711228848, 17.24848399311304) 21 = 8.82185169468 : (13.124410711228848, 17.06098399311304) 22 = 5.45687822666 : (12.999410711228848, 17.12348399311304) 23 = 6.7907542397 : (13.124410711228848, 16.99848399311304) 24 = 13.419697786 : (12.874410711228848, 17.12348399311304) 25 = 2.21299404595 : (13.061910711228848, 17.02973399311304) 26 = 1.33347951403 : (12.999410711228848, 17.06098399311304) 27 = 1.68856545457 : (13.061910711228848, 16.99848399311304) 28 = 3.45742300537 : (12.936910711228848, 17.06098399311304) 29 = 0.539635498209 : (13.030660711228848, 17.01410899311304) 30 = 0.318319823122 : (12.999410711228848, 17.02973399311304) 31 = 0.417899949998 : (13.030660711228848, 16.99848399311304) 32 = 0.870416020827 : (12.968160711228848, 17.02973399311304) 33 = 0.126204747533 : (13.015035711228848, 17.00629649311304) 34 = 0.0723748940239 : (12.999410711228848, 17.01410899311304) 35 = 0.102674419709 : (13.015035711228848, 16.99848399311304) 36 = 0.214916545627 : (12.983785711228848, 17.01410899311304) 37 = 0.0273184046551 : (13.007223211228848, 17.00239024311304) 38 = 0.0148111585632 : (12.999410711228848, 17.00629649311304) 39 = 0.0250884600635 : (13.007223211228848, 16.99848399311304) 40 = 0.0519288688785 : (12.991598211228848, 17.00629649311304) 41 = 0.0050897154395 : (13.003316961228848, 17.00043711811304) 42 = 0.00238147310492 : (12.999410711228848, 17.00239024311304) 43 = 0.00630218161571 : (13.003316961228848, 16.99848399311304) 44 = 0.00110199438757 : (12.999410711228848, 16.99848399311304) ------- TranslationTransform (0x7ffa9ce36cf0) RTTI typeinfo: itk::TranslationTransform<double, 2u> Reference Count: 7 Modified Time: 3754 Debug: Off Object Name: Observers: none Offset: [12.9994, 16.9985] Optimizer stop condition: AmoebaOptimizer: Both parameters convergence tolerance (0.01) and function convergence tolerance (0.01) have been met in 55 iterations. Iteration: 44 Metric value: 0.00110199438757
Lets setup an eviroment to experiment and solve a slightly more complicated problem.
fixedInputFilename = "/scratch/blowekamp/build/SimpleITK/ITK//Examples/Data/BrainProtonDensitySliceBorder20.png"
movingInputFilename = "/scratch/blowekamp/build/SimpleITK/ITK//Examples/Data/BrainProtonDensitySliceR10X13Y17.png"
#movingInputFilename = "/scratch/blowekamp/build/SimpleITK/ITK//Examples/Data/BrainProtonDensitySliceR10X13Y17S12.png"
fixedInput = sitk.ReadImage(fixedInputFilename)
fixed = sitk.VectorIndexSelectionCast(fixedInput,0,sitk.sitkFloat32)
movingInput = sitk.ReadImage(movingInputFilename)
moving = sitk.VectorIndexSelectionCast(movingInput,0,sitk.sitkFloat32)
cmyshow(fixed,moving, title="Fixed Red, Moving Green", dpi = 50)
Tx = sitk.Transform(fixed.GetDimension(), sitk.sitkTranslation)
R = sitk.ImageRegistrationMethod()
R.SetMetricAsMeanSquares()
R.SetOptimizerAsRegularStepGradientDescent(maxStep=4.0, minStep=.01, numberOfIterations=200 )
R.SetOptimizerScales([1.0, 1.0])
R.SetTransform(Tx)
R.SetInterpolator(sitk.sitkLinear)
<SimpleITK.ImageRegistrationMethod; proxy of <Swig Object of type 'itk::simple::ImageRegistrationMethod *' at 0x11c7e2f00> >
R.RemoveAllCommands()
R.AddCommand( sitk.sitkIterationEvent, lambda: command_iteration(R) )
R.AddCommand( sitk.sitkEndEvent, lambda: command_end(R) )
R.AddCommand( sitk.sitkEndEvent, lambda: command_display(R,Tx) )
0
outTx = R.Execute(fixed, moving)
0 = 4224.31221719 : (2.7233738086993164, 2.9297158732700654) 1 = 3865.57566948 : (6.063479791353884, 5.130554809820209) 2 = 3478.76130663 : (9.466870947491982, 7.232203838159856) 3 = 2961.73708966 : (7.607696549573031, 10.773880073803468) 4 = 2653.27830176 : (10.863889726761485, 13.09706882912047) 5 = 1851.42161686 : (13.741324861093375, 15.875623677906512) 6 = 1427.78559894 : (17.16903184671785, 17.937376529414465) 7 = 2196.90766328 : (15.334738543699412, 17.140276737354704) 8 = 1609.63329831 : (13.576476914502244, 16.187115657949487) 9 = 1411.36664637 : (14.47339168546551, 15.744912205195087) 10 = 1427.81255345 : (13.990688729424917, 15.87528803205603) 11 = 1477.72810289 : (13.590266985572859, 16.174724881910013) 12 = 1412.90286991 : (13.815220126461996, 16.065655709344565) 13 = 1449.38035461 : (13.9914262363744, 15.888310264436786) 14 = 1480.06926193 : (13.886375454303282, 15.956054881833643) 15 = 1466.11044976 : (13.855033801182481, 16.077061909644655) 16 = 1454.99297559 : (13.872968516129657, 16.017190413924542) 17 = 1468.77773784 : (13.887677829973981, 15.956445981371186) 18 = 1466.47201135 : (13.877827143264005, 15.986102792921686) 19 = 1470.18262742 : (13.887689887023921, 15.973983927028947) ------- TranslationTransform (0x7ffaa08a42e0) RTTI typeinfo: itk::TranslationTransform<double, 2u> Reference Count: 6 Modified Time: 5195 Debug: Off Object Name: Observers: none Offset: [13.8877, 15.974] Optimizer stop condition: Iteration: 21 Metric value: 1469.90225763
Tx = sitk.Transform(outTx)
#Tx.AddTransform(sitk.Transform(fixed.GetDimension(),sitk.sitkEuler))
#Tx.AddTransform(sitk.Transform(fixed.GetDimension(),sitk.sitkAffine))
Tx.AddTransform(sitk.Transform(fixed.GetDimension(),sitk.sitkSimilarity))
print(Tx)
CompositeTransform (0x7ffa9b3d4df0) RTTI typeinfo: itk::CompositeTransform<double, 2u> Reference Count: 2 Modified Time: 32737 Debug: Off Object Name: Observers: none Transforms in queue, from begin to end: >>>>>>>>> TranslationTransform (0x7ffa9b3969e0) RTTI typeinfo: itk::TranslationTransform<double, 2u> Reference Count: 1 Modified Time: 32731 Debug: Off Object Name: Observers: none Offset: [13.8877, 15.974] >>>>>>>>> Similarity2DTransform (0x7ffa9b3c57d0) RTTI typeinfo: itk::Similarity2DTransform<double> Reference Count: 1 Modified Time: 32727 Debug: Off Object Name: Observers: none Matrix: 1 0 0 1 Offset: [0, 0] Center: [0, 0] Translation: [0, 0] Inverse: 1 0 0 1 Singular: 0 Angle = 0 Scale =1 End of MultiTransform. <<<<<<<<<< TransformsToOptimizeFlags, begin() to end(): 0 1 TransformsToOptimize in queue, from begin to end: End of TransformsToOptimizeQueue. <<<<<<<<<< End of CompositeTransform. <<<<<<<<<<
print(Tx.GetParameters())
print(Tx.GetFixedParameters())
(1.0, 0.0, 0.0, 0.0) (0.0, 0.0)
R.SetTransform(Tx)
R.SetMetricAsMeanSquares()
#R.SetOptimizerAsAmoeba(simplexDelta=1,parametersConvergenceTolerance=0.01,functionConvergenceTolerance=0.01,numberOfIterations=500)
R.SetOptimizerAsRegularStepGradientDescent(maxStep=1,minStep=.001,numberOfIterations=500)
#R.SetOptimizerScales([100.0, 1, 1])
#R.SetOptimizerScales([10]*6)
R.SetOptimizerScales([100,100,1,1])
R.SetInterpolator(sitk.sitkLinear)
R.DebugOn()
outTx2 = R.Execute(fixed, moving)
0 = 1469.90225763 : (1.0040552893069934, 0.00913207670561375, -0.030865539563287584, 0.025403843433368444) 1 = 1466.79776332 : (1.0018211813627895, 0.006119529815895209, 0.06722166232743534, -0.2903684323195443) 2 = 1400.97989184 : (1.001524661683723, 0.004915567265764465, 0.20956198041734722, -0.753363828003079) 3 = 1388.38533753 : (1.0012718934263627, 0.0073336693785240594, 0.15389813952470766, -0.7363215094851787) 4 = 1377.96332489 : (1.0022288917479998, 0.007191840079079597, 0.22751264657980602, -0.7654125901296526) 5 = 1379.21630602 : (1.002906107045729, 0.008177893949728173, 0.2618804229583746, -0.777015520526579) 6 = 1382.34351313 : (1.0024811270773664, 0.008269611431399074, 0.2766237764307319, -0.8194264015461125) 7 = 1377.13316193 : (1.002794881281938, 0.008408997121278837, 0.3194922046700434, -0.8492567073774939) 8 = 1377.05299214 : (1.0024574573806235, 0.008704133188329199, 0.3393613284099876, -0.8880106239445154) 9 = 1373.05391498 : (1.0028992307657736, 0.008953761320365768, 0.3737661548806672, -0.9001670475226867) 10 = 1374.05570608 : (1.002558701384411, 0.009268521765189653, 0.3914634069189285, -0.938150113464317) 11 = 1370.39739833 : (1.0029740477148708, 0.009577581549590094, 0.4235278312610806, -0.9522148724742006) 12 = 1370.54411455 : (1.0026713214045506, 0.009922631418502883, 0.44068707909464655, -0.9910064167051108) 13 = 1367.49076994 : (1.0029251971515065, 0.010251727778452189, 0.47623942458848545, -1.0212505506759033) 14 = 1365.85323052 : (1.0026899185255749, 0.01057899276440111, 0.49833791364128655, -1.0635981923233344) 15 = 1363.02406402 : (1.0027298563602505, 0.011011436169513158, 0.5234794630875254, -1.1008557982422285) 16 = 1361.12432108 : (1.0026407336379957, 0.011385307046009966, 0.5447380327293407, -1.1453203942444177) 17 = 1359.0212619 : (1.0026526448524182, 0.011750758041841319, 0.5682802377119286, -1.190209719375526) 18 = 1357.07229314 : (1.0026501232401377, 0.012075488706748762, 0.5924838624202854, -1.2378108844702986) 19 = 1355.01848194 : (1.002710034520916, 0.012434372847078705, 0.6165742790905925, -1.2825549337640607) 20 = 1353.17667997 : (1.002743730667969, 0.012728379815697083, 0.6427987935707024, -1.330957098602615) 21 = 1350.84515868 : (1.002800983076562, 0.013067330453359142, 0.6653904620362068, -1.3780125210885765) 22 = 1348.70776588 : (1.002941428436119, 0.013333038716484839, 0.6930013597787945, -1.4253478200176484) 23 = 1346.12412205 : (1.0030354162368165, 0.013630849477305954, 0.7192602588115029, -1.4726919924381514) 24 = 1343.65915142 : (1.0030824670555478, 0.013945952043213996, 0.7436091797280447, -1.5206330602646898) 25 = 1341.23316354 : (1.0031693249314912, 0.014257503766718879, 0.7686292699140167, -1.5678999346775708) 26 = 1338.74847043 : (1.0032302542929312, 0.014553755588357888, 0.7936286293863184, -1.6165466893162475) 27 = 1336.11069691 : (1.0032942894017254, 0.014837798062637212, 0.8195903600929029, -1.6653773386585284) 28 = 1333.43606083 : (1.0033595436408427, 0.015125026028857957, 0.8465586826151462, -1.7134541457209311) 29 = 1330.73628156 : (1.0034337721529925, 0.015402137477913464, 0.8741626075658457, -1.761633675141423) 30 = 1328.1162422 : (1.0035141263587497, 0.015680220407732936, 0.9022892626002514, -1.8093544477061785) 31 = 1325.49084453 : (1.0035901799524842, 0.015913768421015967, 0.9317353347003008, -1.8587091901489758) 32 = 1322.94977204 : (1.0037018064040542, 0.016191804352308922, 0.9613243628513006, -1.9048946313104396) 33 = 1320.51658437 : (1.003823205706197, 0.016431069916939996, 0.992671875173746, -1.9518384856622522) 34 = 1318.19486947 : (1.003982111304326, 0.01664962993872089, 1.0264923694939425, -1.9969187412245546) 35 = 1316.11735099 : (1.0041536754291553, 0.016847262838765233, 1.0625871510580527, -2.0407192734445516) 36 = 1314.16987086 : (1.0042279051558134, 0.017077284987083694, 1.0982345818251207, -2.0860106442489283) 37 = 1312.09517322 : (1.004308003585329, 0.017366136858971187, 1.1336268699437566, -2.127904848128343) 38 = 1309.93118351 : (1.004408403475189, 0.01764483945715707, 1.171237620283022, -2.168081068678846) 39 = 1307.88185547 : (1.0045074892628518, 0.017933131414065526, 1.209421237821129, -2.207054891872819) 40 = 1305.92344769 : (1.0045903921974257, 0.018233202227699703, 1.248199392329009, -2.2449145119898035) 41 = 1303.95171068 : (1.0046281368694003, 0.01856153253563325, 1.2864943964729152, -2.2816226601849396) 42 = 1301.84243679 : (1.0046509753951567, 0.01889534014448387, 1.324452153885661, -2.318310089535361) 43 = 1299.63428403 : (1.0046524824480765, 0.019225596240796155, 1.362853461737075, -2.3549280626046287) 44 = 1297.49303133 : (1.0046646430508839, 0.01957771227361984, 1.4008054889854316, -2.389921745169039) 45 = 1295.27403192 : (1.0046544065220326, 0.01990328639515007, 1.4394397034838868, -2.4266996531948677) 46 = 1293.05886391 : (1.0046786221371802, 0.020268057608069302, 1.477591552199229, -2.460079918347892) 47 = 1290.76409515 : (1.0046811175824657, 0.020629022161383865, 1.5152305926301965, -2.4945260542047403) 48 = 1288.33109923 : (1.0046725271036128, 0.02099890295355315, 1.5517587934755528, -2.529211563795552) 49 = 1285.90629305 : (1.004614531550775, 0.021357546392316244, 1.587209305642911, -2.565675589682778) 50 = 1283.37353072 : (1.004548595297246, 0.02170070672901111, 1.6224874434494407, -2.603631312977212) 51 = 1280.93391088 : (1.004515138052521, 0.022082846947144564, 1.6565545688837606, -2.639326909753924) 52 = 1278.59911262 : (1.0044294822755906, 0.022430305493964492, 1.6900603363747246, -2.678095066868286) 53 = 1276.25086443 : (1.0043736807814292, 0.022795144089597093, 1.7234684532558282, -2.71588312914092) 54 = 1274.08477378 : (1.00430725741776, 0.0231701620637248, 1.7556486175354251, -2.7535684258140054) 55 = 1272.03319276 : (1.004243828548639, 0.023527745647101504, 1.7887624300985263, -2.7921797326055513) 56 = 1270.00272459 : (1.0041884922521913, 0.023851682474017425, 1.8243575555999239, -2.8316672661467934) 57 = 1268.03878916 : (1.0041733371591581, 0.024172054679307907, 1.862397514158623, -2.8694896310276032) 58 = 1266.02755812 : (1.0041347250100905, 0.0244814079944926, 1.9006664423399933, -2.9078280636916456) 59 = 1263.95898868 : (1.0040965474835903, 0.02481143817733266, 1.9383270663280643, -2.945032269766739) 60 = 1261.88770879 : (1.0040705639946006, 0.02510203567285572, 1.9789265612088094, -2.9825384099891723) 61 = 1259.74754112 : (1.0040257832979225, 0.025426972506968452, 2.0176120028528417, -3.0190595550317947) 62 = 1257.64382097 : (1.0039565470727252, 0.025749523036697242, 2.0554465729938505, -3.0562948918929833) 63 = 1255.63992552 : (1.0038985244017227, 0.026074493305745218, 2.093917341552595, -3.092853432691897) 64 = 1253.59047575 : (1.0038684783935603, 0.026391095216794825, 2.1342739462217564, -3.128437124640729) 65 = 1251.44426657 : (1.0038663243641397, 0.026713301614350503, 2.1753348450222476, -3.162817883285795) 66 = 1249.24026312 : (1.0039054328104995, 0.0270184316004141, 2.2184493711654145, -3.195999954434711) 67 = 1247.06663076 : (1.0039448258248, 0.027330796233898117, 2.261579897798544, -3.2284772223936384) 68 = 1244.60943571 : (1.003987435783865, 0.0276349921768039, 2.3059625975695863, -3.259987826293198) 69 = 1242.24189357 : (1.003998606531978, 0.027933065719608876, 2.3498553078849658, -3.293002273976493) 70 = 1239.93176174 : (1.0039863993208815, 0.028266546054785097, 2.392438578698958, -3.324296579325266) 71 = 1237.68517515 : (1.003977167250339, 0.02858605680803935, 2.435609013445563, -3.356247166770149) 72 = 1235.42630806 : (1.0039439439006135, 0.028920401087777117, 2.4772468902649862, -3.388552558431092) 73 = 1233.1510965 : (1.0039147819592484, 0.029218657721351373, 2.520883074083673, -3.4217799429021802) 74 = 1230.93881916 : (1.003900357459608, 0.02955013503860414, 2.563507634857207, -3.453221063086322) 75 = 1228.77147314 : (1.0038464586657752, 0.029863613035441553, 2.6060814488796833, -3.4861146037106048) 76 = 1226.64079786 : (1.003767065344193, 0.030176077599972623, 2.6480565644769096, -3.5193556270794053) 77 = 1224.72659118 : (1.0036688222777093, 0.030466313461927977, 2.6907391321939893, -3.5532017916524516) 78 = 1222.8723838 : (1.0035869175160599, 0.030743691935166774, 2.7348211053312124, -3.586766022171829) 79 = 1220.92552677 : (1.0034916237667317, 0.0310565270324687, 2.7766387735711135, -3.6197518623965097) 80 = 1219.17614316 : (1.0034207198386467, 0.03139978025230441, 2.8178498843695694, -3.651047116785994) 81 = 1217.48301181 : (1.0033508847259958, 0.03171707825688813, 2.859927590909878, -3.6839130101344164) 82 = 1215.74983319 : (1.003302825526762, 0.03203461277098906, 2.9027492182807957, -3.716180326207236) 83 = 1213.79565262 : (1.0032896434864516, 0.03232403476810166, 2.947679983288259, -3.748554509901194) 84 = 1211.60295631 : (1.0032614578847727, 0.032646872673578874, 2.9914098599808647, -3.779275194641291) 85 = 1209.63114267 : (1.0032435371743122, 0.0329643659120272, 3.035125475492355, -3.810643393142534) 86 = 1207.60648638 : (1.0032262486767352, 0.03326759181556286, 3.0790634344248513, -3.84309731983271) 87 = 1205.53513968 : (1.0031991687391666, 0.03360265912744038, 3.121895925864348, -3.8737827139479886) 88 = 1203.54510833 : (1.0032081858152946, 0.033932307349128804, 3.1652107180177573, -3.9044842807396782) 89 = 1201.40787315 : (1.0031896554903352, 0.034221066763901534, 3.2096397491335957, -3.9375759332894984) 90 = 1199.28049518 : (1.0031578142352773, 0.03456729021185782, 3.2517729207392794, -3.967943686516596) 91 = 1197.43877762 : (1.003206783687425, 0.034855026408670255, 3.2975208991905998, -3.998951285675838) 92 = 1194.97564831 : (1.0032226248196008, 0.035155419578887924, 3.3429909368688673, -4.02951033820887) 93 = 1192.67004718 : (1.0032637392886754, 0.03546508575026257, 3.388512237202685, -4.058805830068661) 94 = 1190.3472983 : (1.0032361639013267, 0.03574524604067193, 3.433968958361292, -4.091169924346298) 95 = 1188.13778657 : (1.0032108303691785, 0.036073775701395625, 3.4774806309115633, -4.121620689420671) 96 = 1186.01073203 : (1.0032452050652778, 0.03635443157522618, 3.5241462320316037, -4.152101474837554) 97 = 1183.60409012 : (1.0032523532281292, 0.03665351017087363, 3.5694617533673076, -4.1830492130425885) 98 = 1181.37968769 : (1.003245058497453, 0.03700945511388685, 3.611588725988673, -4.212444247014937) 99 = 1179.17185044 : (1.0032528686874682, 0.03730907795859536, 3.6564476048339136, -4.243997099617437) 100 = 1176.94006969 : (1.0032567739531348, 0.03764087140424133, 3.699315336630997, -4.275103146518929) 101 = 1174.66106899 : (1.003229208918659, 0.037938724719257313, 3.742850010501761, -4.308512993675861) 102 = 1172.37614903 : (1.0032454298794762, 0.038256544511256436, 3.7870142355055374, -4.339222044984129) 103 = 1169.98614426 : (1.0032282931655145, 0.03860716913302245, 3.828087796507957, -4.370637004208055) 104 = 1167.75063506 : (1.0032647186404737, 0.03888801291620229, 3.8739394323025422, -4.402289445459765) 105 = 1165.26839609 : (1.0032068541911117, 0.03925918974946166, 3.912328044499545, -4.434248154649965) 106 = 1163.17827121 : (1.0032504779328715, 0.039593294241427, 3.954834717686806, -4.465298827921022) 107 = 1160.80135257 : (1.0032564990265576, 0.03992827964624195, 3.9964958946392724, -4.497672916091242) 108 = 1158.64626535 : (1.003244625872316, 0.04025451081036709, 4.037855491252852, -4.531287739095106) 109 = 1156.24145509 : (1.0032177542974652, 0.040576144780937975, 4.078789818783328, -4.565768543958481) 110 = 1153.98859486 : (1.0032492183063004, 0.04088038836497489, 4.122192291818517, -4.598737224727258) 111 = 1151.59334651 : (1.0032182506919207, 0.04122980965718629, 4.1613840717463955, -4.632496846469426) 112 = 1149.33968853 : (1.003248647195613, 0.041533162203602154, 4.204637449166724, -4.665752345160582) 113 = 1147.00691318 : (1.0032171692950733, 0.04186895520372293, 4.244742454581665, -4.699816410818437) 114 = 1144.70885326 : (1.0031654984750527, 0.04217994933402901, 4.286072881165166, -4.734517615569303) 115 = 1142.41181805 : (1.0031584951902144, 0.04245239908898219, 4.330319777203442, -4.769240562466884) 116 = 1140.03421213 : (1.003117876343956, 0.04278529429948423, 4.371467376571758, -4.802231984802986) 117 = 1137.76359898 : (1.0031096449065644, 0.04308345185682923, 4.415059618398713, -4.835643204428519) 118 = 1135.41638378 : (1.0030510417279557, 0.04339383557579031, 4.456782973140695, -4.869814651773971) 119 = 1133.12329502 : (1.0030059644752807, 0.04372271491022997, 4.4983311113179045, -4.902648574182136) 120 = 1130.75632621 : (1.0029812234883744, 0.04403570556170556, 4.541148306602099, -4.935621064906269) 121 = 1128.40457957 : (1.0029170296217194, 0.044365970119893815, 4.581923734514499, -4.968962618101144) 122 = 1126.09043188 : (1.0028902241159405, 0.044663495821898026, 4.625400131643149, -5.002483538550623) 123 = 1123.75888105 : (1.0028556809655491, 0.044945035252776724, 4.669418578503275, -5.036601708669163) 124 = 1121.39680836 : (1.0027585236065226, 0.04526178753104323, 4.710140186698803, -5.070517561068442) 125 = 1119.31595496 : (1.0027358316830552, 0.045547296165182924, 4.754540970949183, -5.103901978426868) 126 = 1117.0241094 : (1.0026644180614304, 0.04586617273408443, 4.796097183672862, -5.137241286586826) 127 = 1114.8656247 : (1.0026661088452185, 0.04619660522187716, 4.83881488943978, -5.168698602693321) 128 = 1112.43478081 : (1.0026487077361133, 0.046477293963332666, 4.883583928822161, -5.202031670823918) 129 = 1110.14261896 : (1.0026009969534397, 0.046770082099208396, 4.9275988669882596, -5.235030505732222) 130 = 1107.83262592 : (1.0025653908770102, 0.047079096265480826, 4.971244479212452, -5.267182256185625) 131 = 1105.50874975 : (1.0025166684915854, 0.04741284380054884, 5.013004143870727, -5.299194246557573) 132 = 1103.2913289 : (1.0024309775491937, 0.04774563891134203, 5.053609060501247, -5.332004847156621) 133 = 1101.32934278 : (1.0024140480708736, 0.04806554969351797, 5.097217328375815, -5.363282216213077) 134 = 1098.98035782 : (1.002355877613489, 0.048398074927172685, 5.1389590117721875, -5.395287114837233) 135 = 1096.93281347 : (1.0023235686157426, 0.04872526325962662, 5.181863149512418, -5.426664243489703) 136 = 1094.70802684 : (1.0023513707595808, 0.049016372597543954, 5.227932982323201, -5.457137911574457) 137 = 1092.17233806 : (1.002307793028607, 0.049374634345148355, 5.269066181120349, -5.487334020137987) 138 = 1090.050057 : (1.0023001330379395, 0.04971457143909981, 5.312314106334654, -5.516993890866735) 139 = 1087.76900586 : (1.002366819412484, 0.05003858115575369, 5.357424005962306, -5.544869566019509) 140 = 1085.2682922 : (1.0023188300672718, 0.05036364947669536, 5.400547777387098, -5.575964041939919) 141 = 1083.04369951 : (1.0022814968325282, 0.050684313733145095, 5.443890660067011, -5.607355938397229) 142 = 1080.90863944 : (1.0023070278847512, 0.051017791478172175, 5.488780036204443, -5.6351516484876845) 143 = 1078.5021365 : (1.0023666207384638, 0.05133783424639008, 5.5346971637803675, -5.662319286923045) 144 = 1075.95547239 : (1.0023921167961685, 0.05168304542676027, 5.578604536920895, -5.690251069962944) 145 = 1073.70798778 : (1.002433402800894, 0.05195975763293124, 5.625860408471705, -5.720090487042897) 146 = 1071.22964002 : (1.0024649427615526, 0.05229381090688379, 5.67066781351685, -5.7478876607041265) 147 = 1068.902772 : (1.0024576365838709, 0.052596681068295716, 5.716172426684736, -5.7781819346083) 148 = 1066.80124067 : (1.0024332232843742, 0.052945485000058266, 5.758587011184002, -5.807925019547515) 149 = 1064.48940551 : (1.0024122998491314, 0.05323377108088455, 5.804807140458042, -5.838494335936429) 150 = 1062.18820952 : (1.0023707400216781, 0.053557927233133386, 5.848483878874971, -5.86899922436881) 151 = 1060.03454333 : (1.0023392923699737, 0.05385241525631341, 5.893266610074686, -5.900993528242344) 152 = 1057.88883539 : (1.0023187742257518, 0.05412416486572588, 5.9397751685813285, -5.932624455213473) 153 = 1055.59475213 : (1.00228363956708, 0.054471502922989086, 5.982291980049574, -5.962285693217645) 154 = 1053.45328768 : (1.0022024645108127, 0.0547874761405191, 6.024130348232914, -5.995323797100779) 155 = 1051.41334043 : (1.0021073879182307, 0.05511590126104565, 6.064559220842529, -6.028531176958523) 156 = 1049.46614404 : (1.0021113330469902, 0.05542738673456614, 6.109455155854589, -6.05886626187419) 157 = 1047.1464125 : (1.0020426848625474, 0.05577317722644699, 6.150014317593811, -6.090778140916118) 158 = 1045.10791523 : (1.0020024331294155, 0.056056828778346335, 6.194343647972135, -6.124250165340391) 159 = 1042.86707537 : (1.0020556159880434, 0.05639036013693317, 6.238530211463356, -6.152764754075112) 160 = 1040.43950567 : (1.0020567344085844, 0.05668537227077087, 6.283692562906338, -6.184328624439515) 161 = 1038.10457632 : (1.0020390117112243, 0.05697871218097341, 6.329047558553935, -6.215722101478749) 162 = 1035.76471669 : (1.0020022375783497, 0.057286896630593206, 6.372659120572157, -6.247986350113567) 163 = 1033.4767093 : (1.001954150237584, 0.05765101685281007, 6.4125637747450295, -6.279049339178556) 164 = 1031.33228887 : (1.0019778959837686, 0.057959824924433745, 6.45728796803412, -6.309818376846674) 165 = 1028.86080943 : (1.0019836354249032, 0.05828256918060172, 6.500763293004198, -6.341030204060193) 166 = 1026.48450588 : (1.0019921506689167, 0.05858894707010841, 6.54540572282831, -6.372237643138199) 167 = 1024.05868499 : (1.0020776113987855, 0.058896736768314896, 6.5909294090967165, -6.400758927152388) 168 = 1021.493027 : (1.0019308831302947, 0.05921585408864033, 6.628702626659874, -6.436054586175366) 169 = 1019.37996745 : (1.00197323342832, 0.05951437921799723, 6.674229001267148, -6.466460033205698) 170 = 1016.86269151 : (1.0019129681624466, 0.05984294226329013, 6.715805147009081, -6.499045587293608) 171 = 1014.50105101 : (1.001917611865379, 0.06016112329855072, 6.759188488515132, -6.530850120429704) 172 = 1011.98816626 : (1.00195463878687, 0.060507993320616286, 6.8015993114712066, -6.560694283091098) 173 = 1009.54275704 : (1.0019013434311579, 0.06080635353626614, 6.844554559249391, -6.594495238049258) 174 = 1006.97877469 : (1.0019317997131718, 0.06114663771465148, 6.887485587736086, -6.624427957961413) 175 = 1004.44690514 : (1.0019446116545432, 0.061494631904893515, 6.929570565074374, -6.6548000448109645) 176 = 1001.88603599 : (1.0019797782786726, 0.06178989929807149, 6.974580264970462, -6.68636239050954) 177 = 999.208781877 : (1.0019714087002165, 0.06215397109882547, 7.014730097731945, -6.717476015655884) 178 = 996.681623824 : (1.0019400665193796, 0.06242685375018029, 7.058774367720962, -6.752288075980348) 179 = 994.156481844 : (1.0020452470891146, 0.06265443266208039, 7.107936783248889, -6.781626715443442) 180 = 991.157786546 : (1.0018621034822908, 0.06304165299735252, 7.140195484886374, -6.813733015152022) 181 = 989.207742908 : (1.0019377260800408, 0.063356646485198, 7.184842516510722, -6.84311831454439) 182 = 986.486056324 : (1.0019175222519525, 0.06368090577751544, 7.227196771502328, -6.875627455579947) 183 = 983.96203403 : (1.0018898313762405, 0.06398944935984274, 7.269322390673899, -6.909862276179465) 184 = 981.379167673 : (1.0018371094180873, 0.06431070444339922, 7.310263257700618, -6.944071208803512) 185 = 978.927461005 : (1.001841229061691, 0.06461748664031385, 7.354103354229242, -6.976366302212405) 186 = 976.339992245 : (1.0017541973224127, 0.06495339765560185, 7.3939566431706245, -7.009740813777646) 187 = 974.03459028 : (1.0017481490126163, 0.06525074573656951, 7.4377223004947295, -7.043001791002069) 188 = 971.376107955 : (1.0016685001004235, 0.06554343489778458, 7.479831301086475, -7.077829554727316) 189 = 968.88540767 : (1.001680437356879, 0.06588399087696241, 7.522231234838031, -7.108607580775278) 190 = 966.400346311 : (1.00167696630422, 0.06616536172255606, 7.567165155098547, -7.141704057936075) 191 = 963.684732451 : (1.0016366817640836, 0.06647322766095172, 7.6108432151988135, -7.173866680091228) 192 = 961.2405571 : (1.001586332939878, 0.06686435887296488, 7.6475557317632585, -7.205540878366915) 193 = 958.821064946 : (1.001637464863456, 0.06712037448821113, 7.69374764076351, -7.238570756573251) 194 = 955.957993892 : (1.001639300651063, 0.06745715706214338, 7.736653330689418, -7.26908457393156) 195 = 953.359428206 : (1.0015262652296324, 0.06776345844367256, 7.777037775272298, -7.30386058876198) 196 = 950.90377455 : (1.0015894103478735, 0.06808015522351271, 7.8214354148211385, -7.3337312773931975) 197 = 948.146245359 : (1.001628904372424, 0.06839089102936369, 7.866207320806125, -7.3640720295978) 198 = 945.497630383 : (1.0015766547251426, 0.06870667854252382, 7.908367978139832, -7.397301702814682) 199 = 942.852424255 : (1.0016154524785654, 0.06898812517730335, 7.953735509835251, -7.429564100879167) 200 = 940.089348783 : (1.0016106970245013, 0.06930641001732105, 7.99733269450961, -7.46106421121525) 201 = 937.417154133 : (1.0016370238338976, 0.06961970888349837, 8.041009313463775, -7.492846441349758) 202 = 934.725013767 : (1.0015840192348087, 0.0699461092988865, 8.08209682957782, -7.526381480229664) 203 = 932.071008576 : (1.00161127079371, 0.07026913240283353, 8.126453179884242, -7.556179105236244) 204 = 929.366837345 : (1.0016444854131215, 0.07059152917476633, 8.17059608296737, -7.586299284725087) 205 = 926.706726852 : (1.0016232031098713, 0.0709075725019169, 8.213644526624096, -7.61869864101581) 206 = 924.086843348 : (1.00158683433758, 0.07125981425792798, 8.254442219031986, -7.650128386026449) 207 = 921.53481619 : (1.001585905793249, 0.07158958855015468, 8.297750625267357, -7.680838522614719) 208 = 918.809644278 : (1.0015122774851577, 0.07187411166012675, 8.34040880357422, -7.7158068589339415) 209 = 916.230803146 : (1.0016073508864827, 0.07215702572993545, 8.387207607550868, -7.744535393894904) 210 = 913.552085098 : (1.0015523845446435, 0.07252110662482499, 8.42825543301831, -7.773955863925257) 211 = 911.048319254 : (1.0014901607500195, 0.07284237096364503, 8.47098405075881, -7.805731475104861) 212 = 908.48009743 : (1.0015368187305156, 0.0731666405854885, 8.515545716055538, -7.834838698229674) 213 = 905.944435927 : (1.0015084175835203, 0.07350303199514371, 8.558320749269493, -7.865447332258986) 214 = 903.364708846 : (1.0014662005333184, 0.07382557578114846, 8.601530962634337, -7.89676760889864) 215 = 900.751497553 : (1.0014825557823188, 0.07414300145034927, 8.646435252280188, -7.926425479271055) 216 = 898.170802809 : (1.0014502259375804, 0.07447567024657717, 8.688998934165333, -7.957689604333734) 217 = 895.637372414 : (1.0014079290496012, 0.07481959679419066, 8.730707549880492, -7.9887684782879935) 218 = 893.130075262 : (1.0013894356755555, 0.07515364212267706, 8.773290363568474, -8.019972181830086) 219 = 890.565396355 : (1.0013820388134662, 0.07546271484578321, 8.8175918242568, -8.051401848762946) 220 = 887.932019297 : (1.001328733668944, 0.07578639031525868, 8.860506615992545, -8.08284223951355) 221 = 885.286735179 : (1.0012631006233952, 0.07616196935986147, 8.899386079051949, -8.113517379253816) 222 = 882.944219947 : (1.0012718613088847, 0.07642380966747105, 8.94580217440452, -8.146158229874285) 223 = 880.154629354 : (1.0012933232492367, 0.0767119705409601, 8.991604653157925, -8.177357747516506) 224 = 877.365984416 : (1.0012889017103408, 0.07703435768534977, 9.03599811739607, -8.207290006438896) 225 = 874.814423373 : (1.0013059443557724, 0.07736680407367973, 9.080121190227866, -8.23646694793575) 226 = 872.208806657 : (1.0012451472520842, 0.07765684562062644, 9.124098337881723, -8.269543474605124) 227 = 869.457658655 : (1.0012522181006591, 0.07795982896042467, 9.169103817094388, -8.300563916734303) 228 = 866.780183426 : (1.0011941355949803, 0.07828419706989445, 9.211459750328892, -8.332600496463808) 229 = 864.117183562 : (1.0012174859720837, 0.07857608893117726, 9.25763877891862, -8.362870718309193) 230 = 861.40477439 : (1.0011916078541663, 0.07889517342392921, 9.301509549713392, -8.393802248579378) 231 = 858.69721891 : (1.0012063813513914, 0.07921200189718547, 9.346652831060895, -8.42316802410666) 232 = 855.983121579 : (1.0011923672456, 0.07952067799714267, 9.391465826357463, -8.453880760130833) 233 = 853.24838391 : (1.001166761957801, 0.07981928267542751, 9.43596600638986, -8.485939770260837) 234 = 850.528397344 : (1.0011846154733708, 0.08011480449945989, 9.481479988566441, -8.516894712700672) 235 = 847.736822569 : (1.0011756829722793, 0.08042450823038484, 9.526654814254748, -8.54698662554757) 236 = 844.991999889 : (1.0011412117386749, 0.0807414532833098, 9.57068311079764, -8.577830340925795) 237 = 842.243627462 : (1.0011124736588652, 0.08108411155195926, 9.613163795252815, -8.608149242376378) 238 = 839.447767351 : (1.001142810638509, 0.0813556581315115, 9.659926067522957, -8.639341567075393) 239 = 836.679123139 : (1.0011461114177829, 0.08168361117110634, 9.70409769132043, -8.668997540130773) 240 = 833.813205174 : (1.0011546375038969, 0.08197016456410225, 9.749858770749995, -8.700466861661784) 241 = 831.00175598 : (1.0011687563651404, 0.08229130510107863, 9.794657112394438, -8.729895635312495) 242 = 828.27510141 : (1.0011443908046331, 0.08260163122426634, 9.839242973838799, -8.760707826512553) 243 = 825.374070824 : (1.0011350789629285, 0.08293792575853143, 9.882692119110336, -8.79048389968293) 244 = 822.521643062 : (1.00112488407565, 0.0832417667222181, 9.92737110921273, -8.821881434204347) 245 = 819.657397055 : (1.001105560736761, 0.08354841097049917, 9.971445873480585, -8.853812990546563) 246 = 816.723069547 : (1.001092007067104, 0.08387789660089455, 10.014504388271353, -8.884873729076597) 247 = 813.762150166 : (1.0010837374783763, 0.08420042207222306, 10.057993829183143, -8.916082828256899) 248 = 810.792299457 : (1.0010357497878413, 0.08450927568928793, 10.101143986581903, -8.948753612824962) 249 = 807.818057302 : (1.0010826724073068, 0.08481344161301747, 10.146584183320732, -8.9786576611559) 250 = 804.921451734 : (1.0010650749924253, 0.0851165223450357, 10.19052362959784, -9.011121472847522) 251 = 801.969928518 : (1.0010379600224344, 0.08545311547784305, 10.232660847501709, -9.042592146192957) 252 = 798.967564818 : (1.0010038798439906, 0.08576445900549984, 10.275793460730121, -9.075224418077136) 253 = 796.009926377 : (1.0010248134763848, 0.08607487278392748, 10.320384437012418, -9.106045604396973) 254 = 793.087285374 : (1.000982457646948, 0.08641485862300745, 10.361850080548635, -9.137873367992698) 255 = 790.154175523 : (1.000952341779107, 0.08672078733082356, 10.405365041167455, -9.170549120542933) 256 = 787.20651268 : (1.0009854926507833, 0.0870420439583211, 10.450275676509872, -9.199639270475522) 257 = 784.382894522 : (1.0009523255567991, 0.08736087362927478, 10.494356039435386, -9.230227625323684) 258 = 781.463765813 : (1.0008908963664915, 0.08767687007622224, 10.537743205440348, -9.261652628537767) 259 = 778.584055507 : (1.0009145039613812, 0.0880136703623641, 10.581914639106532, -9.290204632584013) 260 = 775.787422376 : (1.0008676196344368, 0.08835427932982678, 10.624269102028121, -9.320704196225703) 261 = 772.866528857 : (1.0008475225655884, 0.08868902952598283, 10.667839083438531, -9.350424405845901) 262 = 770.022480837 : (1.0008452119876687, 0.08899185723488662, 10.713289512999138, -9.380812048930778) 263 = 767.151003049 : (1.0008050885384854, 0.0893138246621748, 10.757158069225605, -9.411292708709004) 264 = 764.292921402 : (1.000838382736489, 0.08965814827123332, 10.801547154148023, -9.438480695504504) 265 = 761.482172222 : (1.0008025836345271, 0.09000015367613376, 10.844192773366364, -9.468565715608541) 266 = 758.667650213 : (1.0007756275147799, 0.09031685324043406, 10.888633451776304, -9.498914086870704) 267 = 755.933980911 : (1.0007606260489468, 0.09063141779944263, 10.933689883230008, -9.528653100422666) 268 = 753.227574051 : (1.0007825314435366, 0.09096668531062811, 10.978442268074648, -9.556485321804201) 269 = 750.27708887 : (1.0007288740122933, 0.09130695818537508, 11.020953037995387, -9.586691893085698) 270 = 747.413752852 : (1.000735794821067, 0.09160197129380132, 11.067182752655336, -9.616662831761117) 271 = 744.534203691 : (1.0007077596742444, 0.09192779692758854, 11.111222907178119, -9.646616657204744) 272 = 741.687751165 : (1.0006965299525026, 0.09221857904889559, 11.157621048591473, -9.676727435775947) 273 = 738.760237333 : (1.000670513827023, 0.0925642777211838, 11.200677719595566, -9.705891265668082) 274 = 735.931809382 : (1.000678879581842, 0.09285675786558714, 11.247394198598881, -9.735347578782486) 275 = 733.007556702 : (1.0006778659592555, 0.09317048785824993, 11.292759033604813, -9.764741564351226) 276 = 730.137889946 : (1.0006646380242297, 0.09347328282974694, 11.338402636281788, -9.794813375144345) 277 = 727.228938077 : (1.0006775523862153, 0.09377698304564382, 11.384375245347178, -9.824288164319299) 278 = 724.27898025 : (1.0006504168327022, 0.09409824971144118, 11.428782823695846, -9.854200217024468) 279 = 721.364149995 : (1.0006536950118523, 0.09442616086290624, 11.47338975280647, -9.883202064865301) 280 = 718.445232043 : (1.000639606447922, 0.09472165626960621, 11.519219811701454, -9.913709366803335) 281 = 715.485101677 : (1.0006353671896409, 0.09502793292578215, 11.564517848409295, -9.943976581014823) 282 = 712.408351372 : (1.000633259550504, 0.0953609716305213, 11.608485468853226, -9.973368861336835) 283 = 709.480733849 : (1.0006623711677787, 0.09564063328196572, 11.655954040298973, -10.002735568156131) 284 = 706.451256306 : (1.0006575757883118, 0.09596852241650267, 11.700148446110688, -10.032362611424626) 285 = 703.422479383 : (1.0006597067496104, 0.09626631937570851, 11.746257177431987, -10.062251726447611) 286 = 700.367532808 : (1.00065157742082, 0.0965893482959439, 11.791332171729863, -10.09106764559131) 287 = 697.335688559 : (1.0006093115280756, 0.09693072872939681, 11.83414228438458, -10.120905108522175) 288 = 694.273599386 : (1.000602583737249, 0.09724150363188959, 11.87898550187152, -10.151385804274256) 289 = 691.112282743 : (1.0005817447629004, 0.09755399416503673, 11.923140692156668, -10.182622372736517) 290 = 688.052696329 : (1.0005651137279927, 0.09787152779306489, 11.967278785725657, -10.213396334678178) 291 = 684.940648137 : (1.00060984356739, 0.09818014012429944, 12.013228087298442, -10.242075393061395) 292 = 681.874305705 : (1.0005868477601698, 0.09850162249417879, 12.05705755877278, -10.27283949905118) 293 = 678.750658959 : (1.0005838165060064, 0.09881249327258333, 12.101761721370083, -10.303519941564245) 294 = 675.670194117 : (1.0005358362768617, 0.09915037443375216, 12.144158255403378, -10.334246576384023) 295 = 672.525145215 : (1.0005574125519698, 0.09945524681810776, 12.189998226924391, -10.363756234922382) 296 = 669.431669631 : (1.0005729587221714, 0.09979451737081836, 12.233544925348978, -10.39302179732725) 297 = 666.295569311 : (1.000551218585538, 0.10012129406495499, 12.276989435768966, -10.42378326836897) 298 = 663.274230472 : (1.0005713748833855, 0.1004396852253079, 12.321644528308223, -10.453689465669406) 299 = 660.283220039 : (1.0005841374314555, 0.10073965949566854, 12.366764096662461, -10.484818232050534) 300 = 657.243434299 : (1.0005640659637396, 0.10107069072861169, 12.409593042483358, -10.515996525619448) 301 = 654.162124009 : (1.0005445285684154, 0.10137923859133843, 12.453896108804662, -10.547423478708113) 302 = 651.10485884 : (1.0005517868887235, 0.1017043265418647, 12.497940523243125, -10.57757295579914) 303 = 648.113344655 : (1.0005673888442355, 0.10201546264099769, 12.542968089907548, -10.607710595193858) 304 = 645.153546898 : (1.00053815591664, 0.10231571729736455, 12.587572350141485, -10.639438118603751) 305 = 642.105353941 : (1.000522717197704, 0.1026448080437139, 12.630748949565717, -10.670367724621416) 306 = 639.073444551 : (1.0004984044630318, 0.10296418305223504, 12.674126517505494, -10.701970280661692) 307 = 636.028322984 : (1.000520434873575, 0.10331322633491344, 12.716741288067839, -10.731416261851026) 308 = 633.091275799 : (1.0005568687435653, 0.10361259801279202, 12.762204341568676, -10.761909744472677) 309 = 630.182497976 : (1.0005308664272217, 0.10394136184776173, 12.805639919405122, -10.792438137512953) 310 = 627.127184299 : (1.0005314822466689, 0.10423758659591296, 12.85113608104852, -10.823403512841042) 311 = 624.11733628 : (1.0005371310110522, 0.10457950754408728, 12.894161558498475, -10.853163214734854) 312 = 621.148843668 : (1.0005400661961816, 0.10490130983975843, 12.938134998098676, -10.883772580648213) 313 = 618.090121021 : (1.0005267184149726, 0.10523487283906266, 12.981337269557935, -10.914192793715843) 314 = 615.085414096 : (1.0005327780995665, 0.10554540977454126, 13.026378161941068, -10.94440651464844) 315 = 612.032179831 : (1.0005301497803079, 0.10586622255935015, 13.070879567827014, -10.974349750355103) 316 = 609.013409561 : (1.0005771987377012, 0.10616957021666733, 13.116954755882212, -11.003349629488678) 317 = 606.120360741 : (1.0005774167937684, 0.10648034392135935, 13.16200047236627, -11.033537872161503) 318 = 603.117356523 : (1.000583687296015, 0.10679448944162058, 13.207328894409823, -11.062937138887992) 319 = 600.055057585 : (1.0005667930498394, 0.10710794958591886, 13.252311702856225, -11.092893276290882) 320 = 596.970707378 : (1.000568897717169, 0.10743038679038171, 13.297202611435237, -11.122071256386956) 321 = 593.920293903 : (1.0005434429639495, 0.10773612845668006, 13.342282884002504, -11.152612374826488) 322 = 590.788790488 : (1.0005455906745924, 0.10806297494372005, 13.386794538254174, -11.181880621242458) 323 = 587.761964543 : (1.0005236307445828, 0.10837410840866395, 13.431408563784771, -11.212588535704613) 324 = 584.68268222 : (1.000536274961537, 0.10868062412897783, 13.477039275718228, -11.242303355209813) 325 = 581.716136408 : (1.0005156734052216, 0.1089889270642357, 13.522111653394237, -11.27263451955474) 326 = 578.591158217 : (1.0004997018007042, 0.10932437432763244, 13.566272238830805, -11.301414601333418) 327 = 575.448404874 : (1.0004830750636482, 0.10962932782163895, 13.611918217281415, -11.331246862936712) 328 = 572.341237773 : (1.0004806776053103, 0.1099403212876549, 13.6576587985433, -11.360347075800437) 329 = 569.280617059 : (1.0004498220723994, 0.11025448071490304, 13.702311340694546, -11.390611219320949) 330 = 566.130832306 : (1.0004481595069867, 0.11058534509756143, 13.746951247060581, -11.419225703787298) 331 = 563.022714206 : (1.0004256986434406, 0.11090014682221733, 13.79179796054686, -11.449208634382954) 332 = 559.860026109 : (1.0004236484115197, 0.1112051744488067, 13.837828886715087, -11.478482227803621) 333 = 556.661721494 : (1.0004112677870198, 0.11152292175822137, 13.88276609586638, -11.50807497875145) 334 = 553.556793658 : (1.0003884695293976, 0.11185031906445538, 13.926986026419915, -11.53763441337124) 335 = 550.421677724 : (1.0004070659858093, 0.11216577068160043, 13.97268809984848, -11.566252851043918) 336 = 547.331824831 : (1.0003723973274823, 0.11246734987670491, 14.018005317978952, -11.596766462318472) 337 = 544.115782153 : (1.0004041866772977, 0.11278586777494497, 14.064053507643015, -11.624355809647705) 338 = 541.121450551 : (1.0003868267763991, 0.11310397184746593, 14.109216842666036, -11.653538124471275) 339 = 537.948057042 : (1.0003865617352983, 0.1134302552585592, 14.154424357821247, -11.681785623961973) 340 = 534.842703123 : (1.000364155817063, 0.11373048690483713, 14.200482636966166, -11.711424690347766) 341 = 531.689864482 : (1.000383465415376, 0.11406149546109462, 14.24543157310137, -11.739468368624458) 342 = 528.604609693 : (1.0003069212813405, 0.11440652488524104, 14.286926136461155, -11.770052811267087) 343 = 525.308506742 : (1.0003285671190825, 0.11472485055761236, 14.332379561766167, -11.798727510362625) 344 = 522.260367798 : (1.0003006898376254, 0.1150462911172714, 14.376890131246837, -11.828460445676063) 345 = 519.105585537 : (1.000334819665845, 0.11531592973479846, 14.425286152394635, -11.857189818184002) 346 = 516.117409612 : (1.0002901038210668, 0.1156676964581216, 14.467584913105718, -11.886509973336889) 347 = 512.943287425 : (1.0003002678738693, 0.11598026661961244, 14.513308051225021, -11.915451474719596) 348 = 509.827653729 : (1.0002552964859086, 0.1163134961699497, 14.556844526963133, -11.945119330907296) 349 = 506.688092446 : (1.0002863627847614, 0.11662500002787504, 14.603120146637165, -11.973133958149443) 350 = 503.665100213 : (1.0002678266768184, 0.11695453784503806, 14.64776262403869, -12.001837818675023) 351 = 500.577309166 : (1.0002731044130309, 0.11724748303829376, 14.694447085732401, -12.031305828937967) 352 = 497.477912349 : (1.0002507913789702, 0.11757837809323983, 14.738522948071653, -12.060694164554054) 353 = 494.29521726 : (1.0002593343158523, 0.11791511078237629, 14.782763596086177, -12.0892317924551) 354 = 491.23690112 : (1.0002573562968708, 0.11821856738784565, 14.828522910638018, -12.119088732889862) 355 = 488.096761335 : (1.000276494702866, 0.11852219474840012, 14.875054183116069, -12.147646256503794) 356 = 485.0176021 : (1.000231229093107, 0.11884470984687319, 14.918868825119182, -12.178074491819691) 357 = 481.854153388 : (1.0002602284015825, 0.1191566802266108, 14.96461841959992, -12.206911270897654) 358 = 478.763046505 : (1.0002317754032048, 0.1194967740238257, 15.007511454317285, -12.236939656344225) 359 = 475.648309796 : (1.0002662830179891, 0.11979532618614079, 15.053976666385086, -12.265991203230461) 360 = 472.499019021 : (1.000246206637706, 0.12011695787547212, 15.098219345435831, -12.296162966588588) 361 = 469.358696743 : (1.0002566967410715, 0.12042474779299163, 15.143939572591284, -12.325615709634032) 362 = 466.231016054 : (1.000233734836782, 0.12075390027508978, 15.187918546344775, -12.355337987682493) 363 = 463.106541541 : (1.0002652628264475, 0.12105125625055535, 15.234391129532975, -12.38453393104868) 364 = 459.972484551 : (1.0002172325826697, 0.12137296998338398, 15.277828386193066, -12.415540195444223) 365 = 456.731523733 : (1.0002689905593656, 0.12168504935793334, 15.323804244800655, -12.443678180155059) 366 = 453.678792814 : (1.000211577368402, 0.12199400180445044, 15.367329841669418, -12.475682766235224) 367 = 450.418887948 : (1.0002545931594955, 0.12228677017717857, 15.414022563836593, -12.50484443479322) 368 = 447.245821909 : (1.000189659615297, 0.12262332515839748, 15.456153669920216, -12.535769565265317) 369 = 444.000786532 : (1.0002548546467895, 0.12291288487898325, 15.503603292416752, -12.56358738483778) 370 = 440.939207806 : (1.0001839084447182, 0.1232551405124179, 15.5454840853131, -12.59409191506383) 371 = 437.64806624 : (1.0002604049180381, 0.12352204341384701, 15.594354472047904, -12.62142406843992) 372 = 434.591428846 : (1.0001517453903372, 0.12386375256244447, 15.635521245218497, -12.651851464561954) 373 = 431.298980436 : (1.0002570932957882, 0.12414019771915363, 15.684114501747995, -12.677730884210584) 374 = 428.383518789 : (1.0001369239955529, 0.12447869255197856, 15.72486891390495, -12.708636122667174) 375 = 425.082599375 : (1.0002433880181274, 0.12473895967571452, 15.774513052314832, -12.734150312513906) 376 = 422.133920776 : (1.000103286677087, 0.12508977582377476, 15.813569470743142, -12.765034655222493) 377 = 418.885018781 : (1.0002729513361195, 0.1253083519163511, 15.864584947773457, -12.788230669010717) 378 = 416.178184022 : (1.000070404473342, 0.12568816576885797, 15.898229234068511, -12.81858646018679) 379 = 412.891606024 : (1.0002588026634343, 0.12587286781916238, 15.949885067973694, -12.841863864883038) 380 = 410.351771415 : (1.0000781502572076, 0.1262722483060953, 15.983517755823268, -12.871081867139015) 381 = 406.969895749 : (1.0002316734768375, 0.12647598173801913, 16.034840111698415, -12.896011746499632) 382 = 404.359756091 : (1.0000780100832551, 0.12685653648961798, 16.07123450206389, -12.925967626974227) 383 = 400.971286054 : (1.00020702553796, 0.12709507024758354, 16.121474195213818, -12.951399689804097) 384 = 398.188521888 : (1.000064117266927, 0.12744733611206713, 16.160017200188832, -12.982633431741233) 385 = 394.845539142 : (1.000206641719728, 0.12770752048207612, 16.20922340231662, -13.00722831762686) 386 = 392.074043919 : (1.0000298075278908, 0.12805150868271792, 16.24674935588097, -13.038883817516316) 387 = 388.800412404 : (1.0002055277979087, 0.1283107285957365, 16.295883579973506, -13.061496916747057) 388 = 386.082854502 : (1.0000206142990176, 0.12865219064586492, 16.333096617289694, -13.093333162069063) 389 = 382.798910726 : (1.0002005848316486, 0.1289135291048581, 16.382320269665154, -13.115159985456257) 390 = 380.067442783 : (0.9999860351195268, 0.12926304051529883, 16.417055576860726, -13.147063126117187) 391 = 376.883495422 : (1.0002253650152877, 0.12949896195825986, 16.466072492586665, -13.166407756126011) 392 = 374.410852599 : (0.9999709314492514, 0.12983868626195103, 16.498547980919895, -13.19881303713196) 393 = 371.232067527 : (1.0002287754144101, 0.13005597815296432, 16.54777089261277, -13.217423845867375) 394 = 368.874944614 : (0.9999538134969956, 0.13040152689025558, 16.578512744691995, -13.249221780894995) 395 = 365.783069702 : (1.000228590932126, 0.13061537720269353, 16.627347407689168, -13.266802444707452) 396 = 363.469793494 : (0.9999536799265932, 0.1309649268708943, 16.657505195298242, -13.29872653485115) 397 = 360.374636042 : (1.0002209599030578, 0.13117254532491504, 16.70679919161442, -13.316917517356) 398 = 358.074720437 : (0.9999485848670894, 0.13152640643879734, 16.736869109419118, -13.348666400200132) 399 = 355.000112814 : (1.0002204540842932, 0.13171768223532992, 16.7866001808898, -13.366779310357156) 400 = 352.747407534 : (0.9999408557954821, 0.1320796123089567, 16.815558072837167, -13.398020383977453) 401 = 349.733733204 : (1.0002276639688639, 0.13226462830600524, 16.865027873062573, -13.415169447824606) 402 = 347.505532063 : (0.9999317379497941, 0.1326255479615802, 16.892923392105086, -13.445987266565073) 403 = 344.56350099 : (1.000241694942298, 0.1327951559865257, 16.942082870891465, -13.46151767068636) 404 = 342.512353346 : (0.9999208025744842, 0.13315759267544444, 16.966970474752458, -13.492234677736247) 405 = 339.663850833 : (1.0002392260151154, 0.13329753475178288, 17.016531776355727, -13.5077316019684) 406 = 337.681242647 : (0.9999194177345996, 0.13366867024223822, 17.040971666227264, -13.537877130616065) 407 = 334.752726598 : (1.0002356799085244, 0.13380589309962942, 17.09072036121407, -13.553459126465361) 408 = 332.85809497 : (0.9999110818074926, 0.1341738107486947, 17.114978394742362, -13.5836340261747) 409 = 329.882240253 : (1.0002399135084123, 0.13430208208014469, 17.164427929906296, -13.598302197569048) 410 = 328.143898019 : (0.9999072173367306, 0.1346734634668592, 17.187777723635858, -13.627881385561448) 411 = 325.092494946 : (1.0002445007832026, 0.13481917664708926, 17.23642973249815, -13.641640291480723) 412 = 323.407537662 : (0.9999058886797458, 0.13516866980524095, 17.26072756082626, -13.672427127896874) 413 = 320.258432398 : (1.0002315804349415, 0.13531251894505258, 17.30998628374123, -13.686992541468628) 414 = 318.597566298 : (0.999904153570042, 0.13567287254702212, 17.334450695901456, -13.717604823881926) 415 = 315.378963554 : (1.0002269348679684, 0.13581086078225268, 17.383941229343737, -13.732593216259632) 416 = 313.775961881 : (0.9998824596759193, 0.13616506468571696, 17.406888803438015, -13.763226910315703) 417 = 310.643183635 : (1.0002213125119448, 0.13629797540275476, 17.45577469572497, -13.777067231968346) 418 = 309.044976763 : (0.9998772922653487, 0.13666459481466997, 17.47771539905967, -13.80702150219093) 419 = 305.957535626 : (1.0001984045747065, 0.1367686795649061, 17.527830943330027, -13.822996943278987) 420 = 304.221313174 : (0.9998804073444251, 0.13716908210299628, 17.549918642614465, -13.851350765429855) 421 = 301.196690762 : (1.0001932610169577, 0.13727611293422579, 17.600260811790886, -13.868041655463179) 422 = 299.420363426 : (0.9998576021045987, 0.13764808782959934, 17.62272006573851, -13.897899813975956) 423 = 296.396653931 : (1.0002032749605414, 0.137763403793794, 17.67154316734962, -13.911852584300657) 424 = 294.84220452 : (0.9998543003584967, 0.13813863574689153, 17.69193436790937, -13.941257108183136) 425 = 291.756725786 : (1.0001978156736986, 0.1382231245686936, 17.741418172888995, -13.955616485497659) 426 = 290.301774163 : (0.9998543902865262, 0.13862003738893217, 17.760196610473137, -13.983879755790678) 427 = 287.239532789 : (1.000188817269847, 0.13868610117050467, 17.810344146347873, -13.999026251808088) 428 = 285.765386264 : (0.9998481695284529, 0.13909696249753284, 17.82796829247976, -14.02636048557235) 429 = 282.78602542 : (1.0001829208572672, 0.1391570120403351, 17.878180848073686, -14.041470259342677) 430 = 281.261247875 : (0.9998317772276866, 0.13955653824376751, 17.89568001247863, -14.069233524404387) 431 = 278.380648402 : (1.0001846702072683, 0.13962370667518312, 17.94488542095108, -14.083184411289826) 432 = 276.872542062 : (0.9998232957344809, 0.14000876778949778, 17.962729603680312, -14.111454526771187) 433 = 274.05568492 : (1.0001776686466375, 0.14008683542781525, 18.011704923877176, -14.125271937577349) 434 = 272.44910502 : (0.9998185866178234, 0.14047603051024887, 18.02928485896445, -14.153433413501913) 435 = 269.759531668 : (1.0001728246871955, 0.14054561360345902, 18.078451620463433, -14.167057487678553) 436 = 268.10771514 : (0.9998231055405429, 0.14094270948742035, 18.096370940467786, -14.195080009774843) 437 = 265.430892775 : (1.0001731439673973, 0.1409946923935857, 18.145984830340023, -14.208951588764437) 438 = 263.842082326 : (0.9998125705904134, 0.1413909366056943, 18.162466611714493, -14.23659891276754) 439 = 261.224094279 : (1.000178958178545, 0.1414524000408924, 18.211155294865303, -14.24906831319453) 440 = 259.681979646 : (0.9998102640793367, 0.14183490662302026, 18.227916844665582, -14.277402642314366) 441 = 257.029851983 : (1.0001750304988533, 0.14189534539632645, 18.276719315068924, -14.28995234435361) 442 = 255.535854808 : (0.9998068088527979, 0.14228469987712564, 18.292635245065494, -14.31790037199284) 443 = 253.0152617 : (0.999987009232833, 0.1423027279865975, 18.31724037138799, -14.324471396395072) 444 = 251.745130035 : (0.9999770077543876, 0.14246961363898383, 18.339330035239428, -14.338931712625895) 445 = 250.280779296 : (0.9999902921629735, 0.1426225990662667, 18.36261213269067, -14.353027679196046) 446 = 248.852243169 : (0.9999902253900049, 0.1427794621768081, 18.385559205443638, -14.367308223758368) 447 = 247.409229172 : (0.9999919102164258, 0.1429326120528545, 18.40876784573965, -14.381568107484377) 448 = 245.976177229 : (0.9999879572119373, 0.14309547740315356, 18.43140706896746, -14.395661389072291) 449 = 244.554704405 : (0.9999858379337591, 0.14325029074271964, 18.45450526609861, -14.40992039236195) 450 = 243.144196526 : (0.9999864431406297, 0.14340311149838697, 18.47769769295347, -14.424242694558215) 451 = 241.734514862 : (0.9999881407680616, 0.14356508663318163, 18.500389204819754, -14.43835898043361) 452 = 240.317933582 : (0.9999917981373572, 0.14372452888182707, 18.52321037572975, -14.452550688867198) 453 = 238.901516491 : (0.9999971463683324, 0.143878303626281, 18.546304063359962, -14.46692049525329) 454 = 237.493922804 : (0.9999976470798991, 0.14403992543854255, 18.56891302628401, -14.481209606016076) 455 = 236.078082983 : (0.9999933639220294, 0.14419538906941518, 18.591735411887594, -14.495832476996393) 456 = 234.675167432 : (0.9999956388090081, 0.1443494191520921, 18.61474776965513, -14.510313135654643) 457 = 233.27512311 : (1.0000042492541206, 0.14450100389603118, 18.63796717461198, -14.524697188972418) 458 = 231.894479641 : (0.9999965971575011, 0.14465990550434424, 18.660508506301277, -14.53937261430191) 459 = 230.499075742 : (1.0000002094712683, 0.1448128435507514, 18.683608010480526, -14.553827525514953) 460 = 229.124538825 : (1.0000003798848753, 0.14497163242823896, 18.706356993036554, -14.568211785180294) 461 = 227.734137353 : (1.0000048641803312, 0.1451281287772477, 18.72931949737314, -14.582500722614693) 462 = 226.362091345 : (1.0000076024152476, 0.14528453418322712, 18.75226803703019, -14.596826417645241) 463 = 224.981677407 : (0.999997735890072, 0.14544472902426428, 18.77474983441369, -14.611439217933608) 464 = 223.606108454 : (0.9999983165522325, 0.14560004585206615, 18.797770991587765, -14.625769335891835) 465 = 222.242144259 : (0.9999943181936553, 0.14575649490403522, 18.820659058225132, -14.640183772345269) 466 = 220.873639456 : (0.999996728789699, 0.1459158801202092, 18.84357393182649, -14.654232846576425) 467 = 219.508859072 : (0.999992656740899, 0.14607413034958494, 18.86643479094963, -14.668492806371704) 468 = 218.135070523 : (0.9999971903415433, 0.14623480832112332, 18.889402338797176, -14.682301303941886) 469 = 216.776493086 : (0.9999902285692696, 0.14638975917465283, 18.91240737029423, -14.696680062337254) 470 = 215.412682183 : (0.9999939956655537, 0.1465458891800517, 18.9356516357017, -14.710549414509018) 471 = 214.080416497 : (0.9999874611867124, 0.1467055651493822, 18.958502135615618, -14.724657072278129) 472 = 212.730857026 : (0.9999858312035582, 0.1468606621260447, 18.981682222819526, -14.738752063128429) 473 = 211.390025399 : (0.9999897848751946, 0.1470202633995257, 19.004714909648598, -14.752578698918535) 474 = 210.081353752 : (0.9999899318650903, 0.1471720730784491, 19.02802155146793, -14.7668230291905) 475 = 208.749741098 : (0.999986859663329, 0.1473298638229257, 19.050906553899104, -14.781097677664759) 476 = 207.426062866 : (0.9999924383488521, 0.1474853624749856, 19.07412361053582, -14.79507699295133) 477 = 206.111584919 : (0.9999945392149003, 0.14763810267227342, 19.097465648098353, -14.809161451314099) 478 = 204.799952478 : (0.9999949119235244, 0.1477913760222621, 19.120800492540976, -14.823201356853447) 479 = 203.493975534 : (0.9999921166584375, 0.1479533115152233, 19.143613048614068, -14.837124022242556) 480 = 202.185726137 : (0.9999956845826944, 0.14811316879197134, 19.166701551962113, -14.850828500452955) 481 = 200.884848097 : (0.9999897355580735, 0.14826888463425053, 19.1898034775246, -14.8649718872821) 482 = 199.582149718 : (0.9999917392569676, 0.1484270597074709, 19.212923076484472, -14.878821542799814) 483 = 198.285640732 : (0.9999872383427824, 0.1485866545572736, 19.23578787469256, -14.89292316539379) 484 = 196.979974364 : (0.999994496139814, 0.14873779611660354, 19.25938004072221, -14.90674372024101) 485 = 195.693128138 : (0.999991016792181, 0.14889724515160235, 19.28233198613448, -14.920722622042375) 486 = 194.392649874 : (0.9999860347184056, 0.14905589089730928, 19.305368844626408, -14.934648594680676) 487 = 193.106709286 : (0.9999853466055265, 0.14921345036771805, 19.328586938358352, -14.94840461232047) 488 = 191.823372053 : (0.999983853707445, 0.14936811747830023, 19.3518763277499, -14.962366181120709) 489 = 190.530124395 : (0.9999818435219741, 0.14952230556496748, 19.37513741462769, -14.976426916098173) 490 = 189.244112885 : (0.9999804946409018, 0.14967618546839861, 19.39843705980873, -14.99045833059695) 491 = 187.965645279 : (0.9999805031317934, 0.1498337443189338, 19.421564632100324, -15.004366241488116) 492 = 186.693098153 : (0.9999769059049884, 0.14999102102941303, 19.4445606847368, -15.018517390775076) 493 = 185.395521493 : (0.9999830921078114, 0.15014430457148426, 19.46797052700689, -15.032417054480963) 494 = 184.128838939 : (0.9999811074222125, 0.15029949625963418, 19.49110935380833, -15.046568846020394) 495 = 182.843643254 : (0.9999794136135676, 0.15045586828759172, 19.51424903844552, -15.060589070474325) 496 = 181.575329665 : (0.9999743888316723, 0.15061730312095728, 19.5370583204463, -15.074568863607288) 497 = 180.301070038 : (0.9999832190458934, 0.1507671528543132, 19.560682861598213, -15.088465424428628) 498 = 179.042911717 : (0.9999750684340339, 0.15093105262748055, 19.583264807862673, -15.102512577938471) 499 = 177.765345297 : (0.9999827615407658, 0.1510837392960042, 19.606809004566845, -15.11624244593474) ------- CompositeTransform (0x7ffa9b3d4df0) RTTI typeinfo: itk::CompositeTransform<double, 2u> Reference Count: 6 Modified Time: 32737 Debug: Off Object Name: Observers: none Transforms in queue, from begin to end: >>>>>>>>> TranslationTransform (0x7ffa9b3969e0) RTTI typeinfo: itk::TranslationTransform<double, 2u> Reference Count: 1 Modified Time: 32731 Debug: Off Object Name: Observers: none Offset: [13.8877, 15.974] >>>>>>>>> Similarity2DTransform (0x7ffa9b3c57d0) RTTI typeinfo: itk::Similarity2DTransform<double> Reference Count: 2 Modified Time: 44977 Debug: Off Object Name: Observers: none Matrix: 0.988592 -0.150507 0.150507 0.988592 Offset: [19.6068, -15.1162] Center: [0, 0] Translation: [19.6068, -15.1162] Inverse: 0.988626 0.150512 -0.150512 0.988626 Singular: 0 Angle = 0.151084 Scale =0.999983 End of MultiTransform. <<<<<<<<<< TransformsToOptimizeFlags, begin() to end(): 0 1 TransformsToOptimize in queue, from begin to end: >>>>>>>>> Similarity2DTransform (0x7ffa9b3c57d0) RTTI typeinfo: itk::Similarity2DTransform<double> Reference Count: 2 Modified Time: 44977 Debug: Off Object Name: Observers: none Matrix: 0.988592 -0.150507 0.150507 0.988592 Offset: [19.6068, -15.1162] Center: [0, 0] Translation: [19.6068, -15.1162] Inverse: 0.988626 0.150512 -0.150512 0.988626 Singular: 0 Angle = 0.151084 Scale =0.999983 End of TransformsToOptimizeQueue. <<<<<<<<<< End of CompositeTransform. <<<<<<<<<< Optimizer stop condition: ScaledRegularStepGradientDescentOptimizer: Maximum number of iterations (500) exceeded. Iteration: 500 Metric value: 177.765345297
Here is improvement with geometric centered transform initialization
cIdx = [ idx//2 for idx in fixed.GetSize()]
cPt = fixed.TransformIndexToPhysicalPoint(cIdx)
print(cPt)
(110.0, 128.0)
Tx.SetFixedParameters(cPt)