ITK  5.0.0
Insight Segmentation and Registration Toolkit
itkVariationalSymmetricDiffeomorphicRegistrationFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef itkVariationalSymmetricDiffeomorphicRegistrationFilter_h
19 #define itkVariationalSymmetricDiffeomorphicRegistrationFilter_h
20 
22 
23 namespace itk {
24 
89 template< typename TFixedImage, typename TMovingImage, typename TDisplacementField>
91  : public VariationalDiffeomorphicRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >
92 {
93 public:
94  ITK_DISALLOW_COPY_AND_ASSIGN(VariationalSymmetricDiffeomorphicRegistrationFilter);
95 
99  TFixedImage, TMovingImage, TDisplacementField >;
102 
104  itkNewMacro(Self);
105 
109 
111  static constexpr unsigned int ImageDimension = Superclass::ImageDimension;
112 
114  using FixedImageType = TFixedImage;
115  using FixedImagePointer = typename FixedImageType::Pointer;
116  using FixedImageConstPointer = typename FixedImageType::ConstPointer;
117 
119  using MovingImageType = TMovingImage;
120  using MovingImagePointer = typename MovingImageType::Pointer;
121  using MovingImageConstPointer = typename MovingImageType::ConstPointer;
122 
124  using DisplacementFieldType = TDisplacementField;
125  using DisplacementFieldPointer = typename DisplacementFieldType::Pointer;
126 
130 
133 
136 
139 
141  itkGetModifiableObjectMacro( InverseDisplacementField, DisplacementFieldType );
142 
143 protected:
146 
148  void PrintSelf(std::ostream& os, Indent indent) const override;
149 
151  void Initialize() override;
152 
154  virtual void InitializeBackwardIteration();
155 
158  void ApplyUpdate( const TimeStepType& dt ) override;
159 
162  TimeStepType CalculateChange() override;
163 
166  virtual void CalcInverseDeformationFromVelocityField( const DisplacementFieldType * velocityField );
167 
170  itkGetModifiableObjectMacro( BackwardUpdateBuffer, UpdateBufferType );
171 
174 
176  void ThreadedApplyUpdate( const TimeStepType &dt,
177  const ThreadRegionType &regionToProcess,
178  unsigned int threadId ) override;
179 
180 private:
183 
187  typename UpdateBufferType::Pointer m_BackwardUpdateBuffer;
188 
189 };
190 
191 }// end namespace itk
192 
193 #ifndef ITK_MANUAL_INSTANTIATION
194 # include "itkVariationalSymmetricDiffeomorphicRegistrationFilter.hxx"
195 #endif
196 
197 #endif
Symmetric diffeomorphic deformable registration of two images using static velocity fields...
Light weight base class for most itk classes.
void ThreadedApplyUpdate(const TimeStepType &dt, const ThreadRegionType &regionToProcess, unsigned int threadId) override
void ApplyUpdate(const TimeStepType &dt) override
virtual void CalcInverseDeformationFromVelocityField(const DisplacementFieldType *velocityField)
Diffeomorphic deformable registration of two images using static velocity fields. ...
void PrintSelf(std::ostream &os, Indent indent) const override
Computes a diffeomorphic displacement field as the Lie group exponential of a vector field...
itk::ExponentialDisplacementFieldImageFilter< DisplacementFieldType, DisplacementFieldType > FieldExponentiatorType
Control indentation during Print() invocation.
Definition: itkIndent.h:49