17 #ifndef __itkAdvancedIdentityTransform_h
18 #define __itkAdvancedIdentityTransform_h
20 #include "itkObject.h"
22 #include "itkVector.h"
23 #include "itkCovariantVector.h"
24 #include "vnl/vnl_vector_fixed.h"
26 #include "itkArray2D.h"
29 #include "itkObjectFactory.h"
54 template <
class TScalarType,
55 unsigned int NDimensions=3>
74 itkStaticConstMacro( InputSpaceDimension,
unsigned int, NDimensions );
75 itkStaticConstMacro( OutputSpaceDimension,
unsigned int, NDimensions );
76 itkStaticConstMacro( ParametersDimension,
unsigned int, 1 );
88 typedef Vector<TScalarType,
90 typedef Vector<TScalarType,
94 typedef CovariantVector<TScalarType,
96 typedef CovariantVector<TScalarType,
100 typedef vnl_vector_fixed<TScalarType,
102 typedef vnl_vector_fixed<TScalarType,
106 typedef Point<TScalarType,
108 typedef Point<TScalarType,
180 return this->m_Jacobian;
186 return this->New().GetPointer();
199 return this->m_FixedParameters;
208 return this->m_Parameters;
215 virtual void GetJacobian(
220 j = this->m_Jacobian;
221 nonZeroJacobianIndices = this->m_NonZeroJacobianIndices;
226 virtual void GetSpatialJacobian(
230 sj = this->m_SpatialJacobian;
234 virtual void GetSpatialHessian(
238 sh = this->m_SpatialHessian;
242 virtual void GetJacobianOfSpatialJacobian(
247 jsj = this->m_JacobianOfSpatialJacobian;
248 nonZeroJacobianIndices = this->m_NonZeroJacobianIndices;
252 virtual void GetJacobianOfSpatialJacobian(
258 sj = this->m_SpatialJacobian;
259 jsj = this->m_JacobianOfSpatialJacobian;
260 nonZeroJacobianIndices = this->m_NonZeroJacobianIndices;
264 virtual void GetJacobianOfSpatialHessian(
269 jsh = this->m_JacobianOfSpatialHessian;
270 nonZeroJacobianIndices = this->m_NonZeroJacobianIndices;
276 virtual void GetJacobianOfSpatialHessian(
282 sh = this->m_SpatialHessian;
283 jsh = this->m_JacobianOfSpatialHessian;
284 nonZeroJacobianIndices = this->m_NonZeroJacobianIndices;
293 this->m_Jacobian.Fill( 0.0 );
296 this->m_SpatialJacobian.SetIdentity();
299 this->m_NonZeroJacobianIndices.resize( ParametersDimension );
300 for (
unsigned int i = 0; i < ParametersDimension; ++i )
302 this->m_NonZeroJacobianIndices[ i ] = i;
306 this->m_HasNonZeroSpatialHessian =
false;
307 this->m_HasNonZeroJacobianOfSpatialHessian =
false;
308 this->m_JacobianOfSpatialJacobian.resize( ParametersDimension );
309 this->m_JacobianOfSpatialHessian.resize( ParametersDimension );
317 void operator=(
const Self&);