go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
itkTransformRigidityPenaltyTerm.h
Go to the documentation of this file.
00001 /*======================================================================
00002 
00003   This file is part of the elastix software.
00004 
00005   Copyright (c) University Medical Center Utrecht. All rights reserved.
00006   See src/CopyrightElastix.txt or http://elastix.isi.uu.nl/legal.php for
00007   details.
00008 
00009      This software is distributed WITHOUT ANY WARRANTY; without even
00010      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00011      PURPOSE. See the above copyright notices for more information.
00012 
00013 ======================================================================*/
00014 
00015 #ifndef __itkTransformRigidityPenaltyTerm_h
00016 #define __itkTransformRigidityPenaltyTerm_h
00017 
00018 #include "itkTransformPenaltyTerm.h"
00019 
00021 #include "itkAdvancedBSplineDeformableTransform.h"
00022 #include "itkAdvancedCombinationTransform.h"
00023 
00025 #include "itkNeighborhood.h"
00026 #include "itkImageRegionIterator.h"
00027 #include "itkNeighborhoodOperatorImageFilter.h"
00028 #include "itkNeighborhoodIterator.h"
00029 
00031 #include "itkGrayscaleDilateImageFilter.h"
00032 #include "itkBinaryBallStructuringElement.h"
00033 #include "itkImageRegionIterator.h"
00034 
00035 
00036 namespace itk
00037 {
00068 template< class TFixedImage, class TScalarType >
00069 class TransformRigidityPenaltyTerm
00070   : public TransformPenaltyTerm< TFixedImage, TScalarType >
00071 {
00072 public:
00073 
00075   typedef TransformRigidityPenaltyTerm    Self;
00076   typedef TransformPenaltyTerm<
00077     TFixedImage, TScalarType >            Superclass;
00078   typedef SmartPointer<Self>              Pointer;
00079   typedef SmartPointer<const Self>        ConstPointer;
00080 
00082   itkNewMacro( Self );
00083 
00085   itkTypeMacro( TransformRigidityPenaltyTerm, TransformPenaltyTerm );
00086 
00088   typedef typename Superclass::CoordinateRepresentationType CoordinateRepresentationType;
00089   typedef typename Superclass::MovingImageType            MovingImageType;
00090   typedef typename Superclass::MovingImagePixelType       MovingImagePixelType;
00091   typedef typename Superclass::MovingImagePointer         MovingImagePointer;
00092   typedef typename Superclass::MovingImageConstPointer    MovingImageConstPointer;
00093   typedef typename Superclass::FixedImageType             FixedImageType;
00094   typedef typename Superclass::FixedImagePointer          FixedImagePointer;
00095   typedef typename Superclass::FixedImageConstPointer     FixedImageConstPointer;
00096   typedef typename Superclass::FixedImageRegionType       FixedImageRegionType;
00097   typedef typename Superclass::TransformType              TransformType;
00098   typedef typename Superclass::TransformPointer           TransformPointer;
00099   typedef typename Superclass::InputPointType             InputPointType;
00100   typedef typename Superclass::OutputPointType            OutputPointType;
00101   typedef typename Superclass::TransformParametersType    TransformParametersType;
00102   typedef typename Superclass::TransformJacobianType      TransformJacobianType;
00103   typedef typename Superclass::InterpolatorType           InterpolatorType;
00104   typedef typename Superclass::InterpolatorPointer        InterpolatorPointer;
00105   typedef typename Superclass::RealType                   RealType;
00106   typedef typename Superclass::GradientPixelType          GradientPixelType;
00107   typedef typename Superclass::GradientImageType          GradientImageType;
00108   typedef typename Superclass::GradientImagePointer       GradientImagePointer;
00109   typedef typename Superclass::GradientImageFilterType    GradientImageFilterType;
00110   typedef typename Superclass::GradientImageFilterPointer GradientImageFilterPointer;
00111   typedef typename Superclass::FixedImageMaskType         FixedImageMaskType;
00112   typedef typename Superclass::FixedImageMaskPointer      FixedImageMaskPointer;
00113   typedef typename Superclass::MovingImageMaskType        MovingImageMaskType;
00114   typedef typename Superclass::MovingImageMaskPointer     MovingImageMaskPointer;
00115   typedef typename Superclass::MeasureType                MeasureType;
00116   typedef typename Superclass::DerivativeType             DerivativeType;
00117   typedef typename Superclass::DerivativeValueType        DerivativeValueType;
00118   typedef typename Superclass::ParametersType             ParametersType;
00119   typedef typename Superclass::FixedImagePixelType        FixedImagePixelType;
00120   typedef typename Superclass::ImageSampleContainerType    ImageSampleContainerType;
00121   typedef typename Superclass::ImageSampleContainerPointer ImageSampleContainerPointer;
00122   typedef typename Superclass::ScalarType                 ScalarType;
00123 
00125   typedef typename Superclass::SpatialJacobianType  SpatialJacobianType;
00126   typedef typename Superclass
00127     ::JacobianOfSpatialJacobianType                 JacobianOfSpatialJacobianType;
00128   typedef typename Superclass::SpatialHessianType   SpatialHessianType;
00129   typedef typename Superclass
00130     ::JacobianOfSpatialHessianType                  JacobianOfSpatialHessianType;
00131   typedef typename Superclass::InternalMatrixType   InternalMatrixType;
00132 
00134   itkStaticConstMacro( FixedImageDimension, unsigned int, FixedImageType::ImageDimension );
00135   itkStaticConstMacro( MovingImageDimension, unsigned int, FixedImageType::ImageDimension );
00136   itkStaticConstMacro( ImageDimension, unsigned int, FixedImageType::ImageDimension );
00137 
00139   virtual void Initialize( void ) throw ( ExceptionObject );
00140 
00142   typedef AdvancedBSplineDeformableTransform< ScalarType,
00143     FixedImageDimension, 3 >                            BSplineTransformType;
00144   typedef typename BSplineTransformType::Pointer        BSplineTransformPointer;
00145   typedef typename BSplineTransformType::SpacingType    GridSpacingType;
00146   typedef typename BSplineTransformType::ImageType      CoefficientImageType;
00147   typedef typename CoefficientImageType::Pointer        CoefficientImagePointer;
00148   typedef typename CoefficientImageType::SpacingType    CoefficientImageSpacingType;
00149   typedef AdvancedCombinationTransform< ScalarType,
00150     FixedImageDimension >                               CombinationTransformType;
00151 
00153   typedef Neighborhood< ScalarType,
00154     itkGetStaticConstMacro( FixedImageDimension ) >     NeighborhoodType;
00155   typedef typename NeighborhoodType::SizeType           NeighborhoodSizeType;
00156   typedef ImageRegionIterator< CoefficientImageType >   CoefficientImageIteratorType;
00157   typedef NeighborhoodOperatorImageFilter<
00158     CoefficientImageType, CoefficientImageType >        NOIFType;
00159   typedef NeighborhoodIterator<CoefficientImageType>    NeighborhoodIteratorType;
00160   typedef typename NeighborhoodIteratorType::RadiusType RadiusType;
00161 
00163   typedef CoefficientImageType                          RigidityImageType;
00164   typedef typename RigidityImageType::Pointer           RigidityImagePointer;
00165   typedef typename RigidityImageType::PixelType         RigidityPixelType;
00166   typedef typename RigidityImageType::RegionType        RigidityImageRegionType;
00167   typedef typename RigidityImageType::IndexType         RigidityImageIndexType;
00168   typedef typename RigidityImageType::PointType         RigidityImagePointType;
00169   typedef ImageRegionIterator< RigidityImageType >      RigidityImageIteratorType;
00170   typedef BinaryBallStructuringElement<
00171     RigidityPixelType,
00172     itkGetStaticConstMacro( FixedImageDimension ) >     StructuringElementType;
00173   typedef typename StructuringElementType::RadiusType   SERadiusType;
00174   typedef GrayscaleDilateImageFilter<
00175     RigidityImageType, RigidityImageType,
00176     StructuringElementType >                            DilateFilterType;
00177   typedef typename DilateFilterType::Pointer            DilateFilterPointer;
00178 
00180   void CheckUseAndCalculationBooleans( void );
00181 
00183   virtual MeasureType GetValue(
00184     const ParametersType & parameters ) const;
00185 
00187   virtual void GetDerivative(
00188     const ParametersType & parameters,
00189     DerivativeType & derivative ) const;
00190 
00192   virtual void GetValueAndDerivative(
00193     const ParametersType & parameters,
00194     MeasureType & value,
00195     DerivativeType & derivative ) const;
00196 
00200   itkSetObjectMacro( BSplineTransform, BSplineTransformType );
00201 
00203   //itkSetObjectMacro( RigidityCoefficientImage, RigidityImageType );
00204 
00206   itkSetClampMacro( LinearityConditionWeight, ScalarType,
00207     0.0, NumericTraits<ScalarType>::max() );
00208   itkGetMacro( LinearityConditionWeight, ScalarType );
00209 
00211   itkSetClampMacro( OrthonormalityConditionWeight, ScalarType,
00212     0.0, NumericTraits<ScalarType>::max() );
00213   itkGetMacro( OrthonormalityConditionWeight, ScalarType );
00214 
00216   itkSetClampMacro( PropernessConditionWeight, ScalarType,
00217     0.0, NumericTraits<ScalarType>::max() );
00218   itkGetMacro( PropernessConditionWeight, ScalarType );
00219 
00221   itkSetMacro( UseLinearityCondition, bool );
00222 
00224   itkSetMacro( UseOrthonormalityCondition, bool );
00225 
00227   itkSetMacro( UsePropernessCondition, bool );
00228 
00232   itkSetMacro( CalculateLinearityCondition, bool );
00233 
00237   itkSetMacro( CalculateOrthonormalityCondition, bool );
00238 
00242   itkSetMacro( CalculatePropernessCondition, bool );
00243 
00245   itkGetConstReferenceMacro( LinearityConditionValue, MeasureType );
00246 
00248   itkGetConstReferenceMacro( OrthonormalityConditionValue, MeasureType );
00249 
00251   itkGetConstReferenceMacro( PropernessConditionValue, MeasureType );
00252 
00254   itkGetConstReferenceMacro( LinearityConditionGradientMagnitude, MeasureType );
00255 
00257   itkGetConstReferenceMacro( OrthonormalityConditionGradientMagnitude, MeasureType );
00258 
00260   itkGetConstReferenceMacro( PropernessConditionGradientMagnitude, MeasureType );
00261 
00263   //itkGetConstReferenceMacro( RigidityPenaltyTermValue, MeasureType );
00264 
00266   itkSetMacro( DilateRigidityImages, bool );
00267 
00269   itkSetClampMacro( DilationRadiusMultiplier, CoordinateRepresentationType,
00270     0.1, NumericTraits<CoordinateRepresentationType>::max() );
00271 
00273   itkSetObjectMacro( FixedRigidityImage, RigidityImageType );
00274 
00276   itkSetObjectMacro( MovingRigidityImage, RigidityImageType );
00277 
00279   itkSetMacro( UseFixedRigidityImage, bool );
00280 
00282   itkSetMacro( UseMovingRigidityImage, bool );
00283 
00285   void FillRigidityCoefficientImage( const ParametersType & parameters ) const;
00286 
00287 protected:
00288 
00290   TransformRigidityPenaltyTerm();
00292   virtual ~TransformRigidityPenaltyTerm() {};
00293 
00295   void PrintSelf( std::ostream& os, Indent indent ) const;
00296 
00297 private:
00298 
00300   TransformRigidityPenaltyTerm( const Self& ); // purposely not implemented
00302   void operator=( const Self& );            // purposely not implemented
00303 
00305   virtual void DilateRigidityImages( void );
00306 
00308   void Create1DOperator( NeighborhoodType & F, const std::string WhichF,
00309     const unsigned int WhichDimension, const CoefficientImageSpacingType & spacing ) const;
00310 
00312   void CreateNDOperator( NeighborhoodType & F, const std::string WhichF,
00313     const CoefficientImageSpacingType & spacing ) const;
00314 
00316   CoefficientImagePointer FilterSeparable( const CoefficientImageType *,
00317     const std::vector< NeighborhoodType > &Operators ) const;
00318 
00320   BSplineTransformPointer m_BSplineTransform;
00321   ScalarType              m_LinearityConditionWeight;
00322   ScalarType              m_OrthonormalityConditionWeight;
00323   ScalarType              m_PropernessConditionWeight;
00324 
00325   mutable MeasureType     m_RigidityPenaltyTermValue;
00326   mutable MeasureType     m_LinearityConditionValue;
00327   mutable MeasureType     m_OrthonormalityConditionValue;
00328   mutable MeasureType     m_PropernessConditionValue;
00329   mutable MeasureType     m_LinearityConditionGradientMagnitude;
00330   mutable MeasureType     m_OrthonormalityConditionGradientMagnitude;
00331   mutable MeasureType     m_PropernessConditionGradientMagnitude;
00332 
00333   bool                    m_UseLinearityCondition;
00334   bool                    m_UseOrthonormalityCondition;
00335   bool                    m_UsePropernessCondition;
00336   bool                    m_CalculateLinearityCondition;
00337   bool                    m_CalculateOrthonormalityCondition;
00338   bool                    m_CalculatePropernessCondition;
00339 
00341   CoordinateRepresentationType    m_DilationRadiusMultiplier;
00342   bool                            m_DilateRigidityImages;
00343   mutable bool                    m_RigidityCoefficientImageIsFilled;
00344   RigidityImagePointer            m_FixedRigidityImage;
00345   RigidityImagePointer            m_MovingRigidityImage;
00346   RigidityImagePointer            m_RigidityCoefficientImage;
00347   std::vector< DilateFilterPointer >  m_FixedRigidityImageDilation;
00348   std::vector< DilateFilterPointer >  m_MovingRigidityImageDilation;
00349   RigidityImagePointer            m_FixedRigidityImageDilated;
00350   RigidityImagePointer            m_MovingRigidityImageDilated;
00351   bool                            m_UseFixedRigidityImage;
00352   bool                            m_UseMovingRigidityImage;
00353 
00354 }; // end class TransformRigidityPenaltyTerm
00355 
00356 
00357 } // end namespace itk
00358 
00359 #ifndef ITK_MANUAL_INSTANTIATION
00360 #include "itkTransformRigidityPenaltyTerm.txx"
00361 #endif
00362 
00363 #endif // #ifndef __itkTransformRigidityPenaltyTerm_h
00364 


Generated on 24-10-2011 for elastix by doxygen 1.7.4 elastix logo