diff --git a/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.h b/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.h index 3c3a6c10f5d..7930a740917 100644 --- a/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.h +++ b/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.h @@ -20,7 +20,6 @@ #include "itkFunctionBase.h" #include "itkContinuousIndex.h" -#include "itkBSplineKernelFunction.h" #include "itkArray.h" #include "itkArray2D.h" #include "itkMath.h" @@ -122,12 +121,6 @@ class ITK_TEMPLATE_EXPORT BSplineInterpolationWeightFunction /** Table mapping linear offset to indices. */ TableType m_OffsetToIndexTable; - - /** Interpolation kernel type. */ - using KernelType = BSplineKernelFunction; - - /** Interpolation kernel. */ - typename KernelType::Pointer m_Kernel; }; } // end namespace itk diff --git a/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.hxx b/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.hxx index 062451ad6ba..17a6c1151be 100644 --- a/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.hxx +++ b/Modules/Core/Common/include/itkBSplineInterpolationWeightFunction.hxx @@ -19,6 +19,7 @@ #define itkBSplineInterpolationWeightFunction_hxx #include "itkBSplineInterpolationWeightFunction.h" +#include "itkBSplineKernelFunction.h" #include "itkImage.h" #include "itkMatrix.h" #include "itkMath.h" @@ -44,10 +45,6 @@ BSplineInterpolationWeightFunction::BS } ++counter; } - - - // Initialize the interpolation kernel - m_Kernel = KernelType::New(); } /** @@ -104,7 +101,7 @@ BSplineInterpolationWeightFunction::Ev for (k = 0; k <= SplineOrder; ++k) { - weights1D[j][k] = m_Kernel->Evaluate(x); + weights1D[j][k] = BSplineKernelFunction::FastEvaluate(x); x -= 1.0; } } diff --git a/Modules/Core/Common/include/itkBSplineKernelFunction.h b/Modules/Core/Common/include/itkBSplineKernelFunction.h index 73e2e3a971e..430ecee6e30 100644 --- a/Modules/Core/Common/include/itkBSplineKernelFunction.h +++ b/Modules/Core/Common/include/itkBSplineKernelFunction.h @@ -60,11 +60,19 @@ class ITK_TEMPLATE_EXPORT BSplineKernelFunction : public KernelFunctionBase(), u); + } + /** Evaluate the function. */ TRealValueType Evaluate(const TRealValueType & u) const override { - return this->Evaluate(Dispatch(), u); + return Self::FastEvaluate(u); } protected: @@ -86,8 +94,8 @@ class ITK_TEMPLATE_EXPORT BSplineKernelFunction : public KernelFunctionBase &, const TRealValueType & u) const + inline static TRealValueType + Evaluate(const Dispatch<0> &, const TRealValueType & u) { const TRealValueType absValue = itk::Math::abs(u); if (absValue < static_cast(0.5)) @@ -105,8 +113,8 @@ class ITK_TEMPLATE_EXPORT BSplineKernelFunction : public KernelFunctionBase &, const TRealValueType & u) const + inline static TRealValueType + Evaluate(const Dispatch<1> &, const TRealValueType & u) { const TRealValueType absValue = itk::Math::abs(u); if (absValue < NumericTraits::OneValue()) @@ -120,8 +128,8 @@ class ITK_TEMPLATE_EXPORT BSplineKernelFunction : public KernelFunctionBase &, const TRealValueType & u) const + inline static TRealValueType + Evaluate(const Dispatch<2> &, const TRealValueType & u) { const TRealValueType absValue = itk::Math::abs(u); if (absValue < static_cast(0.5)) @@ -144,8 +152,8 @@ class ITK_TEMPLATE_EXPORT BSplineKernelFunction : public KernelFunctionBase &, const TRealValueType & u) const + inline static TRealValueType + Evaluate(const Dispatch<3> &, const TRealValueType & u) { const TRealValueType absValue = itk::Math::abs(u); if (absValue < NumericTraits::OneValue()) @@ -169,10 +177,10 @@ class ITK_TEMPLATE_EXPORT BSplineKernelFunction : public KernelFunctionBase