X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=registration%2FclitkBSplineDeformableTransform.h;h=f5b269828fffb20b5759ae061d8390e3f8698908;hb=5bff4d89c8ca42336267c36974e9ceb6fe2ac843;hp=2aeaac654ed81c492ead97ece721e911137096fe;hpb=657652a78c2e2717a6f77e027049173442ca29f0;p=clitk.git diff --git a/registration/clitkBSplineDeformableTransform.h b/registration/clitkBSplineDeformableTransform.h index 2aeaac6..f5b2698 100644 --- a/registration/clitkBSplineDeformableTransform.h +++ b/registration/clitkBSplineDeformableTransform.h @@ -3,7 +3,7 @@ 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 @@ -14,7 +14,7 @@ - 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" @@ -27,6 +27,9 @@ namespace clitk { + // Forward declaration needed for friendship + template + class ITK_EXPORT MultipleBSplineDeformableTransform; template < class TCoordRep = double, // Data type for scalars, coordinate representation,vectors @@ -62,6 +65,9 @@ namespace clitk /** 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; @@ -186,7 +192,7 @@ namespace clitk 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 ); @@ -251,10 +257,22 @@ namespace clitk } /** 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; @@ -338,6 +356,7 @@ namespace clitk 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; @@ -351,6 +370,17 @@ namespace clitk /** 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; +#if ITK_VERSION_MAJOR >= 4 + mutable JacobianType m_SharedDataBSplineJacobian; +#endif }; //class BSplineDeformableTransform