X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=registration%2FclitkMultipleBSplineDeformableTransform.txx;h=8df270661409bf8c8ed4939fa34c017db445f0f7;hb=06dc48f17ea8545df56511ca1537a546b161a164;hp=0ec20aa2bdf29398a97a267b81cf21d6dd800f46;hpb=573d80d0f7a17607d2ee883c21c940c0ba020282;p=clitk.git diff --git a/registration/clitkMultipleBSplineDeformableTransform.txx b/registration/clitkMultipleBSplineDeformableTransform.txx index 0ec20aa..8df2706 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; @@ -325,7 +329,11 @@ namespace clitk #undef LOOP_ON_LABELS template +#if ITK_VERSION_MAJOR >= 4 + inline typename MultipleBSplineDeformableTransform::NumberOfParametersType +#else inline unsigned int +#endif MultipleBSplineDeformableTransform ::GetNumberOfParameters(void) const { @@ -425,15 +433,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 +482,7 @@ namespace clitk return this->m_Jacobian; } +#endif template inline void @@ -465,8 +497,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;