ITK  5.3.0
Insight Toolkit
itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
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  * https://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 itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader_h
19 #define itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader_h
20 
25 
26 #include <deque>
27 #include <mutex>
28 
29 namespace itk
30 {
31 
36 template <typename T>
38 {
39  using MyType = T;
40 };
41 
57 template <typename TDomainPartitioner, typename TImageToImageMetric, typename TNeighborhoodCorrelationMetric>
59  : public ImageToImageMetricv4GetValueAndDerivativeThreader<TDomainPartitioner, TImageToImageMetric>
60 {
61 public:
63 
69 
72 
73  itkNewMacro(Self);
74 
75  using typename Superclass::DomainType;
76  using typename Superclass::AssociateType;
77 
78  using VirtualImageType = typename Superclass::VirtualImageType;
79  using typename Superclass::VirtualPointType;
80  using typename Superclass::VirtualIndexType;
81  using typename Superclass::FixedImagePointType;
82  using typename Superclass::FixedImagePixelType;
83  using typename Superclass::FixedImageGradientType;
84  using typename Superclass::MovingImagePointType;
85  using typename Superclass::MovingImagePixelType;
86  using typename Superclass::MovingImageGradientType;
87  using typename Superclass::MeasureType;
88  using typename Superclass::DerivativeType;
89  using typename Superclass::DerivativeValueType;
90 
91  using NeighborhoodCorrelationMetricType = TNeighborhoodCorrelationMetric;
92 
93  using ImageRegionType = typename NeighborhoodCorrelationMetricType::ImageRegionType;
94  using InternalComputationValueType = typename NeighborhoodCorrelationMetricType::InternalComputationValueType;
95  using ImageDimensionType = typename NeighborhoodCorrelationMetricType::ImageDimensionType;
96  using JacobianType = typename NeighborhoodCorrelationMetricType::JacobianType;
97  using NumberOfParametersType = typename NeighborhoodCorrelationMetricType::NumberOfParametersType;
98  using FixedImageType = typename NeighborhoodCorrelationMetricType::FixedImageType;
99  using MovingImageType = typename NeighborhoodCorrelationMetricType::MovingImageType;
100  using RadiusType = typename NeighborhoodCorrelationMetricType::RadiusType;
101 
102  // interested values here updated during scanning
104  using SumQueueType = std::deque<QueueRealType>;
106 
107  // one ScanMemType for each thread
108  struct ScanMemType
109  {
110  // queues used in the scanning
111  // sum of the fixed value squared
113  // sum of the moving value squared
119 
125 
126  FixedImageGradientType fixedImageGradient;
127  MovingImageGradientType movingImageGradient;
128 
129  FixedImagePointType mappedFixedPoint;
130  MovingImagePointType mappedMovingPoint;
131  VirtualPointType virtualPoint;
132  };
133 
134  // For dense scan over one image region
136  {
137  // const values during scanning
139  SizeValueType numberOfFillZero; // for each queue
140  SizeValueType windowLength; // number of voxels in the scanning window
142 
147  };
148 
149 protected:
151  : m_ANTSAssociate(nullptr)
152  {}
153 
187  bool
188  ProcessVirtualPoint(const VirtualIndexType & virtualIndex,
189  const VirtualPointType & virtualPoint,
190  const ThreadIdType threadId) override
191  {
192  return ProcessVirtualPoint_impl(IdentityHelper<TDomainPartitioner>(), virtualIndex, virtualPoint, threadId);
193  }
194 
195  /* specific overloading for sparse CC metric */
196  bool
197  ProcessVirtualPoint_impl(IdentityHelper<ThreadedIndexedContainerPartitioner> itkNotUsed(self),
198  const VirtualIndexType & virtualIndex,
199  const VirtualPointType & virtualPoint,
200  const ThreadIdType threadId);
201 
202  /* for other default case */
203  template <typename T>
204  bool
206  const VirtualIndexType & virtualIndex,
207  const VirtualPointType & virtualPoint,
208  const ThreadIdType threadId)
209  {
210  return Superclass::ProcessVirtualPoint(virtualIndex, virtualPoint, threadId);
211  }
212 
213 
217  bool
218  ProcessPoint(const VirtualIndexType & itkNotUsed(virtualIndex),
219  const VirtualPointType & itkNotUsed(virtualPoint),
220  const FixedImagePointType & itkNotUsed(mappedFixedPoint),
221  const FixedImagePixelType & itkNotUsed(mappedFixedPixelValue),
222  const FixedImageGradientType & itkNotUsed(mappedFixedImageGradient),
223  const MovingImagePointType & itkNotUsed(mappedMovingPoint),
224  const MovingImagePixelType & itkNotUsed(mappedMovingPixelValue),
225  const MovingImageGradientType & itkNotUsed(mappedMovingImageGradient),
226  MeasureType & itkNotUsed(metricValueReturn),
227  DerivativeType & itkNotUsed(localDerivativeReturn),
228  const ThreadIdType itkNotUsed(threadId)) const override
229  {
230  itkExceptionMacro("ProcessPoint should never be reached in ANTS CC metric threader class.");
231  }
232 
233  void
234  ThreadedExecution(const DomainType & domain, const ThreadIdType threadId) override
235  {
236  ThreadedExecution_impl(IdentityHelper<TDomainPartitioner>(), domain, threadId);
237  }
238 
239  /* specific overloading for dense threader only based CC metric */
240  void
241  ThreadedExecution_impl(
243  const DomainType & virtualImageSubRegion,
244  const ThreadIdType threadId);
245 
246  /* for other default case */
247  template <typename T>
248  void
249  ThreadedExecution_impl(IdentityHelper<T> itkNotUsed(self), const DomainType & domain, const ThreadIdType threadId);
250 
254  void
255  InitializeScanning(const ImageRegionType & scanRegion,
256  ScanIteratorType & scanIt,
257  ScanMemType & scanMem,
258  ScanParametersType & scanParameters) const;
259 
262  void
263  UpdateQueues(const ScanIteratorType & scanIt,
264  ScanMemType & scanMem,
265  const ScanParametersType & scanParameters,
266  const ThreadIdType threadId) const;
267 
268  void
269  UpdateQueuesAtBeginningOfLine(const ScanIteratorType & scanIt,
270  ScanMemType & scanMem,
271  const ScanParametersType & scanParameters,
272  const ThreadIdType threadId) const;
273 
277  void
278  UpdateQueuesToNextScanWindow(const ScanIteratorType & scanIt,
279  ScanMemType & scanMem,
280  const ScanParametersType & scanParameters,
281  const ThreadIdType threadId) const;
282 
285  bool
286  ComputeInformationFromQueues(const ScanIteratorType & scanIt,
287  ScanMemType & scanMem,
288  const ScanParametersType & scanParameters,
289  const ThreadIdType threadId) const;
290 
291  void
292  ComputeMovingTransformDerivative(const ScanIteratorType & scanIt,
293  ScanMemType & scanMem,
294  const ScanParametersType & scanParameters,
295  DerivativeType & deriv,
296  MeasureType & localCC,
297  const ThreadIdType threadId) const;
298 
299 private:
302  TNeighborhoodCorrelationMetric * m_ANTSAssociate;
303  std::once_flag m_ANTSAssociateOnceFlag;
304 };
305 
306 
307 } // end namespace itk
308 
309 #ifndef ITK_MANUAL_INSTANTIATION
310 # include "itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.hxx"
311 #endif
312 
313 #endif
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::sMovingMoving
QueueRealType sMovingMoving
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:124
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::windowLength
SizeValueType windowLength
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:140
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::mappedMovingPoint
MovingImagePointType mappedMovingPoint
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:130
ConstPointer
SmartPointer< const Self > ConstPointer
Definition: itkAddImageFilter.h:93
itkThreadedIndexedContainerPartitioner.h
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::radius
RadiusType radius
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:146
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::QsumFixed2
SumQueueType QsumFixed2
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:112
itkConstNeighborhoodIterator.h
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::virtualImage
VirtualImageType::ConstPointer virtualImage
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:145
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::QueueRealType
InternalComputationValueType QueueRealType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:103
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::movingA
QueueRealType movingA
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:121
itk::ImageToImageMetricv4GetValueAndDerivativeThreader
Provides threading for ImageToImageMetricv4::GetValueAndDerivative.
Definition: itkImageToImageMetricv4GetValueAndDerivativeThreader.h:44
itk::IdentityHelper::MyType
T MyType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:39
itk::ThreadedImageRegionPartitioner
Class for partitioning of an ImageRegion.
Definition: itkThreadedImageRegionPartitioner.h:45
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ProcessPoint
bool ProcessPoint(const VirtualIndexType &, const VirtualPointType &, const FixedImagePointType &, const FixedImagePixelType &, const FixedImageGradientType &, const MovingImagePointType &, const MovingImagePixelType &, const MovingImageGradientType &, MeasureType &, DerivativeType &, const ThreadIdType) const override
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:218
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::movingImageGradient
MovingImageGradientType movingImageGradient
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:127
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::numberOfFillZero
SizeValueType numberOfFillZero
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:139
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ImageDimensionType
typename NeighborhoodCorrelationMetricType::ImageDimensionType ImageDimensionType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:95
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::RadiusType
typename NeighborhoodCorrelationMetricType::RadiusType RadiusType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:100
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::QsumMoving2
SumQueueType QsumMoving2
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:114
itkImageToImageMetricv4GetValueAndDerivativeThreader.h
itk::SmartPointer< Self >
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::virtualPoint
VirtualPointType virtualPoint
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:131
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ProcessVirtualPoint_impl
bool ProcessVirtualPoint_impl(IdentityHelper< T >, const VirtualIndexType &virtualIndex, const VirtualPointType &virtualPoint, const ThreadIdType threadId)
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:205
itkThreadedImageRegionPartitioner.h
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::Qcount
SumQueueType Qcount
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:118
itk::IdentityHelper
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:37
itk::IndexValueType
long IndexValueType
Definition: itkIntTypes.h:90
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::m_ANTSAssociateOnceFlag
std::once_flag m_ANTSAssociateOnceFlag
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:303
itk::ThreadIdType
unsigned int ThreadIdType
Definition: itkIntTypes.h:99
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ThreadedExecution
void ThreadedExecution(const DomainType &domain, const ThreadIdType threadId) override
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:234
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::fixedImageGradient
FixedImageGradientType fixedImageGradient
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:126
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::scanRegion
ImageRegionType scanRegion
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:138
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::scanRegionBeginIndexDim0
IndexValueType scanRegionBeginIndexDim0
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:141
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::NeighborhoodCorrelationMetricType
TNeighborhoodCorrelationMetric NeighborhoodCorrelationMetricType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:91
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::VirtualImageType
typename Superclass::VirtualImageType VirtualImageType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:78
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::MovingImageType
typename NeighborhoodCorrelationMetricType::MovingImageType MovingImageType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:99
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::mappedFixedPoint
FixedImagePointType mappedFixedPoint
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:129
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::m_ANTSAssociate
TNeighborhoodCorrelationMetric * m_ANTSAssociate
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:302
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::sFixedMoving
QueueRealType sFixedMoving
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:122
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader
ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader()
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:150
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnnulusOperator.h:24
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ProcessVirtualPoint
bool ProcessVirtualPoint(const VirtualIndexType &virtualIndex, const VirtualPointType &virtualPoint, const ThreadIdType threadId) override
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:188
itk::ConstNeighborhoodIterator
Const version of NeighborhoodIterator, defining iteration of a local N-dimensional neighborhood of pi...
Definition: itkConstNeighborhoodIterator.h:51
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::QsumFixed
SumQueueType QsumFixed
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:115
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::movingImage
MovingImageType::ConstPointer movingImage
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:144
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::QsumMoving
SumQueueType QsumMoving
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:116
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::InternalComputationValueType
typename NeighborhoodCorrelationMetricType::InternalComputationValueType InternalComputationValueType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:94
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:135
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::FixedImageType
typename NeighborhoodCorrelationMetricType::FixedImageType FixedImageType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:98
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::SumQueueType
std::deque< QueueRealType > SumQueueType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:104
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::sFixedFixed
QueueRealType sFixedFixed
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:123
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::fixedA
QueueRealType fixedA
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:120
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType::QsumFixedMoving
SumQueueType QsumFixedMoving
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:117
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::JacobianType
typename NeighborhoodCorrelationMetricType::JacobianType JacobianType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:96
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::NumberOfParametersType
typename NeighborhoodCorrelationMetricType::NumberOfParametersType NumberOfParametersType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:97
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:108
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader
Threading implementation for ANTS CC metric ANTSNeighborhoodCorrelationImageToImageMetricv4 ....
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:58
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ImageRegionType
typename NeighborhoodCorrelationMetricType::ImageRegionType ImageRegionType
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:93
itk::SizeValueType
unsigned long SizeValueType
Definition: itkIntTypes.h:83
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType::fixedImage
FixedImageType::ConstPointer fixedImage
Definition: itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h:143