X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=registration%2FclitkMultipleBSplineDeformableTransform.txx;h=32ebced48447e08923ce6baefec63dbdb4253716;hb=fa358ee6738c92950cd9e6c45f55dda6e9b4576e;hp=0ec20aa2bdf29398a97a267b81cf21d6dd800f46;hpb=573d80d0f7a17607d2ee883c21c940c0ba020282;p=clitk.git diff --git a/registration/clitkMultipleBSplineDeformableTransform.txx b/registration/clitkMultipleBSplineDeformableTransform.txx index 0ec20aa..32ebced 100644 --- a/registration/clitkMultipleBSplineDeformableTransform.txx +++ b/registration/clitkMultipleBSplineDeformableTransform.txx @@ -29,7 +29,11 @@ namespace clitk // Constructor with default arguments template MultipleBSplineDeformableTransform +#if ITK_VERSION_MAJOR >= 4 + ::MultipleBSplineDeformableTransform() : Superclass(0) +#else ::MultipleBSplineDeformableTransform() : Superclass(OutputDimension, 0) +#endif { m_nLabels = 1; m_labels = 0; @@ -425,15 +429,38 @@ namespace clitk return m_trans[lidx]->DeformablyTransformPoint(inputPoint); } +#if ITK_VERSION_MAJOR >= 4 + template + inline void + MultipleBSplineDeformableTransform + ::ComputeJacobianWithRespectToParameters (const InputPointType &point, JacobianType &jacobian) const + { + if (m_LastJacobian != -1) + m_trans[m_LastJacobian]->ResetJacobian(); + + int lidx = 0; + if (m_labels) + lidx = m_labelInterpolator->Evaluate(point) - 1; + if (lidx == -1) + { + m_LastJacobian = lidx; + jacobian = this->m_SharedDataBSplineJacobian; + return; + } + + JacobianType unused; + m_trans[lidx]->ComputeJacobianWithRespectToParameters(point, unused); + m_LastJacobian = lidx; + + jacobian = this->m_SharedDataBSplineJacobian; + } + +#else template inline const typename MultipleBSplineDeformableTransform::JacobianType & MultipleBSplineDeformableTransform ::GetJacobian( const InputPointType & point ) const { - /* - for (unsigned i = 0; i < m_nLabels; ++i) - m_trans[i]->ResetJacobian(); - */ if (m_LastJacobian != -1) m_trans[m_LastJacobian]->ResetJacobian(); @@ -451,6 +478,7 @@ namespace clitk return this->m_Jacobian; } +#endif template inline void @@ -465,8 +493,13 @@ namespace clitk MultipleBSplineDeformableTransform::InitJacobian() { unsigned numberOfParameters = this->GetNumberOfParameters(); +#if ITK_VERSION_MAJOR >= 4 + this->m_SharedDataBSplineJacobian.set_size(OutputDimension, numberOfParameters); + JacobianPixelType * jacobianDataPointer = reinterpret_cast(this->m_SharedDataBSplineJacobian.data_block()); +#else this->m_Jacobian.set_size(OutputDimension, numberOfParameters); JacobianPixelType * jacobianDataPointer = reinterpret_cast(this->m_Jacobian.data_block()); +#endif memset(jacobianDataPointer, 0, numberOfParameters * sizeof (JacobianPixelType)); unsigned tot = 0;