00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __itkPointSetToPointSetMetric_h
00018
#define __itkPointSetToPointSetMetric_h
00019
00020
#include "itkImageBase.h"
00021
#include "itkTransform.h"
00022
#include "itkMultipleValuedCostFunction.h"
00023
#include "itkExceptionObject.h"
00024
#include "itkGradientRecursiveGaussianImageFilter.h"
00025
00026
namespace itk
00027 {
00028
00043
template <
class TFixedPo
intSet,
class TMovingPo
intSet>
00044 class ITK_EXPORT PointSetToPointSetMetric :
public MultipleValuedCostFunction
00045 {
00046
public:
00047
00049 typedef PointSetToPointSetMetric
Self;
00050 typedef MultipleValuedCostFunction Superclass;
00051 typedef SmartPointer<Self> Pointer;
00052 typedef SmartPointer<const Self> ConstPointer;
00053
00055 typedef Superclass::ParametersValueType
CoordinateRepresentationType;
00056
00058
itkTypeMacro(PointSetToPointSetMetric,
MultipleValuedCostFunction);
00059
00061 typedef TMovingPointSet
MovingPointSetType;
00062 typedef typename TMovingPointSet::PixelType
MovingPointSetPixelType;
00063 typedef typename MovingPointSetType::ConstPointer
MovingPointSetConstPointer;
00064
00066 typedef TFixedPointSet
FixedPointSetType;
00067 typedef typename FixedPointSetType::ConstPointer
FixedPointSetConstPointer;
00068
00070
itkStaticConstMacro(MovingPointSetDimension,
unsigned int,
00071 TMovingPointSet::PointDimension);
00072
itkStaticConstMacro(FixedPointSetDimension,
unsigned int,
00073 TFixedPointSet::PointDimension);
00074
00075
typedef typename FixedPointSetType::PointsContainer::ConstIterator
PointIterator;
00076 typedef typename FixedPointSetType::PointDataContainer::ConstIterator
PointDataIterator;
00077
00079
typedef Transform<
CoordinateRepresentationType,
00080
itkGetStaticConstMacro(MovingPointSetDimension),
00081
itkGetStaticConstMacro(FixedPointSetDimension)>
TransformType;
00082
00083
typedef typename TransformType::Pointer
TransformPointer;
00084 typedef typename TransformType::InputPointType
InputPointType;
00085 typedef typename TransformType::OutputPointType
OutputPointType;
00086 typedef typename TransformType::ParametersType
TransformParametersType;
00087 typedef typename TransformType::JacobianType
TransformJacobianType;
00088
00090
typedef Superclass::MeasureType
MeasureType;
00091
00093
typedef Superclass::DerivativeType
DerivativeType;
00094
00096
typedef Superclass::ParametersType
ParametersType;
00097
00099
itkSetConstObjectMacro( FixedPointSet,
FixedPointSetType );
00100
00102
itkGetConstObjectMacro( FixedPointSet,
FixedPointSetType );
00103
00105
itkSetConstObjectMacro( MovingPointSet,
MovingPointSetType );
00106
00108
itkGetConstObjectMacro( MovingPointSet,
MovingPointSetType );
00109
00111
itkSetObjectMacro(
Transform,
TransformType );
00112
00114
itkGetObjectMacro(
Transform,
TransformType );
00115
00117
void SetTransformParameters(
const ParametersType & parameters )
const;
00118
00120
unsigned int GetNumberOfParameters(
void)
const
00121 {
return m_Transform->GetNumberOfParameters(); }
00122
00125
virtual void Initialize(
void) throw ( ExceptionObject );
00126
00127 protected:
00128 PointSetToPointSetMetric();
00129 virtual ~PointSetToPointSetMetric() {};
00130 void PrintSelf(std::ostream& os,
Indent indent)
const;
00131
00132
FixedPointSetConstPointer m_FixedPointSet;
00133 MovingPointSetConstPointer m_MovingPointSet;
00134
00135
mutable TransformPointer m_Transform;
00136
00137
private:
00138 PointSetToPointSetMetric(
const Self&);
00139
void operator=(
const Self&);
00140
00141 };
00142
00143 }
00144
00145
#ifndef ITK_MANUAL_INSTANTIATION
00146
#include "itkPointSetToPointSetMetric.txx"
00147
#endif
00148
00149
#endif
00150