Loading...
Searching...
No Matches
itkBSplineStackTransform.h
Go to the documentation of this file.
/*=========================================================================
*
* Copyright UMC Utrecht and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef itkBSplineStackTransform_h
#define itkBSplineStackTransform_h
#include "itkStackTransform.h"
#include "itkAdvancedBSplineDeformableTransform.h"
#include "elxElastixBase.h"
namespace itk
{
template <unsigned int NDimension>
class ITK_TEMPLATE_EXPORT BSplineStackTransform
: public itk::StackTransform<elx::ElastixBase::CoordRepType, NDimension, NDimension>
{
private:
using CoordRepType = elx::ElastixBase::CoordRepType;
public:
ITK_DISALLOW_COPY_AND_MOVE(BSplineStackTransform);
using Self = BSplineStackTransform;
using Superclass = itk::StackTransform<CoordRepType, NDimension, NDimension>;
using Pointer = itk::SmartPointer<BSplineStackTransform>;
using typename Superclass::FixedParametersType;
itkNewMacro(Self);
itkTypeMacro(BSplineStackTransform, Superclass);
private:
using Superclass::NumberOfGeneralFixedParametersOfStack;
static constexpr unsigned int NumberOfFixedParametersOfSubTransform =
AdvancedBSplineDeformableTransformBase<CoordRepType, NDimension - 1>::NumberOfFixedParameters;
static constexpr unsigned int NumberOfFixedParameters =
NumberOfGeneralFixedParametersOfStack + NumberOfFixedParametersOfSubTransform + 1;
public:
void
SetSplineOrder(const unsigned newValue)
{
m_SplineOrder = newValue;
if (!Superclass::m_FixedParameters.empty())
{
Superclass::m_FixedParameters.back() = m_SplineOrder;
}
}
protected:
BSplineStackTransform() = default;
~BSplineStackTransform() override = default;
void
SetFixedParameters(const FixedParametersType & fixedParameters) override
{
const auto numberOfFixedParameters = fixedParameters.size();
if (numberOfFixedParameters < NumberOfFixedParameters)
{
itkExceptionMacro("The number of FixedParameters (" << numberOfFixedParameters << ") should be at least "
<< NumberOfFixedParameters);
}
const auto lastFixedParameter = fixedParameters.back();
if (lastFixedParameter >= 1 && lastFixedParameter <= 3 &&
static_cast<double>(static_cast<unsigned>(lastFixedParameter)) == lastFixedParameter)
{
m_SplineOrder = static_cast<unsigned>(fixedParameters.back());
}
else
{
itkExceptionMacro("The last FixedParameters (" << lastFixedParameter << ") should be a valid spline order.");
}
if (Superclass::m_FixedParameters != fixedParameters)
{
Superclass::m_FixedParameters = fixedParameters;
Superclass::CreateSubTransforms(FixedParametersType(
fixedParameters.data_block() + NumberOfGeneralFixedParametersOfStack, NumberOfFixedParametersOfSubTransform));
Superclass::UpdateStackSpacingAndOrigin();
this->Modified();
}
}
private:
void
UpdateFixedParametersInternally(const FixedParametersType & fixedParametersOfSubTransform) override
{
FixedParametersType & fixedParametersOfStack = this->Superclass::m_FixedParameters;
fixedParametersOfStack.set_size(NumberOfGeneralFixedParametersOfStack + NumberOfFixedParametersOfSubTransform + 1);
fixedParametersOfStack.back() = m_SplineOrder;
Superclass::UpdateFixedParametersInternally(fixedParametersOfSubTransform);
}
typename Superclass::SubTransformPointer
CreateSubTransform() const override
{
return AdvancedBSplineDeformableTransformBase<CoordRepType, NDimension - 1>::template Create<
AdvancedBSplineDeformableTransform>(m_SplineOrder);
}
unsigned m_SplineOrder{};
};
} // namespace itk
#endif
elastix::ElastixBase::CoordRepType
double CoordRepType
Definition elxElastixBase.h:173
itk::AdvancedBSplineDeformableTransformBase
Base class for deformable transform using a B-spline representation.
Definition itkAdvancedBSplineDeformableTransformBase.h:43
itk::AdvancedBSplineDeformableTransform
Deformable transform using a B-spline representation.
Definition itkAdvancedBSplineDeformableTransform.h:134
itk::BSplineStackTransform< SpaceDimension >::m_SplineOrder
unsigned m_SplineOrder
Definition itkBSplineStackTransform.h:121
itk::BSplineStackTransform::SetSplineOrder
void SetSplineOrder(const unsigned newValue)
Definition itkBSplineStackTransform.h:55
itk::BSplineStackTransform< SpaceDimension >::Pointer
itk::SmartPointer< BSplineStackTransform > Pointer
Definition itkBSplineStackTransform.h:39
itk::BSplineStackTransform< SpaceDimension >::CoordRepType
elx::ElastixBase::CoordRepType CoordRepType
Definition itkBSplineStackTransform.h:32
itk::BSplineStackTransform::~BSplineStackTransform
~BSplineStackTransform() override=default
itk::BSplineStackTransform::UpdateFixedParametersInternally
void UpdateFixedParametersInternally(const FixedParametersType &fixedParametersOfSubTransform) override
Definition itkBSplineStackTransform.h:105
itk::BSplineStackTransform::SetFixedParameters
void SetFixedParameters(const FixedParametersType &fixedParameters) override
Definition itkBSplineStackTransform.h:73
itk::BSplineStackTransform< SpaceDimension >::NumberOfGeneralFixedParametersOfStack
@ NumberOfGeneralFixedParametersOfStack
itk::BSplineStackTransform::BSplineStackTransform
BSplineStackTransform()=default
itk::BSplineStackTransform::CreateSubTransform
Superclass::SubTransformPointer CreateSubTransform() const override
Definition itkBSplineStackTransform.h:115
itk::BSplineStackTransform< SpaceDimension >::Self
BSplineStackTransform Self
Definition itkBSplineStackTransform.h:37
itk::BSplineStackTransform< SpaceDimension >::NumberOfFixedParametersOfSubTransform
static constexpr unsigned int NumberOfFixedParametersOfSubTransform
Definition itkBSplineStackTransform.h:47
itk::BSplineStackTransform< SpaceDimension >::Superclass
itk::StackTransform< CoordRepType, NDimension, NDimension > Superclass
Definition itkBSplineStackTransform.h:38
itk::BSplineStackTransform::ITK_DISALLOW_COPY_AND_MOVE
ITK_DISALLOW_COPY_AND_MOVE(BSplineStackTransform)
itk::BSplineStackTransform< SpaceDimension >::NumberOfFixedParameters
static constexpr unsigned int NumberOfFixedParameters
Definition itkBSplineStackTransform.h:50
itk::StackTransform
Implements stack of transforms: one for every last dimension index.
Definition itkStackTransform.h:41
itk::StackTransform< CoordRepType, NDimension, NDimension >::UpdateStackSpacingAndOrigin
void UpdateStackSpacingAndOrigin()
Definition itkStackTransform.h:274
itk::StackTransform< CoordRepType, NDimension, NDimension >::CreateSubTransforms
void CreateSubTransforms(const FixedParametersType &fixedParametersOfSubTransform)
Definition itkStackTransform.h:250
itk::StackTransform< CoordRepType, NDimension, NDimension >::NumberOfGeneralFixedParametersOfStack
@ NumberOfGeneralFixedParametersOfStack
Definition itkStackTransform.h:246
itk::StackTransform< CoordRepType, NDimension, NDimension >::UpdateFixedParametersInternally
virtual void UpdateFixedParametersInternally(const FixedParametersType &fixedParametersOfSubTransform)
Definition itkStackTransform.h:285
elxElastixBase.h
itkAdvancedBSplineDeformableTransform.h
itkStackTransform.h
itk
Definition itkAdvancedImageToImageMetric.h:43

Generated on 1768596610 for elastix by 1.15.0 |