ITK
6.0.0
Insight Toolkit
|
#include <itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h>
Threading implementation for ANTS CC metric ANTSNeighborhoodCorrelationImageToImageMetricv4
. Supports both dense and sparse threading ways. The dense threader iterates over the whole image domain in order and use a neighborhood scanning window to compute the local cross correlation metric and its derivative incrementally inside the window. The sparse threader uses a sampled point set partitioner to computer local cross correlation only at the sampled positions.
This threader class is designed to host the dense and sparse threader under the same name so most computation routine functions and interior member variables can be shared. This eliminates the need to duplicate codes for two threaders. This is made by using function overloading and a helper class to identify different types of domain partitioners.
Definition at line 58 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
Classes | |
struct | ScanMemType |
struct | ScanParametersType |
Public Types | |
using | ConstPointer = SmartPointer< const Self > |
using | FixedImageType = typename NeighborhoodCorrelationMetricType::FixedImageType |
using | ImageDimensionType = typename NeighborhoodCorrelationMetricType::ImageDimensionType |
using | ImageRegionType = typename NeighborhoodCorrelationMetricType::ImageRegionType |
using | InternalComputationValueType = typename NeighborhoodCorrelationMetricType::InternalComputationValueType |
using | JacobianType = typename NeighborhoodCorrelationMetricType::JacobianType |
using | MovingImageType = typename NeighborhoodCorrelationMetricType::MovingImageType |
using | NeighborhoodCorrelationMetricType = TNeighborhoodCorrelationMetric |
using | NumberOfParametersType = typename NeighborhoodCorrelationMetricType::NumberOfParametersType |
using | Pointer = SmartPointer< Self > |
using | QueueRealType = InternalComputationValueType |
using | RadiusType = typename NeighborhoodCorrelationMetricType::RadiusType |
using | ScanIteratorType = ConstNeighborhoodIterator< VirtualImageType > |
using | Self = ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader |
using | SumQueueType = std::deque< QueueRealType > |
using | Superclass = ImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric > |
using | VirtualImageType = typename Superclass::VirtualImageType |
Public Member Functions | |
const char * | GetNameOfClass () const override |
Static Public Member Functions | |
static Pointer | New () |
Protected Member Functions | |
ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader () | |
bool | ComputeInformationFromQueues (const ScanIteratorType &scanIt, ScanMemType &scanMem, const ScanParametersType &scanParameters, const ThreadIdType threadId) const |
void | ComputeMovingTransformDerivative (const ScanIteratorType &scanIt, ScanMemType &scanMem, const ScanParametersType &scanParameters, DerivativeType &deriv, MeasureType &localCC, const ThreadIdType threadId) const |
void | InitializeScanning (const ImageRegionType &scanRegion, ScanIteratorType &scanIt, ScanMemType &scanMem, ScanParametersType &scanParameters) const |
bool | ProcessPoint (const VirtualIndexType &, const VirtualPointType &, const FixedImagePointType &, const FixedImagePixelType &, const FixedImageGradientType &, const MovingImagePointType &, const MovingImagePixelType &, const MovingImageGradientType &, MeasureType &, DerivativeType &, const ThreadIdType) const override |
bool | ProcessVirtualPoint (const VirtualIndexType &virtualIndex, const VirtualPointType &virtualPoint, const ThreadIdType threadId) override |
template<typename T > | |
bool | ProcessVirtualPoint_impl (IdentityHelper< T >, const VirtualIndexType &virtualIndex, const VirtualPointType &virtualPoint, const ThreadIdType threadId) |
bool | ProcessVirtualPoint_impl (IdentityHelper< ThreadedIndexedContainerPartitioner >, const VirtualIndexType &virtualIndex, const VirtualPointType &virtualPoint, const ThreadIdType threadId) |
void | ThreadedExecution (const DomainType &domain, const ThreadIdType threadId) override |
template<typename T > | |
void | ThreadedExecution_impl (IdentityHelper< T >, const DomainType &domain, const ThreadIdType threadId) |
void | ThreadedExecution_impl (IdentityHelper< ThreadedImageRegionPartitioner< TImageToImageMetric::VirtualImageDimension >>, const DomainType &virtualImageSubRegion, const ThreadIdType threadId) |
void | UpdateQueues (const ScanIteratorType &scanIt, ScanMemType &scanMem, const ScanParametersType &scanParameters, const ThreadIdType threadId) const |
void | UpdateQueuesAtBeginningOfLine (const ScanIteratorType &scanIt, ScanMemType &scanMem, const ScanParametersType &scanParameters, const ThreadIdType threadId) const |
void | UpdateQueuesToNextScanWindow (const ScanIteratorType &scanIt, ScanMemType &scanMem, const ScanParametersType &scanParameters, const ThreadIdType threadId) const |
Private Attributes | |
TNeighborhoodCorrelationMetric * | m_ANTSAssociate {} |
std::once_flag | m_ANTSAssociateOnceFlag {} |
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ConstPointer = SmartPointer<const Self> |
Definition at line 68 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::FixedImageType = typename NeighborhoodCorrelationMetricType::FixedImageType |
Definition at line 97 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ImageDimensionType = typename NeighborhoodCorrelationMetricType::ImageDimensionType |
Definition at line 94 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ImageRegionType = typename NeighborhoodCorrelationMetricType::ImageRegionType |
Definition at line 92 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::InternalComputationValueType = typename NeighborhoodCorrelationMetricType::InternalComputationValueType |
Definition at line 93 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::JacobianType = typename NeighborhoodCorrelationMetricType::JacobianType |
Definition at line 95 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::MovingImageType = typename NeighborhoodCorrelationMetricType::MovingImageType |
Definition at line 98 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::NeighborhoodCorrelationMetricType = TNeighborhoodCorrelationMetric |
Definition at line 90 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::NumberOfParametersType = typename NeighborhoodCorrelationMetricType::NumberOfParametersType |
Definition at line 96 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::Pointer = SmartPointer<Self> |
Definition at line 67 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::QueueRealType = InternalComputationValueType |
Definition at line 102 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::RadiusType = typename NeighborhoodCorrelationMetricType::RadiusType |
Definition at line 99 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ScanIteratorType = ConstNeighborhoodIterator<VirtualImageType> |
Definition at line 104 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::Self = ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader |
Standard class type aliases.
Definition at line 65 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::SumQueueType = std::deque<QueueRealType> |
Definition at line 103 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::Superclass = ImageToImageMetricv4GetValueAndDerivativeThreader<TDomainPartitioner, TImageToImageMetric> |
Definition at line 66 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::VirtualImageType = typename Superclass::VirtualImageType |
Definition at line 77 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
|
inlineprotected |
Definition at line 149 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
|
protected |
Test to see if there are any voxels we need to handle in the current window.
|
protected |
|
override |
|
protected |
Common functions for computing correlation over scanning windows Create an iterator over the virtual sub region
|
static |
|
inlineoverrideprotected |
ProcessPoint()
must be overloaded since it is a pure virtual function. It is not used for either sparse or dense threader.
Definition at line 217 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
|
inlineoverrideprotected |
Dense threader and sparse threader invoke different in multi-threading. This class uses overloaded implementations of ProcessVirtualPoint_impl
and ThreadExecution_impl
in order to handle the dense and sparse cases differently. The helper class IdentityHelper allows for correct overloading these methods when substituting different type of the threaded partitioner
1) Dense threader: through its own ThreadedExecution
. ProcessVirtualPoint
and ProcessPoint
of the base class are thus not used.
2) Sparse threader: through its own ProcessVirtualPoint
. ThreadedExecution
still invokes (mostly) from the base class.
In order to invoke different ThreadedExecution
by different threader, we use function overloading techniques to resolve which version of ThreadedExecution
and ProcessVirtualPoint
by the type of the domain partitioner.
Specifically, a helper class IdentityHelper
is used as a function parameter, with the sole purpose to differentiate different types of domain partitioners: ThreadedIndexedContainerPartitioner
for sparse or ThreadedImageRegionPartitioner
for dense. IdentityHelper
is simply a class template, ie. a struct wrapper of type template arguments.
This technique takes advantage of SFINAE (Substitution Failure Is Not An Error) in specializing function templates. The helper class IdentityHelper
is used to overload w.r.t different partitioner types. More discussion can be found at: https://stackoverflow.com/questions/3052579/explicit-specialization-in-non-namespace-scope Method called by the threaders to process the given virtual point. This in turn calls TransformAndEvaluateFixedPoint
, TransformAndEvaluateMovingPoint
, and ProcessPoint
. And adds entries to m_MeasurePerThread and m_LocalDerivativesPerThread, m_NumberOfValidPointsPerThread.
Definition at line 187 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
|
inlineprotected |
Definition at line 204 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
|
protected |
|
inlineoverrideprotected |
Definition at line 233 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
|
protected |
|
protected |
|
protected |
Update the queues for the next point. Calls either UpdateQueuesAtBeginningOfLine
or UpdateQueuesToNextScanWindow
.
|
protected |
|
protected |
Increment the iterator and check to see if we're at the end of the line. If so, go to the next line. Otherwise, add the the values for the next hyperplane.
|
private |
Internal pointer to the metric object in use by this threader. This will avoid costly dynamic casting in tight loops.
Definition at line 301 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.
|
private |
Definition at line 302 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.