ITK  5.0.0
Insight Segmentation and Registration Toolkit
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Attributes | List of all members
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric > Class Template Reference

#include <itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h>

+ Inheritance diagram for itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >:
+ Collaboration diagram for itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >:

Detailed Description

template<typename TDomainPartitioner, typename TImageToImageMetric, typename TNeighborhoodCorrelationMetric>
class itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >

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 57 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.

Classes

struct  ScanMemType
 
struct  ScanParametersType
 

Public Types

using AssociateType = typename Superclass::AssociateType
 
using ConstPointer = SmartPointer< const Self >
 
using DerivativeType = typename Superclass::DerivativeType
 
using DerivativeValueType = typename Superclass::DerivativeValueType
 
using DomainType = typename Superclass::DomainType
 
using FixedImageGradientType = typename Superclass::FixedImageGradientType
 
using FixedImagePixelType = typename Superclass::FixedImagePixelType
 
using FixedImagePointType = typename Superclass::FixedImagePointType
 
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 MeasureType = typename Superclass::MeasureType
 
using MovingImageGradientType = typename Superclass::MovingImageGradientType
 
using MovingImagePixelType = typename Superclass::MovingImagePixelType
 
using MovingImagePointType = typename Superclass::MovingImagePointType
 
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 >
 
typedef struct
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType 
ScanMemType
 
typedef struct
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType 
ScanParametersType
 
using Self = ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader
 
using SumQueueType = std::deque< QueueRealType >
 
using Superclass = ImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric >
 
using VirtualImageType = typename Superclass::VirtualImageType
 
using VirtualIndexType = typename Superclass::VirtualIndexType
 
using VirtualPointType = typename Superclass::VirtualPointType
 

Public Member Functions

virtual ::itk::LightObject::Pointer CreateAnother () const
 
virtual const char * GetNameOfClass () const
 

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 &local_cc, 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
 
bool ProcessVirtualPoint_impl (IdentityHelper< ThreadedIndexedContainerPartitioner >, const VirtualIndexType &virtualIndex, const VirtualPointType &virtualPoint, const ThreadIdType threadId)
 
template<typename T >
bool ProcessVirtualPoint_impl (IdentityHelper< T >, const VirtualIndexType &virtualIndex, const VirtualPointType &virtualPoint, const ThreadIdType threadId)
 
void ThreadedExecution (const DomainType &domain, const ThreadIdType threadId) override
 
void ThreadedExecution_impl (IdentityHelper< ThreadedImageRegionPartitioner< TImageToImageMetric::VirtualImageDimension > >, const DomainType &domain, const ThreadIdType threadId)
 
template<typename T >
void ThreadedExecution_impl (IdentityHelper< T >, const DomainType &domain, 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
 

Member Typedef Documentation

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::AssociateType = typename Superclass::AssociateType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ConstPointer = SmartPointer< const Self >
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::DerivativeType = typename Superclass::DerivativeType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::DerivativeValueType = typename Superclass::DerivativeValueType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::DomainType = typename Superclass::DomainType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::FixedImageGradientType = typename Superclass::FixedImageGradientType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::FixedImagePixelType = typename Superclass::FixedImagePixelType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::FixedImagePointType = typename Superclass::FixedImagePointType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::FixedImageType = typename NeighborhoodCorrelationMetricType::FixedImageType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ImageDimensionType = typename NeighborhoodCorrelationMetricType::ImageDimensionType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ImageRegionType = typename NeighborhoodCorrelationMetricType::ImageRegionType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::InternalComputationValueType = typename NeighborhoodCorrelationMetricType::InternalComputationValueType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::JacobianType = typename NeighborhoodCorrelationMetricType::JacobianType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::MeasureType = typename Superclass::MeasureType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::MovingImageGradientType = typename Superclass::MovingImageGradientType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::MovingImagePixelType = typename Superclass::MovingImagePixelType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::MovingImagePointType = typename Superclass::MovingImagePointType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::MovingImageType = typename NeighborhoodCorrelationMetricType::MovingImageType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::NeighborhoodCorrelationMetricType = TNeighborhoodCorrelationMetric
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::NumberOfParametersType = typename NeighborhoodCorrelationMetricType::NumberOfParametersType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::Pointer = SmartPointer< Self >
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::QueueRealType = InternalComputationValueType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::RadiusType = typename NeighborhoodCorrelationMetricType::RadiusType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ScanIteratorType = ConstNeighborhoodIterator<VirtualImageType>
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
typedef struct itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanMemType itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ScanMemType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
typedef struct itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader::ScanParametersType itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ScanParametersType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::Self = ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader

Standard class type aliases.

Definition at line 64 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::SumQueueType = std::deque<QueueRealType>
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::Superclass = ImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric >
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::VirtualImageType = typename Superclass::VirtualImageType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::VirtualIndexType = typename Superclass::VirtualIndexType
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
using itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::VirtualPointType = typename Superclass::VirtualPointType

Constructor & Destructor Documentation

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader ( )
inlineprotected

Member Function Documentation

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
bool itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ComputeInformationFromQueues ( const ScanIteratorType scanIt,
ScanMemType scanMem,
const ScanParametersType scanParameters,
const ThreadIdType  threadId 
) const
protected

Test to see if there are any voxels we need to handle in the current window.

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ComputeMovingTransformDerivative ( const ScanIteratorType scanIt,
ScanMemType scanMem,
const ScanParametersType scanParameters,
DerivativeType deriv,
MeasureType local_cc,
const ThreadIdType  threadId 
) const
protected
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
virtual::itk::LightObject::Pointer itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::CreateAnother ( ) const
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
virtual const char* itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::GetNameOfClass ( ) const
virtual
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::InitializeScanning ( const ImageRegionType scanRegion,
ScanIteratorType scanIt,
ScanMemType scanMem,
ScanParametersType scanParameters 
) const
protected

Common functions for computing correlation over scanning windows Create an iterator over the virtual sub region

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
static Pointer itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::New ( )
static
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
bool itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ProcessPoint ( const VirtualIndexType ,
const VirtualPointType ,
const FixedImagePointType ,
const FixedImagePixelType ,
const FixedImageGradientType ,
const MovingImagePointType ,
const MovingImagePixelType ,
const MovingImageGradientType ,
MeasureType ,
DerivativeType ,
const ThreadIdType   
) const
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 212 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
bool itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ProcessVirtualPoint ( const VirtualIndexType virtualIndex,
const VirtualPointType virtualPoint,
const ThreadIdType  threadId 
)
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: http://stackoverflow.com/questions/3052579/explicit-specialization-in-non-namespace-scopeMethod 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 185 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
bool itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ProcessVirtualPoint_impl ( IdentityHelper< ThreadedIndexedContainerPartitioner ,
const VirtualIndexType virtualIndex,
const VirtualPointType virtualPoint,
const ThreadIdType  threadId 
)
protected
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
template<typename T >
bool itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ProcessVirtualPoint_impl ( IdentityHelper< T >  ,
const VirtualIndexType virtualIndex,
const VirtualPointType virtualPoint,
const ThreadIdType  threadId 
)
inlineprotected
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ThreadedExecution ( const DomainType domain,
const ThreadIdType  threadId 
)
inlineoverrideprotected
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ThreadedExecution_impl ( IdentityHelper< ThreadedImageRegionPartitioner< TImageToImageMetric::VirtualImageDimension > >  ,
const DomainType domain,
const ThreadIdType  threadId 
)
protected
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
template<typename T >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::ThreadedExecution_impl ( IdentityHelper< T >  ,
const DomainType domain,
const ThreadIdType  threadId 
)
protected
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::UpdateQueues ( const ScanIteratorType scanIt,
ScanMemType scanMem,
const ScanParametersType scanParameters,
const ThreadIdType  threadId 
) const
protected

Update the queues for the next point. Calls either UpdateQueuesAtBeginningOfLine or UpdateQueuesToNextScanWindow.

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::UpdateQueuesAtBeginningOfLine ( const ScanIteratorType scanIt,
ScanMemType scanMem,
const ScanParametersType scanParameters,
const ThreadIdType  threadId 
) const
protected
template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
void itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::UpdateQueuesToNextScanWindow ( const ScanIteratorType scanIt,
ScanMemType scanMem,
const ScanParametersType scanParameters,
const ThreadIdType  threadId 
) const
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.

Member Data Documentation

template<typename TDomainPartitioner , typename TImageToImageMetric , typename TNeighborhoodCorrelationMetric >
TNeighborhoodCorrelationMetric* itk::ANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader< TDomainPartitioner, TImageToImageMetric, TNeighborhoodCorrelationMetric >::m_ANTSAssociate
private

Internal pointer to the metric object in use by this threader. This will avoid costly dynamic casting in tight loops.

Definition at line 288 of file itkANTSNeighborhoodCorrelationImageToImageMetricv4GetValueAndDerivativeThreader.h.


The documentation for this class was generated from the following file: