IGSTK
/build/buildd/igstk-4.4.0/Source/igstkVideoFrameSpatialObject.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Image Guided Surgery Software Toolkit
00004   Module:    $RCSfile: igstkVideoFrameSpatialObject.h,v $
00005   Language:  C++
00006   Date:      $Date: 2009-06-18 18:40:55 $
00007   Version:   $Revision: 1.1 $
00008 
00009   Copyright (c) ISC  Insight Software Consortium.  All rights reserved.
00010   See IGSTKCopyright.txt or http://www.igstk.org/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 #ifndef __igstkVideoFrameSpatialObject_h
00018 #define __igstkVideoFrameSpatialObject_h
00019 
00020 #include "igstkMacros.h"
00021 #include "igstkSpatialObject.h"
00022 #include "igstkFrame.h"
00023 #include "igstkTimeStamp.h"
00024 #include "igstkVideoImagerTool.h"
00025 
00026 #include "itkVTKImageExport.h"
00027 #include "itkImage.h"
00028 #include "itkSize.h"
00029 #include "itkImageRegion.h"
00030 #include "itkIndex.h"
00031 #include "itkImportImageFilter.h"
00032 #include "itkRGBPixel.h"
00033 
00034 #include "vtkImageData.h"
00035 #include "vtkImageImport.h"
00036 
00037 #define DIMENSION 2
00038 
00039 namespace igstk
00040 {
00041 
00042 template < class TPixelType, unsigned int TChannels >
00043 class VideoFrameSpatialObject
00044 : public SpatialObject
00045 {
00046 
00047 public:
00049   igstkStandardTemplatedClassTraitsMacro( VideoFrameSpatialObject,
00050                                           SpatialObject )
00051 
00052   typedef itk::SpatialObject<3>          VideoFrameSpatialObjectType;
00053 
00054   typedef typename itk::RGBPixel< TPixelType >      RGBPixelType;
00055   typedef typename itk::ImportImageFilter< RGBPixelType, DIMENSION >
00056                                                             RGBImportFilterType;
00057   typedef typename itk::Image< RGBPixelType , DIMENSION >   RGBImageType;
00058 
00059   typedef TPixelType              PixelType;
00060   typedef typename itk::ImportImageFilter< PixelType, DIMENSION >
00061                                                                ImportFilterType;
00062   typedef typename itk::Image< PixelType , DIMENSION >         ImageType;
00063 
00064   typedef Frame                                FrameType;
00065   typedef typename TimeStamp::TimePeriodType   TimePeriodType;
00066 
00067   itkStaticConstMacro( m_NumberOfChannels, unsigned int, TChannels  );
00068 
00069   void Initialize();
00070 
00071   igstkLoadedTemplatedConstObjectEventMacro( ITKImageModifiedEvent,
00072                                                          IGSTKEvent, ImageType);
00073 
00074   igstkLoadedTemplatedConstObjectEventMacro( ITKRGBImageModifiedEvent,
00075                                                       IGSTKEvent, RGBImageType);
00076 
00078   virtual bool IsEmpty() const;
00079 
00080   vtkImageData* GetImageData();
00081   TimeStamp::TimePeriodType GetFrameExpirationTime() const;
00082   TimeStamp::TimePeriodType GetFrameStartTime() const;
00083 
00084   igstkSetMacro(Width, unsigned int);
00085   igstkGetMacro(Width, unsigned int);
00086 
00087   igstkSetMacro(Height, unsigned int);
00088   igstkGetMacro(Height, unsigned int);
00089 
00090   igstkSetMacro(NumberOfScalarComponents, unsigned int);
00091   igstkGetMacro(NumberOfScalarComponents, unsigned int);
00092 
00093   //igstkGetMacro(NumberOfChannels, unsigned int);
00094   const unsigned int GetNumberOfChannels() const;
00095 
00096   igstkSetMacro(PixelSizeX, double);
00097   igstkGetMacro(PixelSizeX, double);
00098 
00099   igstkSetMacro(PixelSizeY, double);
00100   igstkGetMacro(PixelSizeY, double);
00101 
00102   void RequestGetITKImage();
00103   void RequestGetVTKImage()const;
00104   void SetVideoImagerTool(igstk::VideoImagerTool::Pointer);
00105 
00106 
00107   void UpdateImages();
00108   TPixelType* GetImagePtr();
00109 
00110 protected:
00111   VideoFrameSpatialObject( void );
00112   ~VideoFrameSpatialObject( void );
00113 
00114 private:
00115 
00116   typename RGBImageType::Pointer        m_RGBImage;
00117   typename RGBImportFilterType::Pointer m_RGBImportFilter;
00118 
00119   typename ImageType::Pointer         m_Image;
00120   typename ImportFilterType::Pointer  m_ImportFilter;
00121 
00122   itk::Size<DIMENSION>              m_Size;
00123   itk::ImageRegion<DIMENSION>       m_Region;
00124   itk::Index<DIMENSION>             m_Start;
00125 
00126   vtkImageData*       m_VTKImage;
00127   TPixelType *        m_RawBuffer;
00128 
00129   VTKImageModifiedEvent  m_VtkImageLoadedEvent;
00130 
00131   igstk::VideoImagerTool::Pointer m_VideoImagerTool;
00133   FrameType                       m_Frame;
00134 
00135   unsigned int              m_Width;
00136   unsigned int              m_Height;
00137   double                    m_PixelSizeX;
00138   double                    m_PixelSizeY;
00139   RGBPixelType*             m_RGBPixelContainer;
00140 
00141   unsigned int              m_NumberOfScalarComponents;
00142 
00144   typedef itk::VTKImageExport< RGBImageType >      ITKRGBExportFilterType;
00145   typedef typename ITKRGBExportFilterType::Pointer ITKRGBExportFilterPointer;
00146 
00147   typedef itk::VTKImageExport< ImageType >      ITKExportFilterType;
00148   typedef typename ITKExportFilterType::Pointer ITKExportFilterPointer;
00149 
00150   typedef vtkImageImport             VTKImportFilterType;
00151   typedef VTKImportFilterType*       VTKImportFilterPointer;
00152 
00154   ITKRGBExportFilterPointer          m_ItkRGBExporter;
00155   ITKExportFilterPointer             m_ItkExporter;
00156 
00157   VTKImportFilterPointer             m_VtkRGBImporter;
00158   VTKImportFilterPointer             m_VtkImporter;
00159 };
00160 
00161 } // end namespace igstk
00162 
00163 #ifndef IGSTK_MANUAL_INSTANTIATION
00164 #include "igstkVideoFrameSpatialObject.txx"
00165 #endif
00166 
00167 #endif // __igstkVideoFrameSpatialObject_h