diff --git a/.gitignore b/.gitignore index 9420924f..e1e5d52a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ tools/ zstd-1.2.0-linux.tar zstd-1.2.0-linux/ .ipynb_checkpoints/ +examples/Parameters.*.txt diff --git a/binder/requirements.txt b/binder/requirements.txt index d0b17b3e..f217d639 100644 --- a/binder/requirements.txt +++ b/binder/requirements.txt @@ -1,11 +1,11 @@ -itk-elastix>=0.5.0 +itk-elastix>=0.5.1 itk>=5.1rc1.post1 itk-core>=5.1rc1.post1 itk-numerics>=5.1rc1.post1 itk-filtering>=5.1rc1.post1 itk-registration>=5.1rc1.post1 itk-segmentation>=5.1rc1.post1 -itkwidgets>=0.24.2 +itkwidgets>=0.25.1 jupyterlab==1.2.5 imageio ipywidgets>=7.5.1 diff --git a/examples/0_HelloRegistrationWorld.ipynb b/examples/0_HelloRegistrationWorld.ipynb index 67f0ac47..f8ed5d3b 100644 --- a/examples/0_HelloRegistrationWorld.ipynb +++ b/examples/0_HelloRegistrationWorld.ipynb @@ -9,12 +9,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import itk\n", - "from itkwidgets import view, checkerboard" + "from itkwidgets import view, compare, checkerboard" ] }, { @@ -30,72 +30,33 @@ "source": [ "In image registration, we typically identify the two images as the fixed and moving image. Our goal is to find the spatial transformation that makes the moving image align with the fixed image.\n", "\n", - "First, let's load our **fixed image**." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "fixed = itk.imread('data/CT_2D_head_fixed.mha', itk.F)" + "First, let's load our **fixed image** and the image we will align to our fixed image, the **moving image**." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e4158972d1a04e098425a4f40d0e7c4b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Viewer(geometries=[], gradient_opacity=0.22, point_sets=[], rendered_image= affine -> bspline* transformation, with 4 resolutions for each transformation type.\n", + "\n", + "A default set of registration parameters are available for\n", + "\n", + "- *translation*\n", + "- *rigid*\n", + "- *affine*\n", + "- *bspline*\n", + "- *spline*\n", + "- *groupwise*\n", + "\n", + "transformations. More information on these transformation can be found in the [elastix manual](http://elastix.isi.uu.nl/download/elastix-5.0.0-manual.pdf)." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Self (0x55e2865a1e60)\n", + " RTTI typeinfo: elastix::ParameterObject\n", + " Reference Count: 1\n", + " Modified Time: 49515\n", + " Debug: Off\n", + " Object Name: \n", + " Observers: \n", + " none\n", + "ParameterMap 0: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticTransformInitialization \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 3)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"TranslationTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 1: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticScalesEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 2)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"AffineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "\n" + ] + } + ], + "source": [ + "# Get the default parameter map for a 3 resolution translation registration\n", + "resolutions = 2\n", + "default_affine = parameters.GetDefaultParameterMap(\"affine\", resolutions)\n", + "\n", + "# Add these parameters to the registration parameters\n", + "parameters.AddParameterMap(default_affine)\n", + "\n", + "print(parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Self (0x55e2865a1e60)\n", + " RTTI typeinfo: elastix::ParameterObject\n", + " Reference Count: 1\n", + " Modified Time: 49516\n", + " Debug: Off\n", + " Object Name: \n", + " Observers: \n", + " none\n", + "ParameterMap 0: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticTransformInitialization \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 3)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"TranslationTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 1: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticScalesEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 2)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"AffineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 2: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FinalGridSpacingInPhysicalUnits 20)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (GridSpacingSchedule 1)\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\" \"TransformBendingEnergyPenalty\")\n", + " (Metric0Weight 1)\n", + " (Metric1Weight 1)\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 1)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiMetricMultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"BSplineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "\n" + ] + } + ], + "source": [ + "# For the bspline default parameter map, an extra argument can be specified that define the final bspline grid spacing in physical space. \n", + "resolutions = 1\n", + "default_bspline = parameters.GetDefaultParameterMap(\"bspline\", resolutions, 20.0)\n", + "\n", + "# Add these parameters to the registration parameters\n", + "parameters.AddParameterMap(default_bspline)\n", + "\n", + "print(parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Self (0x55e2865a1e60)\n", + " RTTI typeinfo: elastix::ParameterObject\n", + " Reference Count: 1\n", + " Modified Time: 49516\n", + " Debug: Off\n", + " Object Name: \n", + " Observers: \n", + " none\n", + "ParameterMap 0: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticTransformInitialization \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 3)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"TranslationTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 1: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticScalesEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 2)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"AffineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 2: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FinalGridSpacingInPhysicalUnits 20)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (GridSpacingSchedule 1)\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\" \"TransformBendingEnergyPenalty\")\n", + " (Metric0Weight 1)\n", + " (Metric1Weight 1)\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 1)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiMetricMultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"BSplineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "\n" + ] + } + ], + "source": [ + "# Change a parameter\n", + "\n", + "# Note that keys and values are currently both strings\n", + "parameters.SetParameter(2, \"NumberOfResolutions\", \"1\")\n", + "\n", + "print(parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Self (0x55e2865a1e60)\n", + " RTTI typeinfo: elastix::ParameterObject\n", + " Reference Count: 1\n", + " Modified Time: 49516\n", + " Debug: Off\n", + " Object Name: \n", + " Observers: \n", + " none\n", + "ParameterMap 0: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticTransformInitialization \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"TranslationTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 1: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticScalesEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"AffineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 2: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FinalGridSpacingInPhysicalUnits 20)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (GridSpacingSchedule 1)\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\" \"TransformBendingEnergyPenalty\")\n", + " (Metric0Weight 1)\n", + " (Metric1Weight 1)\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiMetricMultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (ResultImageFormat \"nii\")\n", + " (Transform \"BSplineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "\n" + ] + } + ], + "source": [ + "# Change a parameter on all parameter maps\n", + "parameters.SetParameter(\"NumberOfResolutions\", \"5\")\n", + "\n", + "print(parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Self (0x55e2865a1e60)\n", + " RTTI typeinfo: elastix::ParameterObject\n", + " Reference Count: 1\n", + " Modified Time: 49516\n", + " Debug: Off\n", + " Object Name: \n", + " Observers: \n", + " none\n", + "ParameterMap 0: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticTransformInitialization \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (Transform \"TranslationTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 1: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticScalesEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (Transform \"AffineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 2: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FinalGridSpacingInPhysicalUnits 20)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (GridSpacingSchedule 1)\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\" \"TransformBendingEnergyPenalty\")\n", + " (Metric0Weight 1)\n", + " (Metric1Weight 1)\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiMetricMultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (Transform \"BSplineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "\n" + ] + } + ], + "source": [ + "# Remove a parameter\n", + "parameters.RemoveParameter(\"ResultImageFormat\")\n", + "\n", + "print(parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(AutomaticParameterEstimation \"true\")\n", + "(AutomaticScalesEstimation \"true\")\n", + "(CheckNumberOfSamples \"true\")\n", + "(DefaultPixelValue 0.000000)\n", + "(FinalBSplineInterpolationOrder 3.000000)\n", + "(FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + "(ImageSampler \"RandomCoordinate\")\n", + "(Interpolator \"LinearInterpolator\")\n", + "(MaximumNumberOfIterations 256.000000)\n", + "(MaximumNumberOfSamplingAttempts 8.000000)\n", + "(Metric \"AdvancedMattesMutualInformation\")\n", + "(MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + "(NewSamplesEveryIteration \"true\")\n", + "(NumberOfResolutions 5.000000)\n", + "(NumberOfSamplesForExactGradient 4096.000000)\n", + "(NumberOfSpatialSamples 2048.000000)\n", + "(Optimizer \"AdaptiveStochasticGradientDescent\")\n", + "(Registration \"MultiResolutionRegistration\")\n", + "(ResampleInterpolator \"FinalBSplineInterpolator\")\n", + "(Resampler \"DefaultResampler\")\n", + "(Transform \"AffineTransform\")\n", + "(WriteIterationInfo \"false\")\n", + "(WriteResultImage \"true\")\n" + ] + } + ], + "source": [ + "# Each parameter map can be serialized to a file.\n", + "for index in range(parameters.GetNumberOfParameterMaps()):\n", + " parameter_map = parameters.GetParameterMap(index)\n", + " parameters.WriteParameterFile(parameter_map, \"Parameters.{0}.txt\".format(index))\n", + " \n", + "%cat Parameters.1.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Self (0x55e287b14970)\n", + " RTTI typeinfo: elastix::ParameterObject\n", + " Reference Count: 1\n", + " Modified Time: 49521\n", + " Debug: Off\n", + " Object Name: \n", + " Observers: \n", + " none\n", + "ParameterMap 0: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticTransformInitialization \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (Transform \"TranslationTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 1: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (AutomaticScalesEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\")\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (Transform \"AffineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "ParameterMap 2: \n", + " (AutomaticParameterEstimation \"true\")\n", + " (CheckNumberOfSamples \"true\")\n", + " (DefaultPixelValue 0)\n", + " (FinalBSplineInterpolationOrder 3)\n", + " (FinalGridSpacingInPhysicalUnits 20)\n", + " (FixedImagePyramid \"FixedSmoothingImagePyramid\")\n", + " (GridSpacingSchedule 1)\n", + " (ImageSampler \"RandomCoordinate\")\n", + " (Interpolator \"LinearInterpolator\")\n", + " (MaximumNumberOfIterations 256)\n", + " (MaximumNumberOfSamplingAttempts 8)\n", + " (Metric \"AdvancedMattesMutualInformation\" \"TransformBendingEnergyPenalty\")\n", + " (Metric0Weight 1)\n", + " (Metric1Weight 1)\n", + " (MovingImagePyramid \"MovingSmoothingImagePyramid\")\n", + " (NewSamplesEveryIteration \"true\")\n", + " (NumberOfResolutions 5)\n", + " (NumberOfSamplesForExactGradient 4096)\n", + " (NumberOfSpatialSamples 2048)\n", + " (Optimizer \"AdaptiveStochasticGradientDescent\")\n", + " (Registration \"MultiMetricMultiResolutionRegistration\")\n", + " (ResampleInterpolator \"FinalBSplineInterpolator\")\n", + " (Resampler \"DefaultResampler\")\n", + " (Transform \"BSplineTransform\")\n", + " (WriteIterationInfo \"false\")\n", + " (WriteResultImage \"true\")\n", + "\n" + ] + } + ], + "source": [ + "# To deserialize the parameters\n", + "parameter_files = [\"Parameters.{0}.txt\".format(i) for i in range(3)]\n", + "restored_parameters = itk.ParameterObject.New()\n", + "restored_parameters.ReadParameterFile(parameter_files)\n", + "print(restored_parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For more information on the available parameters and their meaning, see the [Elastix Parameters](http://elastix.isi.uu.nl/doxygen/parameter.html) documentation.\n", + "\n", + "A database of parameter sets that work well for specific types of data can be found in the [elastix parameter file database](http://elastix.bigr.nl/wiki/index.php/Parameter_file_database)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}