go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
itkTransformToDeterminantOfSpatialJacobianSource.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Insight Segmentation & Registration Toolkit
00004   Module:    $RCSfile: itkTransformToDeterminantOfSpatialJacobianSource.h,v $
00005   Language:  C++
00006   Date:      $Date: 2008-08-01 13:42:00 $
00007   Version:   $Revision: 1.3 $
00008 
00009   Copyright (c) Insight Software Consortium. All rights reserved.
00010   See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00014      PURPOSE.  See the above copyright notices for more information.
00015 
00016 =========================================================================*/
00017 /*======================================================================
00018 
00019 This file is part of the elastix software.
00020 
00021 Copyright (c) University Medical Center Utrecht. All rights reserved.
00022 See src/CopyrightElastix.txt or http://elastix.isi.uu.nl/legal.php for
00023 details.
00024 
00025 This software is distributed WITHOUT ANY WARRANTY; without even
00026 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00027 PURPOSE. See the above copyright notices for more information.
00028 
00029 ======================================================================*/
00030 
00031 #ifndef __itkTransformToDeterminantOfSpatialJacobianSource_h
00032 #define __itkTransformToDeterminantOfSpatialJacobianSource_h
00033 
00034 #include "itkAdvancedTransform.h"
00035 #include "itkImageSource.h"
00036 
00037 namespace itk
00038 {
00039 
00070 template <class TOutputImage,
00071 class TTransformPrecisionType=double>
00072 class ITK_EXPORT TransformToDeterminantOfSpatialJacobianSource:
00073     public ImageSource<TOutputImage>
00074 {
00075 public:
00077   typedef TransformToDeterminantOfSpatialJacobianSource        Self;
00078   typedef ImageSource<TOutputImage>               Superclass;
00079   typedef SmartPointer<Self>                      Pointer;
00080   typedef SmartPointer<const Self>                ConstPointer;
00081 
00082   typedef TOutputImage                            OutputImageType;
00083   typedef typename OutputImageType::Pointer       OutputImagePointer;
00084   typedef typename OutputImageType::ConstPointer  OutputImageConstPointer;
00085   typedef typename OutputImageType::RegionType    OutputImageRegionType;
00086 
00088   itkNewMacro( Self );
00089 
00091   itkTypeMacro( TransformToDeterminantOfSpatialJacobianSource, ImageSource );
00092 
00094   itkStaticConstMacro( ImageDimension, unsigned int,
00095     TOutputImage::ImageDimension );
00096 
00098   typedef AdvancedTransform<TTransformPrecisionType,
00099     itkGetStaticConstMacro( ImageDimension ),
00100     itkGetStaticConstMacro( ImageDimension )>     TransformType;
00101   typedef typename TransformType::ConstPointer    TransformPointerType;
00102   typedef typename TransformType::SpatialJacobianType SpatialJacobianType;
00103 
00105   typedef typename OutputImageType::PixelType     PixelType;
00106   //typedef typename PixelType::ValueType           PixelValueType;
00107   typedef typename OutputImageType::RegionType    RegionType;
00108   typedef typename RegionType::SizeType           SizeType;
00109   typedef typename OutputImageType::IndexType     IndexType;
00110   typedef typename OutputImageType::PointType     PointType;
00111   typedef typename OutputImageType::SpacingType   SpacingType;
00112   typedef typename OutputImageType::PointType     OriginType;
00113   typedef typename OutputImageType::DirectionType DirectionType;
00114 
00116   typedef ImageBase< itkGetStaticConstMacro( ImageDimension ) > ImageBaseType;
00117 
00125   itkSetConstObjectMacro( Transform, TransformType );
00126 
00128   itkGetConstObjectMacro( Transform, TransformType );
00129 
00131   virtual void SetOutputSize( const SizeType & size );
00132 
00134   virtual const SizeType & GetOutputSize();
00135 
00138   virtual void SetOutputIndex( const IndexType & index );
00139 
00141   virtual const IndexType & GetOutputIndex();
00142 
00144   itkSetMacro( OutputRegion, OutputImageRegionType );
00145 
00147   itkGetConstReferenceMacro( OutputRegion, OutputImageRegionType );
00148 
00150   itkSetMacro( OutputSpacing, SpacingType );
00151   virtual void SetOutputSpacing( const double* values );
00152 
00154   itkGetConstReferenceMacro( OutputSpacing, SpacingType );
00155 
00157   itkSetMacro( OutputOrigin, OriginType );
00158   virtual void SetOutputOrigin( const double* values);
00159 
00161   itkGetConstReferenceMacro( OutputOrigin, OriginType );
00162 
00164   itkSetMacro( OutputDirection, DirectionType );
00165   itkGetConstReferenceMacro( OutputDirection, DirectionType );
00166 
00168   void SetOutputParametersFromImage( const ImageBaseType * image );
00169 
00171   virtual void GenerateOutputInformation( void );
00172 
00175   virtual void BeforeThreadedGenerateData( void );
00176 
00178   unsigned long GetMTime( void ) const;
00179 
00180 protected:
00181   TransformToDeterminantOfSpatialJacobianSource();
00182   ~TransformToDeterminantOfSpatialJacobianSource() {};
00183 
00184   void PrintSelf( std::ostream& os, Indent indent ) const;
00185 
00189   void ThreadedGenerateData(
00190     const OutputImageRegionType & outputRegionForThread,
00191     int threadId );
00192 
00196   void NonlinearThreadedGenerateData(
00197     const OutputImageRegionType& outputRegionForThread,
00198     int threadId );
00199 
00202   void LinearGenerateData( void );
00203 
00204 private:
00205 
00206   TransformToDeterminantOfSpatialJacobianSource( const Self& ); //purposely not implemented
00207   void operator=( const Self& ); //purposely not implemented
00208 
00210   RegionType              m_OutputRegion;      // region of the output image
00211   TransformPointerType    m_Transform;         // Coordinate transform to use
00212   SpacingType             m_OutputSpacing;     // output image spacing
00213   OriginType              m_OutputOrigin;      // output image origin
00214   DirectionType           m_OutputDirection;   // output image direction cosines
00215 
00216 }; // end class TransformToDeterminantOfSpatialJacobianSource
00217 
00218 } // end namespace itk
00219 
00220 #ifndef ITK_MANUAL_INSTANTIATION
00221 #include "itkTransformToDeterminantOfSpatialJacobianSource.txx"
00222 #endif
00223 
00224 #endif // end #ifndef __itkTransformToDeterminantOfSpatialJacobianSource_h


Generated on 11-05-2012 for elastix by doxygen 1.7.6.1 elastix logo