1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkBSplineDeformableTransformInitializer.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkBSplineDeformableTransformInitializer_h
#define __itkBSplineDeformableTransformInitializer_h
#include "itkObject.h"
#include "itkObjectFactory.h"
#include <iostream>
namespace itk
{
/** \class BSplineDeformableTransformInitializer
* \brief BSplineDeformableTransformInitializer is a helper class intended to
* initialize the grid parameters of a BSplineDeformableTransform based on the
* parameters of an image.
*
* In the context of image registration, the image to be used are reference will
* be the fixed image. The BSpline grid will use the fixed image as a base for
* computing the grid spacing, orientation and origin, among other things.
*
* This code was contributed in the Insight Journal paper:
*
* "Helper class for initializing the grid parameters of
* a BSpline deformable transform by using an image as reference"
*
* http://www.insight-journal.org/browse/publication/216
* http://hdl.handle.net/1926/1338
*
*
* \ingroup Transforms
*/
template < class TTransform, class TImage >
class ITK_EXPORT BSplineDeformableTransformInitializer : public Object
{
public:
/** Standard class typedefs. */
typedef BSplineDeformableTransformInitializer Self;
typedef Object 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( BSplineDeformableTransformInitializer, Object );
/** Type of the transform to initialize */
typedef TTransform TransformType;
/** Types defined from transform traits */
typedef typename TransformType::Pointer TransformPointer;
typedef typename TransformType::RegionType TransformRegionType;
typedef typename TransformRegionType::SizeType TransformSizeType;
/** Dimension of parameters. */
itkStaticConstMacro(SpaceDimension, unsigned int,
TransformType::InputSpaceDimension);
/** Image Types to use in the initialization of the transform */
typedef TImage ImageType;
typedef typename ImageType::ConstPointer ImagePointer;
/** Set the transform to be initialized */
itkSetObjectMacro( Transform, TransformType );
/** Set the fixed image used in the registration process */
itkSetConstObjectMacro( Image, ImageType );
/** Set the number of grid nodes that we want to place inside the image. This
* method will override the settings of any previous call to
* SetNumberOfGridNodesInsideTheImage(). */
itkSetMacro( GridSizeInsideTheImage, TransformSizeType );
/** Set the number of grid nodes that we want to place inside the image. This
* number of node is used along one dimension of the image. Therefore, if
* you pass the number 5 as argument of this method, in a 3D space, then the
* total number of grid nodes inside the image will be \$ 5 x 5 x 5 \$ .
* This method will override the settings of any previous call to
* SetGridSizeInsideTheImage(). */
void SetNumberOfGridNodesInsideTheImage( unsigned int numberOfNodes )
{
this->m_GridSizeInsideTheImage.Fill( numberOfNodes );
this->Modified();
}
/** Initialize the transform using data from the images */
virtual void InitializeTransform() const;
protected:
BSplineDeformableTransformInitializer();
~BSplineDeformableTransformInitializer(){};
void PrintSelf(std::ostream &os, Indent indent) const;
private:
BSplineDeformableTransformInitializer(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
TransformPointer m_Transform;
ImagePointer m_Image;
TransformSizeType m_GridSizeInsideTheImage;
unsigned int m_NumberOfGridNodesInsideTheImage;
}; //class BSplineDeformableTransformInitializer
} // namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkBSplineDeformableTransformInitializer.txx"
#endif
#endif /* __itkBSplineDeformableTransformInitializer_h */
|