Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkReconstructionImageFilter.h

Go to the documentation of this file.
00001 #ifndef __itkReconstructionImageFilter_h
00002 #define __itkReconstructionImageFilter_h
00003 
00004 #include "itkImageToImageFilter.h"
00005 #include "itkConstShapedNeighborhoodIterator.h"
00006 #include "itkShapedNeighborhoodIterator.h"
00007 #include "itkImageRegionConstIterator.h"
00008 #include "itkImageRegionIterator.h"
00009 #include "itkProgressReporter.h"
00010 #include <queue>
00011 
00012 //#define BASIC
00013 //#define FACES
00014 #define COPY
00015 
00016 #ifdef FACES
00017 #include "itkNeighborhoodAlgorithm.h"
00018 #endif
00019 
00020 #ifdef COPY
00021 #include "itkNeighborhoodAlgorithm.h"
00022 #endif
00023 
00024 namespace itk {
00025 
00043 template<class TInputImage, class TOutputImage, class TCompare>
00044 class ITK_EXPORT ReconstructionImageFilter : 
00045     public ImageToImageFilter<TInputImage, TOutputImage>
00046 {
00047 public:
00049   typedef ReconstructionImageFilter Self;
00050   typedef ImageToImageFilter<TInputImage, TOutputImage>
00051   Superclass;
00052   typedef SmartPointer<Self>        Pointer;
00053   typedef SmartPointer<const Self>  ConstPointer;
00054 
00056   typedef TInputImage InputImageType;
00057   typedef TInputImage MarkerImageType;
00058   typedef TInputImage MaskImageType;
00059   typedef TOutputImage OutputImageType;
00060   typedef typename InputImageType::SizeType        ISizeType;
00061   typedef typename MarkerImageType::Pointer        MarkerImagePointer;
00062   typedef typename MarkerImageType::ConstPointer   MarkerImageConstPointer;
00063   typedef typename MarkerImageType::RegionType     MarkerImageRegionType;
00064   typedef typename MarkerImageType::PixelType      MarkerImagePixelType;
00065   typedef typename InputImageType::PixelType       InputImagePixelType;
00066   typedef typename InputImageType::IndexType       InputImageIndexType;
00067   typedef typename MaskImageType::Pointer          MaskImagePointer;
00068   typedef typename MaskImageType::ConstPointer     MaskImageConstPointer;
00069   typedef typename MaskImageType::RegionType       MaskImageRegionType;
00070   typedef typename MaskImageType::PixelType        MaskImagePixelType;
00071   typedef typename OutputImageType::Pointer        OutputImagePointer;
00072   typedef typename OutputImageType::ConstPointer   OutputImageConstPointer;
00073   typedef typename OutputImageType::RegionType     OutputImageRegionType;
00074   typedef typename OutputImageType::PixelType      OutputImagePixelType;
00075   typedef typename OutputImageType::IndexType      OutputImageIndexType;
00076 
00080   itkStaticConstMacro(MarkerImageDimension, unsigned int,
00081                       TInputImage::ImageDimension);
00082   itkStaticConstMacro(MaskImageDimension, unsigned int,
00083                       TInputImage::ImageDimension);
00084   itkStaticConstMacro(OutputImageDimension, unsigned int,
00085                       TOutputImage::ImageDimension);
00087 
00089   itkNewMacro(Self);  
00090 
00092   itkTypeMacro(ReconstructionImageFilter, 
00093                ImageToImageFilter);
00094 
00100   void SetMarkerImage(const MarkerImageType *);
00101   const MarkerImageType* GetMarkerImage();
00103 
00107   void SetMaskImage(const MaskImageType *);
00108   const MaskImageType* GetMaskImage();
00110 
00111 
00118   itkSetMacro(FullyConnected, bool);
00119   itkGetConstReferenceMacro(FullyConnected, bool);
00120   itkBooleanMacro(FullyConnected);
00122 
00126   itkSetMacro(MarkerValue, typename TInputImage::PixelType);
00127   itkGetConstReferenceMacro(MarkerValue, typename TInputImage::PixelType);
00129 
00130  
00131 protected:
00132   ReconstructionImageFilter();
00133   ~ReconstructionImageFilter() {};
00134   void PrintSelf(std::ostream& os, Indent indent) const;
00135 
00139   void GenerateInputRequestedRegion() ;
00140 
00142   void EnlargeOutputRequestedRegion(DataObject *itkNotUsed(output));
00143 
00144   void GenerateData();
00145   
00146 
00147 private:
00148   ReconstructionImageFilter(const Self&); //purposely not implemented
00149   void operator=(const Self&); //purposely not implemented
00150   typename TInputImage::PixelType m_MarkerValue;
00151   bool                m_FullyConnected;
00152 
00153 #ifdef FACES
00154   TCompare compare;
00155 
00156 
00157   // declare our queue type
00158   typedef typename std::queue<OutputImageIndexType> FifoType;
00159 
00160   typedef typename itk::NeighborhoodAlgorithm::ImageBoundaryFacesCalculator<OutputImageType> FaceCalculatorType;
00161 
00162   typedef typename FaceCalculatorType::FaceListType FaceListType;
00163   typedef typename FaceCalculatorType::FaceListType::iterator FaceListTypeIt;
00164 
00165   void processRegion(ProgressReporter &progress,
00166          const OutputImageRegionType thisRegion,
00167          const ISizeType kernelRadius,
00168          MarkerImageConstPointer markerImage,
00169          MaskImageConstPointer   maskImage,
00170          OutputImagePointer &output,
00171          FifoType &IndexFifo);
00172 
00173   void buildFifo(ProgressReporter &progress,
00174      const OutputImageRegionType thisRegion,
00175      OutputImagePointer &output,
00176      FifoType &IndexFifo);
00177 
00178   void processFifo(ProgressReporter &progress,
00179        const OutputImageRegionType thisRegion,
00180        const ISizeType kernelRadius,
00181        MarkerImageConstPointer markerImage,
00182        MaskImageConstPointer   maskImage,
00183        OutputImagePointer &output,
00184        FifoType &IndexFifo);
00185 
00186   void fillFaces(FaceListType faceList,
00187      OutputImagePointer &output);
00188   
00189   void copyFaces(FaceListType faceList,
00190      MarkerImageConstPointer markerImage,
00191      OutputImagePointer &output);
00192      
00193 #endif
00194 
00195 #ifdef COPY
00196   typedef typename itk::NeighborhoodAlgorithm::ImageBoundaryFacesCalculator<OutputImageType> FaceCalculatorType;
00197 
00198   typedef typename FaceCalculatorType::FaceListType FaceListType;
00199   typedef typename FaceCalculatorType::FaceListType::iterator FaceListTypeIt;
00200 #endif
00201   typedef ImageRegionConstIterator<InputImageType> InputIteratorType;
00202   typedef ImageRegionIterator<OutputImageType> OutputIteratorType;
00203 
00204   typedef typename OutputImageType::IndexType OutIndexType;
00205   typedef typename InputImageType::IndexType InIndexType;
00206   typedef ConstShapedNeighborhoodIterator<InputImageType> CNInputIterator;
00207   typedef ShapedNeighborhoodIterator<OutputImageType> NOutputIterator;
00208 
00209 } ; // end of class
00210 
00211 } // end namespace itk
00212   
00213 #ifndef ITK_MANUAL_INSTANTIATION
00214 #include "itkReconstructionImageFilter.txx"
00215 #endif
00216 
00217 
00218 #endif
00219 

Generated at Sat Sep 2 21:02:22 2006 for ITK by doxygen 1.4.7 written by Dimitri van Heesch, © 1997-2000