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
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkFFTComplexToComplexImageFilter.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 __itkFFTComplexToComplexImageFilter_h
#define __itkFFTComplexToComplexImageFilter_h
#include <itkImageToImageFilter.h>
#include <itkImage.h>
#include <complex>
namespace itk
{
/** \class FFTComplexToComplexImageFilter
*
* \brief Implements an API to enable the Fourier transform or the inverse
* Fourier transform of images with complex valued voxels to be computed.
*
* \ingroup FourierTransform
*
* \author Simon K. Warfield simon.warfield@childrens.harvard.edu
*
* \note Attribution Notice. This research work was made possible by
* Grant Number R01 RR021885 (PI Simon K. Warfield, Ph.D.) from
* the National Center for Research Resources (NCRR), a component of the
* National Institutes of Health (NIH). Its contents are solely the
* responsibility of the authors and do not necessarily represent the
* official view of NCRR or NIH.
*
* This class was taken from the Insight Journal paper:
* http://insight-journal.org/midas/handle.php?handle=1926/326
*
*/
template < class TPixel, unsigned int NDimension = 3 >
class FFTComplexToComplexImageFilter :
public ImageToImageFilter< Image< std::complex< TPixel > , NDimension >,
Image< std::complex< TPixel > , NDimension > >
{
public:
/** Input and output image types. */
typedef Image< std::complex< TPixel > , NDimension > InputImageType;
typedef Image< std::complex< TPixel > , NDimension > OutputImageType;
/** Standard class typedefs. */
typedef FFTComplexToComplexImageFilter Self;
typedef ImageToImageFilter< InputImageType, OutputImageType > Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
itkStaticConstMacro(ImageDimension, unsigned int,
InputImageType::ImageDimension );
/** Run-time type information (and related methods). */
itkTypeMacro(FFTComplexToComplexImageFilter, ImageToImageFilter);
/** Customized object creation methods that support configuration-based
* selection of FFT implementation.
*
* Default implementation is FFTW.
*/
static Pointer New(void);
/** Transform Direction */
typedef enum
{
DIRECT = 1,
INVERSE
} TransformDirectionType;
/** Image type typedef support. */
typedef InputImageType ImageType;
typedef typename ImageType::SizeType ImageSizeType;
/** Set/Get the direction in which the transform will be applied.
* By selecting DIRECT, this filter will perform a direct Fourier Transform,
* By selecting INVERSE, this filter will perform an inverse Fourier Transform,
*/
itkSetMacro( TransformDirection, TransformDirectionType );
itkGetConstMacro( TransformDirection, TransformDirectionType );
protected:
FFTComplexToComplexImageFilter() {}
virtual ~FFTComplexToComplexImageFilter(){}
/** methods needed for the image filter pipeline */
virtual void GenerateOutputInformation(); // figure out allocation for output image
virtual void GenerateInputRequestedRegion();
virtual bool FullMatrix() = 0; // must be implemented in child
private:
FFTComplexToComplexImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
TransformDirectionType m_TransformDirection;
};
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkFFTComplexToComplexImageFilter.txx"
#endif
#endif
|