File: elxFixedGenericPyramid.h

package info (click to toggle)
elastix 5.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 42,480 kB
  • sloc: cpp: 68,403; lisp: 4,118; python: 1,013; xml: 182; sh: 177; makefile: 33
file content (141 lines) | stat: -rw-r--r-- 6,461 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*=========================================================================
 *
 *  Copyright UMC Utrecht and contributors
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef elxFixedGenericPyramid_h
#define elxFixedGenericPyramid_h

#include "elxIncludes.h" // include first to avoid MSVS warning
#include "itkGenericMultiResolutionPyramidImageFilter.h"

namespace elastix
{

/**
 * \class FixedGenericPyramid
 * \brief A pyramid based on the itk::GenericMultiResolutionPyramidImageFilter.
 *
 * It is generic since it has all functionality that the FixedRecursivePyramid,
 * FixedShrinkingPyramid and FixedSmoothingPyramid have together.
 * This pyramid has two separate schedules: one for size rescaling and one for
 * the Gaussian smoothing factor sigma. In addition, it has an option to compute
 * pyramid output per resolution, and not all at once, to reduce memory consumption.
 *
 * The parameters used in this class are:
 * \parameter FixedImagePyramid: Select this pyramid as follows:\n
 *    <tt>(FixedImagePyramid "FixedGenericImagePyramid")</tt>
 * \parameter FixedImagePyramidRescaleSchedule: downsampling factors for the fixed image pyramid.\n
 *    For each dimension, for each resolution level, the downsampling factor of the
 *    fixed image can be specified.\n
 *    Syntax for 2D images:\n
 *    <tt>(FixedImagePyramidRescaleSchedule <reslevel0,dim0> <reslevel0,dim1> <reslevel1,dim0> <reslevel1,dim1>
 * ...)</tt>\n example: <tt>(FixedImagePyramidRescaleSchedule 4 4 2 2 1 1)</tt>\n Default: isotropic, halved in each
 * resolution, so, like in the example. If ImagePyramidRescaleSchedule is specified, that schedule is used for both
 * fixed and moving image pyramid. \parameter ImagePyramidRescaleSchedule: rescale schedule for both pyramids \parameter
 * ImagePyramidSchedule: same as ImagePyramidRescaleSchedule \parameter FixedImagePyramidSchedule: same as
 * FixedImagePyramidRescaleSchedule \parameter FixedImagePyramidSmoothingSchedule: sigma's for smoothing the fixed image
 * pyramid.\n For each dimension, for each resolution level, the sigma of the fixed image can be specified.\n Syntax for
 * 2D images:\n <tt>(FixedImagePyramidSmoothingSchedule <reslevel0,dim0> <reslevel0,dim1> <reslevel1,dim0>
 * <reslevel1,dim1> ...)</tt>\n example: <tt>(FixedImagePyramidSmoothingSchedule 4 4 2 2 1 1)</tt>\n Default: 0.5 x
 * rescale_factor x fixed_image_spacing.\n If ImagePyramidSmoothingSchedule is specified, that schedule is used for both
 * fixed and moving image pyramid. \parameter ImagePyramidSmoothingSchedule: smoothing schedule for both pyramids
 * \parameter ComputePyramidImagesPerResolution: Flag to specify if all resolution levels are computed
 *    at once, or per resolution. Latter saves memory.\n
 *    example: <tt>(ComputePyramidImagesPerResolution "true")</tt>\n
 *    Default false.
 * \parameter ImagePyramidUseShrinkImageFilter: Flag to specify if the ShrinkingImageFilter is used
 *    for rescaling the image, or the ResampleImageFilter. Skrinker is faster.\n
 *    example: <tt>(ImagePyramidUseShrinkImageFilter "true")</tt>\n
 *    Default false, so by default the resampler is used.
 *
 * \ingroup ImagePyramids
 */

template <class TElastix>
class ITK_TEMPLATE_EXPORT FixedGenericPyramid
  : public itk::GenericMultiResolutionPyramidImageFilter<typename FixedImagePyramidBase<TElastix>::InputImageType,
                                                         typename FixedImagePyramidBase<TElastix>::OutputImageType>
  , public FixedImagePyramidBase<TElastix>
{
public:
  ITK_DISALLOW_COPY_AND_MOVE(FixedGenericPyramid);

  /** Standard ITK-stuff. */
  using Self = FixedGenericPyramid;
  using Superclass1 =
    itk::GenericMultiResolutionPyramidImageFilter<typename FixedImagePyramidBase<TElastix>::InputImageType,
                                                  typename FixedImagePyramidBase<TElastix>::OutputImageType>;
  using Superclass2 = FixedImagePyramidBase<TElastix>;
  using Pointer = itk::SmartPointer<Self>;
  using ConstPointer = itk::SmartPointer<const Self>;

  /** Method for creation through the object factory. */
  itkNewMacro(Self);

  /** Run-time type information (and related methods). */
  itkTypeMacro(FixedGenericPyramid, GenericMultiResolutionPyramidImageFilter);

  /** Name of this class.
   * Use this name in the parameter file to select this specific pyramid. \n
   * example: <tt>(FixedImagePyramid "FixedGenericImagePyramid")</tt>\n
   */
  elxClassNameMacro("FixedGenericImagePyramid");

  /** Get the ImageDimension. */
  itkStaticConstMacro(ImageDimension, unsigned int, Superclass1::ImageDimension);

  /** Typedefs inherited from the superclass. */
  using typename Superclass1::InputImageType;
  using typename Superclass1::OutputImageType;
  using typename Superclass1::InputImagePointer;
  using typename Superclass1::OutputImagePointer;
  using typename Superclass1::InputImageConstPointer;
  using typename Superclass1::ScheduleType;
  using typename Superclass1::RescaleScheduleType;
  using typename Superclass1::SmoothingScheduleType;

  /** Typedefs inherited from Elastix. */
  using typename Superclass2::ElastixType;
  using typename Superclass2::RegistrationType;
  using ITKBaseType = typename Superclass2::ITKBaseType;

  /** Method for setting the schedule. Override from FixedImagePyramidBase,
   * since we now have two schedules, rescaling and smoothing.
   */
  void
  SetFixedSchedule() override;

  /** Update the current resolution level. */
  void
  BeforeEachResolution() override;

protected:
  /** The constructor. */
  FixedGenericPyramid() = default;
  /** The destructor. */
  ~FixedGenericPyramid() override = default;

private:
  elxOverrideGetSelfMacro;
};

} // end namespace elastix

#ifndef ITK_MANUAL_INSTANTIATION
#  include "elxFixedGenericPyramid.hxx"
#endif

#endif // end #ifndef elxFixedGenericPyramid_h