Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
#ifndef __clitkBSplineDeformableTransform_h
#define __clitkBSplineDeformableTransform_h
#include "clitkVectorBSplineResampleImageFunctionWithLUT.h"
namespace clitk
{
+ // Forward declaration needed for friendship
+ template <class TCoordRep, unsigned int NInputDimensions, unsigned int NOutputDimensions>
+ class ITK_EXPORT MultipleBSplineDeformableTransform;
template <
class TCoordRep = double, // Data type for scalars, coordinate representation,vectors
/** Standard parameters container. */
typedef typename Superclass::ParametersType ParametersType;
+#if ITK_VERSION_MAJOR >= 4
+ typedef typename Superclass::NumberOfParametersType NumberOfParametersType;
+#endif
/** Standard Jacobian container. */
typedef typename Superclass::JacobianType JacobianType;
void SetBulkTransform(BulkTransformPointer b){m_BulkTransform=b;}
BulkTransformPointer GetBulkTransform(void) {return m_BulkTransform;}
- //Set mask, inside transform applies, outside zero, real pointer
+ // Set mask, inside transform applies, outside zero, real pointer
void SetMask(MaskPointer m){m_Mask=m;}
MaskPointer GetMask(void){return m_Mask;}
// itkSetConstObjectMacro( Mask, MaskType );
}
/** Compute the Jacobian Matrix of the transformation at one point */
+#if ITK_VERSION_MAJOR >= 4
+ virtual void ComputeJacobianWithRespectToParameters (const InputPointType &p, JacobianType &jacobian) const;
+ virtual void ComputeJacobianWithRespectToPosition (const InputPointType &p, JacobianType &jacobian) const
+ {
+ itkExceptionMacro( "ComputeJacobianWithRespectToPosition not yet implemented for " << this->GetNameOfClass() );
+ }
+#else
virtual const JacobianType& GetJacobian(const InputPointType &point ) const;
+#endif
/** Return the number of parameters that completely define the Transfom */
+#if ITK_VERSION_MAJOR >= 4
+ virtual NumberOfParametersType GetNumberOfParameters(void) const;
+#else
virtual unsigned int GetNumberOfParameters(void) const;
+#endif
/** Return the number of parameters per dimension */
unsigned int GetNumberOfParametersPerDimension(void) const;
mutable IteratorType m_Iterator[OutputDimension];
mutable JacobianPixelType m_ZeroVector;
mutable ContinuousIndexType m_Index;
+ mutable bool m_NeedResetJacobian;
/** Keep a pointer to the input parameters. */
const ParametersType * m_InputParametersPointer;
/** Check if a continuous index is inside the valid region. */
bool InsideValidRegion( const ContinuousIndexType& index ) const;
+ // VD Use external data container for JacobianImage
+ unsigned SetJacobianImageData(JacobianPixelType * jacobianDataPointer, unsigned dim);
+
+ // VD Reset Jacobian
+ void ResetJacobian() const;
+
+ // VD Add MultipleBSplineDeformableTransform as friend to facilitate wrapping
+ friend class MultipleBSplineDeformableTransform<TCoordRep, NInputDimensions, NOutputDimensions>;
+#if ITK_VERSION_MAJOR >= 4
+ mutable JacobianType m_SharedDataBSplineJacobian;
+#endif
}; //class BSplineDeformableTransform
} // namespace itk
-#if ITK_TEMPLATE_TXX
+#ifndef ITK_MANUAL_INSTANTIATION
# include "clitkBSplineDeformableTransform.txx"
#endif