template<typename TPointSet, class TInternalComputationValueType = double>
class itk::JensenHavrdaCharvatTsallisPointSetToPointSetMetricv4< TPointSet, TInternalComputationValueType >
Implementation of the Jensen Havrda Charvat Tsallis Point Set metric.
Given a specified transform and direction, this class calculates the value and derivative between a "fixed" and "moving" point set pair using the Havrda-Charvat-Tsallis entropy family, a generalization of the well-known Shannon entropy, and the Jensen divergence. Another way to look at the family of information-theoretic measures is that the points are used to construct the corresponding probably density functions.
In addition, we allow the user to invoke a manifold parzen windowing of the data. Instead of an isotropic Gaussian being associated with each point, we can actually calculate the covariance matrix for each point such that it reflects the locate point set structure.
To speed up the metric calculation, we use ITK's K-d tree to query the metric value only for a given neighborhood. Considering that probably only a small subset of points is needed to get a good approximation of the metric value for a single point, this is probably warranted. So what we do is transform each point (with the specified transform) and construct the k-d tree from the transformed points.
Contributed by Nicholas J. Tustison, James C. Gee in the Insight Journal paper: https://hdl.handle.net/1926/1524
- Note
- The original work reported in Tustison et al. 2011 optionally employed a regularization term to prevent the moving point set(s) from coalescing to a single point location. However, within the registration framework, this term is of limited utility as such regularization is dictated by the transform and any explicit regularization terms. Also note that the published work applies to multiple points sets each of which could be considered "moving" but this is also not applicable for this particular implementation.
- REFERENCE
N.J. Tustison, S. P. Awate, G. Song, T. S. Cook, and J. C. Gee. "Point set registration using Havrda-Charvat-Tsallis entropy measures" IEEE Transactions on Medical Imaging, 30(2):451-60, 2011.
Definition at line 71 of file itkJensenHavrdaCharvatTsallisPointSetToPointSetMetricv4.h.
|
using | ConstPointer = SmartPointer< const Self > |
|
using | CoordRepType = typename Superclass::CoordRepType |
|
using | DensityFunctionPointer = typename DensityFunctionType::Pointer |
|
using | DensityFunctionType = ManifoldParzenWindowsPointSetFunction< PointSetType, RealType > |
|
using | DerivativeType = typename Superclass::DerivativeType |
|
using | DerivativeValueType = typename Superclass::DerivativeValueType |
|
using | FixedTransformJacobianType = typename Superclass::FixedTransformJacobianType |
|
using | GaussianType = typename DensityFunctionType::GaussianType |
|
using | JacobianType = typename Superclass::JacobianType |
|
using | LocalDerivativeType = typename Superclass::LocalDerivativeType |
|
using | MeasureType = typename Superclass::MeasureType |
|
using | MovingTransformJacobianType = typename Superclass::MovingTransformJacobianType |
|
using | NeighborsIdentifierType = typename Superclass::NeighborsIdentifierType |
|
using | NumberOfParametersType = typename Superclass::NumberOfParametersType |
|
using | PixelType = typename Superclass::PixelType |
|
using | Pointer = SmartPointer< Self > |
|
using | PointIdentifier = typename Superclass::PointIdentifier |
|
using | PointsContainer = typename PointSetType::PointsContainer |
|
using | PointsContainerConstIterator = typename PointsContainer::ConstIterator |
|
using | PointSetType = TPointSet |
|
using | PointType = typename Superclass::PointType |
|
using | RealType = MeasureType |
|
using | Self = JensenHavrdaCharvatTsallisPointSetToPointSetMetricv4 |
|
using | Superclass = PointSetToPointSetMetricv4< TPointSet, TPointSet, TInternalComputationValueType > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | CoordRepType = typename PointType::CoordRepType |
|
using | DerivativeType = typename Superclass::DerivativeType |
|
using | DerivativeValueType = typename DerivativeType::ValueType |
|
using | DimensionType = typename Superclass::DimensionType |
|
using | DisplacementFieldTransformType = typename Superclass::MovingDisplacementFieldTransformType |
|
using | FixedInputPointType = typename Superclass::FixedInputPointType |
|
using | FixedOutputPointType = typename Superclass::FixedOutputPointType |
|
using | FixedPixelType = typename TPointSet::PixelType |
|
using | FixedPointsContainer = typename TPointSet::PointsContainer |
|
using | FixedPointSetType = TPointSet |
|
using | FixedPointType = typename TPointSet::PointType |
|
using | FixedTransformedPointSetType = PointSet< FixedPixelType, Self::PointDimension > |
|
using | FixedTransformJacobianType = typename Superclass::FixedTransformJacobianType |
|
using | FixedTransformParametersType = typename Superclass::FixedTransformParametersType |
|
using | FixedTransformPointer = typename Superclass::FixedTransformPointer |
|
using | FixedTransformType = typename Superclass::FixedTransformType |
|
using | JacobianType = typename Superclass::JacobianType |
|
using | LocalDerivativeType = FixedArray< DerivativeValueType, Self::PointDimension > |
|
using | MeasureType = typename Superclass::MeasureType |
|
using | MovingInputPointType = typename Superclass::MovingInputPointType |
|
using | MovingOutputPointType = typename Superclass::MovingOutputPointType |
|
using | MovingPixelType = typename TPointSet::PixelType |
|
using | MovingPointsContainer = typename TPointSet::PointsContainer |
|
using | MovingPointSetType = TPointSet |
|
using | MovingPointType = typename TPointSet::PointType |
|
using | MovingTransformedPointSetType = PointSet< MovingPixelType, Self::PointDimension > |
|
using | MovingTransformJacobianType = typename Superclass::MovingTransformJacobianType |
|
using | MovingTransformParametersType = typename Superclass::MovingTransformParametersType |
|
using | MovingTransformPointer = typename Superclass::MovingTransformPointer |
|
using | MovingTransformType = typename Superclass::MovingTransformType |
|
using | NeighborsIdentifierType = typename PointsLocatorType::NeighborsIdentifierType |
|
using | NumberOfParametersType = typename Superclass::NumberOfParametersType |
|
using | ObjectType = typename Superclass::ObjectType |
|
using | ParametersType = typename Superclass::ParametersType |
|
using | ParametersValueType = typename Superclass::ParametersValueType |
|
using | PixelType = FixedPixelType |
|
using | Pointer = SmartPointer< Self > |
|
using | PointIdentifier = typename PointsContainer::ElementIdentifier |
|
using | PointsConstIterator = typename PointsContainer::ConstIterator |
|
using | PointsContainer = FixedPointsContainer |
|
using | PointsLocatorType = PointsLocator< PointsContainer > |
|
using | PointType = FixedPointType |
|
using | Self = PointSetToPointSetMetricv4 |
|
using | Superclass = ObjectToObjectMetric< TPointSet::PointDimension, TPointSet::PointDimension, Image< TInternalComputationValueType, TPointSet::PointDimension >, TInternalComputationValueType > |
|
using | VirtualDirectionType = typename Superclass::VirtualDirectionType |
|
using | VirtualImagePointer = typename Superclass::VirtualImagePointer |
|
using | VirtualImageType = typename Superclass::VirtualImageType |
|
using | VirtualIndexType = typename Superclass::VirtualIndexType |
|
using | VirtualOriginType = typename Superclass::VirtualPointType |
|
using | VirtualPixelType = typename Superclass::VirtualPixelType |
|
using | VirtualPointSetPointer = typename Superclass::VirtualPointSetPointer |
|
using | VirtualPointSetType = typename Superclass::VirtualPointSetType |
|
using | VirtualPointType = typename Superclass::VirtualPointType |
|
using | VirtualRadiusType = typename Superclass::VirtualSizeType |
|
using | VirtualRegionType = typename Superclass::VirtualRegionType |
|
using | VirtualSizeType = typename Superclass::VirtualSizeType |
|
using | VirtualSpacingType = typename Superclass::VirtualSpacingType |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | CoordinateRepresentationType = TInternalComputationValueType |
|
using | DerivativeType = typename Superclass::DerivativeType |
|
using | DerivativeValueType = typename Superclass::DerivativeValueType |
|
using | DimensionType = SizeValueType |
|
using | FixedInputPointType = typename FixedTransformType::InputPointType |
|
using | FixedOutputPointType = typename FixedTransformType::OutputPointType |
|
using | FixedTransformJacobianType = typename FixedTransformType::JacobianType |
|
using | FixedTransformParametersType = typename FixedTransformType::ParametersType |
|
using | FixedTransformPointer = typename FixedTransformType::Pointer |
|
using | FixedTransformType = Transform< TInternalComputationValueType, Image< TInternalComputationValueType, TPointSet::PointDimension >::ImageDimension, TFixedDimension > |
|
using | GradientSourceType = typename Superclass::GradientSourceType |
|
using | InternalComputationValueType = TInternalComputationValueType |
|
using | JacobianType = typename FixedTransformType::JacobianType |
|
using | MeasureType = typename Superclass::MeasureType |
|
using | MetricCategoryType = typename Superclass::MetricCategoryType |
|
using | MovingDisplacementFieldTransformType = DisplacementFieldTransform< CoordinateRepresentationType, Self::MovingDimension > |
|
using | MovingInputPointType = typename MovingTransformType::InputPointType |
|
using | MovingOutputPointType = typename MovingTransformType::OutputPointType |
|
using | MovingTransformJacobianType = typename MovingTransformType::JacobianType |
|
using | MovingTransformParametersType = typename MovingTransformType::ParametersType |
|
using | MovingTransformPointer = typename MovingTransformType::Pointer |
|
using | MovingTransformType = Transform< TInternalComputationValueType, Image< TInternalComputationValueType, TPointSet::PointDimension >::ImageDimension, TMovingDimension > |
|
using | NumberOfParametersType = typename Superclass::NumberOfParametersType |
|
using | ObjectType = typename Superclass::Object |
|
using | ParametersType = typename Superclass::ParametersType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ObjectToObjectMetric |
|
using | Superclass = ObjectToObjectMetricBaseTemplate< TInternalComputationValueType > |
|
using | VirtualDirectionType = typename VirtualImageType::DirectionType |
|
using | VirtualImageConstPointer = typename VirtualImageType::ConstPointer |
|
using | VirtualImagePointer = typename VirtualImageType::Pointer |
|
using | VirtualImageType = Image< TInternalComputationValueType, TPointSet::PointDimension > |
|
using | VirtualIndexType = typename VirtualImageType::IndexType |
|
using | VirtualOriginType = typename VirtualImageType::PointType |
|
using | VirtualPixelType = typename VirtualImageType::PixelType |
|
using | VirtualPointSetPointer = typename VirtualPointSetType::Pointer |
|
using | VirtualPointSetType = PointSet< VirtualPixelType, Self::VirtualDimension > |
|
using | VirtualPointType = typename VirtualImageType::PointType |
|
using | VirtualRadiusType = typename VirtualImageType::SizeType |
|
using | VirtualRegionType = typename VirtualImageType::RegionType |
|
using | VirtualSizeType = typename VirtualRegionType::SizeType |
|
using | VirtualSpacingType = typename VirtualImageType::SpacingType |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | CoordinateRepresentationType = TInternalComputationValueType |
|
using | DerivativeType = typename Superclass::DerivativeType |
|
using | DerivativeValueType = typename DerivativeType::ValueType |
|
enum | GradientSourceType {
GRADIENT_SOURCE_FIXED =0,
GRADIENT_SOURCE_MOVING,
GRADIENT_SOURCE_BOTH
} |
|
using | MeasureType = typename Superclass::MeasureType |
|
enum | MetricCategoryType {
UNKNOWN_METRIC = 0,
OBJECT_METRIC = 1,
IMAGE_METRIC = 2,
POINT_SET_METRIC = 3,
MULTI_METRIC = 4
} |
|
using | NumberOfParametersType = unsigned int |
|
using | ObjectConstPointer = typename ObjectType::ConstPointer |
|
using | ObjectType = Object |
|
using | ParametersType = typename Superclass::ParametersType |
|
using | ParametersValueType = TInternalComputationValueType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ObjectToObjectMetricBaseTemplate |
|
using | Superclass = SingleValuedCostFunctionv4Template< TInternalComputationValueType > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DerivativeType = Array< TInternalComputationValueType > |
|
using | MeasureType = TInternalComputationValueType |
|
using | ParametersType = typename Superclass::ParametersType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = SingleValuedCostFunctionv4Template |
|
using | Superclass = CostFunctionTemplate< TInternalComputationValueType > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | ParametersType = OptimizerParameters< TInternalComputationValueType > |
|
using | ParametersValueType = TInternalComputationValueType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = CostFunctionTemplate |
|
using | Superclass = Object |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = Object |
|
using | Superclass = LightObject |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = LightObject |
|
|
virtual RealType | GetAlpha () const |
|
virtual unsigned int | GetCovarianceKNeighborhood () const |
|
virtual unsigned int | GetEvaluationKNeighborhood () const |
|
virtual RealType | GetKernelSigma () const |
|
MeasureType | GetLocalNeighborhoodValue (const PointType &point, const PixelType &pixel=0) const override |
|
void | GetLocalNeighborhoodValueAndDerivative (const PointType &, MeasureType &, LocalDerivativeType &, const PixelType &pixel=0) const override |
|
virtual const char * | GetNameOfClass () const |
|
virtual RealType | GetPointSetSigma () const |
|
virtual bool | GetUseAnisotropicCovariances () const |
|
void | Initialize () override |
|
LightObject::Pointer | InternalClone () const override |
|
virtual void | SetAlpha (RealType _arg) |
|
virtual void | SetCovarianceKNeighborhood (unsigned int _arg) |
|
virtual void | SetEvaluationKNeighborhood (unsigned int _arg) |
|
virtual void | SetKernelSigma (RealType _arg) |
|
virtual void | SetPointSetSigma (RealType _arg) |
|
virtual void | SetUseAnisotropicCovariances (bool _arg) |
|
virtual void | UseAnisotropicCovariancesOff () |
|
virtual void | UseAnisotropicCovariancesOn () |
|
void | GetDerivative (DerivativeType &) const override |
|
virtual const
FixedTransformedPointSetType * | GetFixedTransformedPointSet () const |
|
virtual LocalDerivativeType | GetLocalNeighborhoodDerivative (const PointType &, const PixelType &pixel) const |
|
virtual MeasureType | GetLocalNeighborhoodValue (const PointType &, const PixelType &pixel) const =0 |
|
virtual void | GetLocalNeighborhoodValueAndDerivative (const PointType &, MeasureType &, LocalDerivativeType &, const PixelType &pixel) const =0 |
|
virtual
FixedTransformedPointSetType * | GetModifiableFixedTransformedPointSet () |
|
virtual
MovingTransformedPointSetType * | GetModifiableMovingTransformedPointSet () |
|
virtual const
MovingTransformedPointSetType * | GetMovingTransformedPointSet () const |
|
SizeValueType | GetNumberOfComponents () const |
|
MeasureType | GetValue () const override |
|
void | GetValueAndDerivative (MeasureType &, DerivativeType &) const override |
|
const VirtualPointSetType * | GetVirtualTransformedPointSet () const |
|
void | Initialize () override |
|
bool | SupportsArbitraryVirtualDomainSamples () const override |
|
void | SetFixedObject (const ObjectType *object) override |
|
void | SetMovingObject (const ObjectType *object) override |
|
virtual void | SetFixedPointSet (const FixedPointSetType *_arg) |
|
virtual const FixedPointSetType * | GetFixedPointSet () const |
|
virtual void | SetMovingPointSet (const MovingPointSetType *_arg) |
|
virtual const MovingPointSetType * | GetMovingPointSet () const |
|
virtual void | SetStoreDerivativeAsSparseFieldForLocalSupportTransforms (bool _arg) |
|
virtual bool | GetStoreDerivativeAsSparseFieldForLocalSupportTransforms () const |
|
virtual void | StoreDerivativeAsSparseFieldForLocalSupportTransformsOn () |
|
virtual void | StoreDerivativeAsSparseFieldForLocalSupportTransformsOff () |
|
virtual void | SetCalculateValueAndDerivativeInTangentSpace (bool _arg) |
|
virtual bool | GetCalculateValueAndDerivativeInTangentSpace () const |
|
virtual void | CalculateValueAndDerivativeInTangentSpaceOn () |
|
virtual void | CalculateValueAndDerivativeInTangentSpaceOff () |
|
OffsetValueType | ComputeParameterOffsetFromVirtualIndex (const VirtualIndexType &index, const NumberOfParametersType &numberOfLocalParameters) const |
|
OffsetValueType | ComputeParameterOffsetFromVirtualPoint (const VirtualPointType &point, const NumberOfParametersType &numberOfLocalParameters) const |
|
virtual const FixedTransformType * | GetFixedTransform () const |
|
virtual FixedTransformType * | GetModifiableFixedTransform () |
|
virtual MovingTransformType * | GetModifiableMovingTransform () |
|
virtual VirtualImageType * | GetModifiableVirtualImage () |
|
virtual const MovingTransformType * | GetMovingTransform () const |
|
NumberOfParametersType | GetNumberOfLocalParameters () const override |
|
NumberOfParametersType | GetNumberOfParameters () const override |
|
virtual SizeValueType | GetNumberOfValidPoints () const |
|
const ParametersType & | GetParameters () const override |
|
const MovingTransformType * | GetTransform () |
|
VirtualDirectionType | GetVirtualDirection () const |
|
virtual const TimeStamp & | GetVirtualDomainTimeStamp () const |
|
virtual const VirtualImageType * | GetVirtualImage () const |
|
VirtualOriginType | GetVirtualOrigin () const |
|
const VirtualRegionType & | GetVirtualRegion () const |
|
VirtualSpacingType | GetVirtualSpacing () const |
|
bool | HasLocalSupport () const override |
|
virtual void | SetFixedTransform (FixedTransformType *_arg) |
|
virtual void | SetMovingTransform (MovingTransformType *_arg) |
|
void | SetParameters (ParametersType ¶ms) override |
|
void | SetTransform (MovingTransformType *transform) |
|
void | SetVirtualDomain (const VirtualSpacingType &spacing, const VirtualOriginType &origin, const VirtualDirectionType &direction, const VirtualRegionType ®ion) |
|
void | SetVirtualDomainFromImage (const VirtualImageType *virtualImage) |
|
void | UpdateTransformParameters (const DerivativeType &derivative, TInternalComputationValueTypefactor) override |
|
bool | IsInsideVirtualDomain (const VirtualPointType &point) const |
|
bool | IsInsideVirtualDomain (const VirtualIndexType &index) const |
|
MeasureType | GetCurrentValue () const |
|
virtual GradientSourceType | GetGradientSource () const |
|
bool | GetGradientSourceIncludesFixed () const |
|
bool | GetGradientSourceIncludesMoving () const |
|
virtual void | SetGradientSource (GradientSourceType _arg) |
|
virtual const ObjectType * | GetFixedObject () const |
|
virtual const ObjectType * | GetMovingObject () const |
|
virtual void | GetValueAndDerivative (MeasureType &value, DerivativeType &derivative) const =0 |
|
unsigned long | AddObserver (const EventObject &event, Command *) |
|
unsigned long | AddObserver (const EventObject &event, Command *) const |
|
LightObject::Pointer | CreateAnother () const override |
|
virtual void | DebugOff () const |
|
virtual void | DebugOn () const |
|
Command * | GetCommand (unsigned long tag) |
|
bool | GetDebug () const |
|
MetaDataDictionary & | GetMetaDataDictionary () |
|
const MetaDataDictionary & | GetMetaDataDictionary () const |
|
virtual ModifiedTimeType | GetMTime () const |
|
virtual const TimeStamp & | GetTimeStamp () const |
|
bool | HasObserver (const EventObject &event) const |
|
void | InvokeEvent (const EventObject &) |
|
void | InvokeEvent (const EventObject &) const |
|
virtual void | Modified () const |
|
void | Register () const override |
|
void | RemoveAllObservers () |
|
void | RemoveObserver (unsigned long tag) |
|
void | SetDebug (bool debugFlag) const |
|
void | SetReferenceCount (int) override |
|
void | UnRegister () const noexceptoverride |
|
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
|
void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
|
virtual void | SetObjectName (std::string _arg) |
|
virtual const std::string & | GetObjectName () const |
|
virtual void | Delete () |
|
virtual int | GetReferenceCount () const |
|
| itkCloneMacro (Self) |
|
void | Print (std::ostream &os, Indent indent=0) const |
|