Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes

mitk::ImageToOpenCVImageFilter Class Reference

A pseudo-Filter for creating OpenCV images from MITK images with the option of copying data or referencing it. More...

#include <mitkImageToOpenCVImageFilter.h>

Collaboration diagram for mitk::ImageToOpenCVImageFilter:
Collaboration graph
[legend]

List of all members.

Public Types

typedef itk::RGBPixel
< unsigned char > 
UCRGBPixelType
typedef itk::RGBPixel
< unsigned short > 
USRGBPixelType
typedef itk::RGBPixel< float > FloatRGBPixelType
typedef itk::RGBPixel< double > DoubleRGBPixelType
typedef ImageToOpenCVImageFilter Self
typedef itk::Object Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
void SetImage (mitk::Image *_Image)
virtual mitk::ImageGetImage ()
bool CheckImage (mitk::Image *image)
IplImage * GetOpenCVImage ()

Static Public Member Functions

template<typename TPixel , unsigned int VImageDimension>
static mitk::Image::Pointer ConvertIplToMitkImage (const IplImage *input, bool copyBuffer=true)
static Pointer New ()

Protected Member Functions

 ImageToOpenCVImageFilter ()
virtual ~ImageToOpenCVImageFilter ()
template<typename TPixel , unsigned int VImageDimension>
void ItkImageProcessing (itk::Image< TPixel, VImageDimension > *image, int depth)
template<typename TPixel , unsigned int VImageDimension>
void ItkImageProcessing (itk::Image< itk::RGBPixel< TPixel >, VImageDimension > *image, int depth)

Protected Attributes

mitk::WeakPointer< mitk::Imagem_Image
IplImage * m_OpenCVImage

Detailed Description

A pseudo-Filter for creating OpenCV images from MITK images with the option of copying data or referencing it.

Last contributor:

Author:
mueller

Definition at line 40 of file mitkImageToOpenCVImageFilter.h.


Member Typedef Documentation

typedef itk::SmartPointer<const Self> mitk::ImageToOpenCVImageFilter::ConstPointer

Definition at line 51 of file mitkImageToOpenCVImageFilter.h.

typedef itk::RGBPixel< double > mitk::ImageToOpenCVImageFilter::DoubleRGBPixelType

Definition at line 46 of file mitkImageToOpenCVImageFilter.h.

typedef itk::RGBPixel< float > mitk::ImageToOpenCVImageFilter::FloatRGBPixelType

Definition at line 45 of file mitkImageToOpenCVImageFilter.h.

typedef itk::SmartPointer<Self> mitk::ImageToOpenCVImageFilter::Pointer

Definition at line 51 of file mitkImageToOpenCVImageFilter.h.

Definition at line 51 of file mitkImageToOpenCVImageFilter.h.

Definition at line 51 of file mitkImageToOpenCVImageFilter.h.

typedef itk::RGBPixel< unsigned char > mitk::ImageToOpenCVImageFilter::UCRGBPixelType

Definition at line 43 of file mitkImageToOpenCVImageFilter.h.

typedef itk::RGBPixel< unsigned short > mitk::ImageToOpenCVImageFilter::USRGBPixelType

Definition at line 44 of file mitkImageToOpenCVImageFilter.h.


Constructor & Destructor Documentation

mitk::ImageToOpenCVImageFilter::ImageToOpenCVImageFilter (  ) [protected]

Definition at line 24 of file mitkImageToOpenCVImageFilter.cpp.

: m_OpenCVImage(0)
{
}
mitk::ImageToOpenCVImageFilter::~ImageToOpenCVImageFilter (  ) [protected, virtual]

Definition at line 29 of file mitkImageToOpenCVImageFilter.cpp.

{  
  m_OpenCVImage = 0;
}

Member Function Documentation

bool mitk::ImageToOpenCVImageFilter::CheckImage ( mitk::Image image )

Definition at line 34 of file mitkImageToOpenCVImageFilter.cpp.

References mitk::Image::GetDimension(), and MITK_WARN.

{
  if(image == 0)
  {
    MITK_WARN << "MITK Image is 0";
    return false;
  }
  if(image->GetDimension() != 2)
  {
    MITK_WARN << "Only 2D Images allowed";
    return false;
  }
  return true;
}
template<typename TPixel , unsigned int VImageDimension>
static mitk::Image::Pointer mitk::ImageToOpenCVImageFilter::ConvertIplToMitkImage ( const IplImage *  input,
bool  copyBuffer = true 
) [static]
virtual const char* mitk::ImageToOpenCVImageFilter::GetClassName (  ) const [virtual]
virtual mitk::Image* mitk::ImageToOpenCVImageFilter::GetImage (  ) [virtual]
IplImage * mitk::ImageToOpenCVImageFilter::GetOpenCVImage (  )

Get the produced OpenCVImage. ATTENTION: Do not forget to release this image again with cvReleaseImage().

Definition at line 49 of file mitkImageToOpenCVImageFilter.cpp.

References AccessFixedTypeByItk_1, int(), and ItkImageProcessing().

{
  if(!m_OpenCVImage && this->CheckImage( m_Image ) == true )
  {
    // gray image
    if(m_Image->GetPixelType() == typeid(unsigned char))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, unsigned char, 2, IPL_DEPTH_8U );
    }
    else if(m_Image->GetPixelType() == typeid(char))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, char, 2, IPL_DEPTH_8S );
    }
    else if(m_Image->GetPixelType() == typeid(unsigned short))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, unsigned short, 2, IPL_DEPTH_16U );
    }
    else if(m_Image->GetPixelType() == typeid(short))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, short, 2, IPL_DEPTH_16S );
    }
    else if(m_Image->GetPixelType() == typeid(int))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, int, 2, IPL_DEPTH_32S );
    }
    else if(m_Image->GetPixelType() == typeid(float))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, float, 2, IPL_DEPTH_32F );
    }
    else if(m_Image->GetPixelType() == typeid(double))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, double, 2, IPL_DEPTH_64F );
    }

      // rgb image
    else if(m_Image->GetPixelType() == typeid(UCRGBPixelType))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, UCRGBPixelType, 2, IPL_DEPTH_8U  );
    }
    else if(m_Image->GetPixelType() == typeid(USRGBPixelType))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, USRGBPixelType, 2, IPL_DEPTH_16U );
    }
    else if(m_Image->GetPixelType() == typeid(FloatRGBPixelType))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, FloatRGBPixelType, 2, IPL_DEPTH_64F );
    }
    else if(m_Image->GetPixelType() == typeid(DoubleRGBPixelType))
    {
      AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, DoubleRGBPixelType, 2, IPL_DEPTH_64F );
    }

  }
  return m_OpenCVImage;
}
template<typename TPixel , unsigned int VImageDimension>
void mitk::ImageToOpenCVImageFilter::ItkImageProcessing ( itk::Image< itk::RGBPixel< TPixel >, VImageDimension > *  image,
int  depth 
) [protected]

Definition at line 102 of file mitkImageToOpenCVImageFilter.h.

  {
    typedef itk::RGBPixel<TPixel> RGBPixelType;
    typedef itk::Image<RGBPixelType, VImageDimension> RGBImageType;
    typedef itk::ImageRegionIterator<RGBImageType> RGBIteratorType;

    RGBIteratorType it(image, image->GetLargestPossibleRegion());

    typename RGBImageType::SizeType size = image->GetLargestPossibleRegion().GetSize();
    // create new opencv image
    m_OpenCVImage = cvCreateImage( cvSize( size[0], size[1] ), depth, 3 );

    unsigned int x = 0,y = 0;
    CvScalar s;
    for ( it.GoToBegin(); !it.IsAtEnd(); ++it ) 
    {
      s.val[0] = it.Value().GetBlue();
      s.val[1] = it.Value().GetGreen();
      s.val[2] = it.Value().GetRed();
      
      //MITK_DEBUG << "[" << x << "," << y << "] " << s.val[0] << "(B)," << s.val[1] << "(G)," << s.val[2] << "(R)";

      cvSet2D(m_OpenCVImage,y,x,s);

      ++x;
      // next line found
      if( x == size[0] )
      {
        x = 0;
        ++y;
      }
    }

  }
template<typename TPixel , unsigned int VImageDimension>
void mitk::ImageToOpenCVImageFilter::ItkImageProcessing ( itk::Image< TPixel, VImageDimension > *  image,
int  depth 
) [protected]

Definition at line 84 of file mitkImageToOpenCVImageFilter.h.

  {
    typedef itk::Image<TPixel, VImageDimension> ImageType;

    const unsigned int numberOfPixels = m_OpenCVImage->width * m_OpenCVImage->height;
    const unsigned int numberOfBytes = numberOfPixels * sizeof( typename ImageType::PixelType );

    const typename ImageType::PixelType * itkBuffer = image->GetBufferPointer();

    typename ImageType::SizeType size = image->GetLargestPossibleRegion().GetSize();
    // create new opencv image
    m_OpenCVImage = cvCreateImage( cvSize( size[0], size[1] )
      , depth, 1 );

    memcpy( m_OpenCVImage->imageData, itkBuffer, numberOfBytes );
  }
static Pointer mitk::ImageToOpenCVImageFilter::New (  ) [static]
void mitk::ImageToOpenCVImageFilter::SetImage ( mitk::Image _Image )

Definition at line 105 of file mitkImageToOpenCVImageFilter.cpp.

{
  if(m_Image == _Image) return;
  m_Image = _Image;
  m_OpenCVImage = 0;
}

Member Data Documentation

Saves if the filter should copy the data or just reference it

Definition at line 79 of file mitkImageToOpenCVImageFilter.h.

Definition at line 80 of file mitkImageToOpenCVImageFilter.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines