/*========================================================================= * * Copyright Insight Software Consortium * * 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 __itkCustomVersorTransformInitializer_h #define __itkCustomVersorTransformInitializer_h #include "itkCustomTransformInitializer.h" #include "itkVersorRigid3DTransform.h" namespace itk { /** \class CustomVersorTransformInitializer * \brief CustomVersorTransformInitializer is a helper class intended to * initialize the center of rotation, versor, and translation of the * VersorRigid3DTransform. * * This class derived from the CustomTransformInitializer and uses it in * a more constrained context. It always uses the Moments mode, and also * takes advantage of the second order moments in order to initialize the * Versor representing rotation. * * \ingroup ITKRegistrationCommon * \ingroup ITKTransform */ template< class TPointSet, class TMovingImage > class ITK_EXPORT CustomVersorTransformInitializer: public CustomTransformInitializer< VersorRigid3DTransform< double >, TPointSet, TMovingImage > { public: /** Standard class typedefs. */ typedef CustomVersorTransformInitializer Self; typedef CustomTransformInitializer< VersorRigid3DTransform< double >, TPointSet, TMovingImage > Superclass; typedef SmartPointer< Self > Pointer; typedef SmartPointer< const Self > ConstPointer; /** New macro for creation of through a Smart Pointer. */ itkNewMacro(Self); /** Run-time type information (and related methods). */ itkTypeMacro(CustomVersorTransformInitializer, Object); /** Type of the transform to initialize */ typedef typename Superclass::TransformType TransformType; typedef typename Superclass::TransformPointer TransformPointer; /** Dimension of parameters. */ itkStaticConstMacro(InputSpaceDimension, unsigned int, Superclass::InputSpaceDimension); itkStaticConstMacro(OutputSpaceDimension, unsigned int, Superclass::OutputSpaceDimension); /** Image Types to use in the initialization of the transform */ typedef typename Superclass::PointSetType PointSetType; typedef typename Superclass::MovingImageType MovingImageType; typedef typename Superclass::PointSetPointer PointSetPointer; typedef typename Superclass::MovingImagePointer MovingImagePointer; /** Offset type. */ typedef typename Superclass::OffsetType OffsetType; /** Point type. */ typedef typename Superclass::InputPointType InputPointType; /** Vector type. */ typedef typename Superclass::OutputVectorType OutputVectorType; /** Initialize the transform using data from the images */ void InitializeTransform(); protected: CustomVersorTransformInitializer(); ~CustomVersorTransformInitializer(){} void PrintSelf(std::ostream & os, Indent indent) const; private: CustomVersorTransformInitializer(const Self &); //purposely not implemented void operator=(const Self &); //purposely not implemented }; //class CustomVersorTransformInitializer } // namespace itk /* // Define instantiation macro for this template. #define ITK_TEMPLATE_CustomVersorTransformInitializer(_, EXPORT, TypeX, TypeY) \ namespace itk \ { \ _( 2 ( class EXPORT CustomVersorTransformInitializer< ITK_TEMPLATE_2 TypeX > ) ) \ namespace Templates \ { \ typedef CustomVersorTransformInitializer< ITK_TEMPLATE_2 TypeX > \ CustomVersorTransformInitializer##TypeY; \ } \ } #if ITK_TEMPLATE_EXPLICIT #include "Templates/itkCustomVersorTransformInitializer+-.h" #endif #if ITK_TEMPLATE_TXX #include "itkCustomVersorTransformInitializer.hxx" #endif */ #endif /* __itkCustomVersorTransformInitializer_h */