template<unsigned int TFixedDimension, unsigned int TMovingDimension, class TVirtualImage = Image<typename ObjectToObjectMetricBase::ParametersValueType, TFixedDimension>>
class itk::ObjectToObjectMultiMetricv4< TFixedDimension, TMovingDimension, TVirtualImage >
This class takes one ore more ObjectToObject metrics and assigns weights to their derivatives to compute a single result.
This class takes N ObjectToObject-derived component metrics and assigns a weight to each of the metrics' derivatives. It then computes a weighted measure of the metric. The GetValue() and GetValueAndDerivative() methods compute the measure and derivative using the following calculation:
metric value = Sum_j ( w_j * M_j ) (see important note below)
and the GetDerivative() method computes the derivative by computing:
derivative = Sum_j ( w_j * dM_j / ||dM_j|| ) * ( Sum_j( ||dM_j|| ) / J )
- Note
- The metric value is unit-less, and thus it is difficult to compute a combined metric. This metric returns the metric value in three ways: 1) GetValue() returns the computed value of only the first component metric. This result is stored in m_Value and also returned by GetCurrentValue(). 2) GetValueArray() returns an itkArray of metric values, one for each component metric. It only has meaning after a call to GetValue(), GetDerivative() or GetValueAndDerivative(). 3) GetWeightedValue() returns a combined metric value of all component metrics, using the assigned weights. It only has meaning after a call to GetValue(), GetDerivative() or GetValueAndDerivative().
The assigned weights are normalized internally to sum to one before use, and the weights default to 1/N, where N is the number of component metrics.
- Note
- Each component metric must use the same transform parameters object. That is, each metric must be evaluating the same parameters by evaluating the same transform. Except, if a component transform is a CompositeTransform, in which case it must be set to optimize a single transform, and that transform must be the same as the transform in other component metrics.
-
Each component metric must be setup independently, except for the metric transforms which can optionally be set from this class. That is, each component's images or point sets, fixed transforms and options must be set independently. The only methods in this metric for setting up the component metrics is SetMovingTransform(). The corresponding Set accesor is also available. When Set{Fixed/Moving}Transform() is not used this metric's m_{Fixed/Moving}Transform member is assigned to the fixed/moving transform assigned to the first component metric.
Each component will be initialized by this metric in the call to Initialize().
- Note
- When used with an itkRegistrationParameterScalesEstimator estimator, and the multi-metric holds one or more point-set metrics, the user must assign a virtual domain point set for sampling to ensure proper sampling within the point set metrics. In order to generate valid shift estimations, such a virtual domain point set must include mapped points from the fixed point set. See RegistrationParameterScalesEstimator::SetVirtualDomainPointSet() and PointSetToPointSetMetricv4::GetVirtualTransformedPointSet(). If there are two different point sets, then the virtual domain point set should be a union of the two for completeness.
-
If the user does not explicitly assign a virtual domain, then the first valid virtual domain found in the component metrics will be used a virtual domain for this multi-metric, which will be queried by classes such as registration parameter estimators. Each componenet metric will still use its own virtual domain for internal calculations when evaluated, so it is possible to use different virtual domains for each metric if desired. If no component metric has a virtual domain defined, then by default the virtual domain is unbounded. When the transform is high dimensional (e.g. DisplacementFieldTransform) then there must be a virtual domain that matches the space of the transform field. Note that when used with a DisplacementFieldTransform, both Image and PointSet metrics will automatically create a matching virtual domain during initialization if one has not been assigned by the user.
Definition at line 94 of file itkObjectToObjectMultiMetricv4.h.
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef
Superclass::CoordinateRepresentationType | CoordinateRepresentationType |
|
typedef Superclass::DerivativeType | DerivativeType |
|
typedef
Superclass::DerivativeValueType | DerivativeValueType |
|
typedef
Superclass::FixedTransformType | FixedTransformType |
|
typedef Superclass::MeasureType | MeasureType |
|
typedef MetricType::ConstPointer | MetricBaseConstPointer |
|
typedef MetricType::Pointer | MetricBasePointer |
|
typedef std::deque
< MetricBasePointer > | MetricQueueType |
|
typedef Superclass | MetricType |
|
typedef Array< MeasureType > | MetricValueArrayType |
|
typedef
Superclass::MovingTransformType | MovingTransformType |
|
typedef
Superclass::NumberOfParametersType | NumberOfParametersType |
|
typedef Superclass::ParametersType | ParametersType |
|
typedef
Superclass::ParametersValueType | ParametersValueType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef ObjectToObjectMultiMetricv4 | Self |
|
typedef ObjectToObjectMetric
< TFixedDimension,
TMovingDimension,
TVirtualImage > | Superclass |
|
typedef Array< WeightValueType > | WeightsArrayType |
|
typedef DerivativeType::ValueType | WeightValueType |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef
Superclass::ParametersValueType | CoordinateRepresentationType |
|
typedef Superclass::DerivativeType | DerivativeType |
|
typedef
Superclass::DerivativeValueType | DerivativeValueType |
|
typedef SizeValueType | DimensionType |
|
typedef
FixedTransformType::InputPointType | FixedInputPointType |
|
typedef
FixedTransformType::OutputPointType | FixedOutputPointType |
|
typedef
FixedTransformType::JacobianType | FixedTransformJacobianType |
|
typedef
FixedTransformType::ParametersType | FixedTransformParametersType |
|
typedef FixedTransformType::Pointer | FixedTransformPointer |
|
typedef Transform
< ParametersValueType,
TVirtualImage::ImageDimension,
TFixedDimension > | FixedTransformType |
|
typedef
Superclass::InternalComputationValueType | InternalComputationValueType |
|
typedef
FixedTransformType::JacobianType | JacobianType |
|
typedef Superclass::MeasureType | MeasureType |
|
typedef
DisplacementFieldTransform
< CoordinateRepresentationType,
itkGetStaticConstMacro(MovingDimension) > | MovingDisplacementFieldTransformType |
|
typedef
MovingTransformType::InputPointType | MovingInputPointType |
|
typedef
MovingTransformType::OutputPointType | MovingOutputPointType |
|
typedef
MovingTransformType::JacobianType | MovingTransformJacobianType |
|
typedef
MovingTransformType::ParametersType | MovingTransformParametersType |
|
typedef
MovingTransformType::Pointer | MovingTransformPointer |
|
typedef Transform
< ParametersValueType,
TVirtualImage::ImageDimension,
TMovingDimension > | MovingTransformType |
|
typedef
Superclass::NumberOfParametersType | NumberOfParametersType |
|
typedef Superclass::ParametersType | ParametersType |
|
typedef
Superclass::ParametersValueType | ParametersValueType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef ObjectToObjectMetric | Self |
|
typedef ObjectToObjectMetricBase | Superclass |
|
typedef
VirtualImageType::DirectionType | VirtualDirectionType |
|
typedef
VirtualImageType::ConstPointer | VirtualImageConstPointer |
|
typedef VirtualImageType::Pointer | VirtualImagePointer |
|
typedef TVirtualImage | VirtualImageType |
|
typedef VirtualImageType::IndexType | VirtualIndexType |
|
typedef VirtualImageType::PointType | VirtualOriginType |
|
typedef VirtualImageType::PixelType | VirtualPixelType |
|
typedef
VirtualPointSetType::Pointer | VirtualPointSetPointer |
|
typedef PointSet
< VirtualPixelType,
itkGetStaticConstMacro(VirtualDimension)> | VirtualPointSetType |
|
typedef VirtualImageType::PointType | VirtualPointType |
|
typedef VirtualImageType::SizeType | VirtualRadiusType |
|
typedef
VirtualImageType::RegionType | VirtualRegionType |
|
typedef VirtualRegionType::SizeType | VirtualSizeType |
|
typedef
VirtualImageType::SpacingType | VirtualSpacingType |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef
Superclass::ParametersValueType | CoordinateRepresentationType |
|
typedef Superclass::DerivativeType | DerivativeType |
|
typedef DerivativeType::ValueType | DerivativeValueType |
|
enum | GradientSourceType {
GRADIENT_SOURCE_FIXED =0,
GRADIENT_SOURCE_MOVING,
GRADIENT_SOURCE_BOTH
} |
|
typedef double | InternalComputationValueType |
|
typedef Superclass::MeasureType | MeasureType |
|
typedef unsigned int | NumberOfParametersType |
|
typedef Superclass::ParametersType | ParametersType |
|
typedef
Superclass::ParametersValueType | ParametersValueType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef ObjectToObjectMetricBase | Self |
|
typedef SingleValuedCostFunctionv4 | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef Array
< ParametersValueType > | DerivativeType |
|
typedef double | MeasureType |
|
typedef Superclass::ParametersType | ParametersType |
|
typedef
Superclass::ParametersValueType | ParametersValueType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef SingleValuedCostFunctionv4 | Self |
|
typedef CostFunction | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef OptimizerParameters
< ParametersValueType > | ParametersType |
|
typedef double | ParametersValueType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef CostFunction | Self |
|
typedef Object | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef SmartPointer< Self > | Pointer |
|
typedef Object | Self |
|
typedef LightObject | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef SmartPointer< Self > | Pointer |
|
typedef LightObject | Self |
|
template<unsigned int TFixedDimension, unsigned int TMovingDimension, class TVirtualImage = Image<typename ObjectToObjectMetricBase::ParametersValueType, TFixedDimension>>
Create an object from an instance, potentially deferring to a factory. This method allows you to create an instance of an object that is exactly the same type as the referring object. This is useful in cases where an object has been cast back to a base class.
Reimplemented from itk::Object.
template<unsigned int TFixedDimension, unsigned int TMovingDimension, class TVirtualImage = Image<typename ObjectToObjectMetricBase::ParametersValueType, TFixedDimension>>
template<unsigned int TFixedDimension, unsigned int TMovingDimension, class TVirtualImage = Image<typename ObjectToObjectMetricBase::ParametersValueType, TFixedDimension>>
template<unsigned int TFixedDimension, unsigned int TMovingDimension, class TVirtualImage = Image<typename ObjectToObjectMetricBase::ParametersValueType, TFixedDimension>>