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

mitk::CalculateSegmentationVolume Class Reference

#include <mitkCalculateSegmentationVolume.h>

Inheritance diagram for mitk::CalculateSegmentationVolume:
Inheritance graph
[legend]
Collaboration diagram for mitk::CalculateSegmentationVolume:
Collaboration graph
[legend]

List of all members.

Public Types

typedef CalculateSegmentationVolume Self
typedef SegmentationSink Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
virtual ::itk::LightObject::Pointer CreateAnother (void) const

Static Public Member Functions

static Pointer New (void)

Protected Member Functions

 CalculateSegmentationVolume ()
virtual ~CalculateSegmentationVolume ()
virtual bool ReadyToRun ()
virtual bool ThreadedUpdateFunction ()
template<typename TPixel , unsigned int VImageDimension>
void ItkImageProcessing (itk::Image< TPixel, VImageDimension > *itkImage, TPixel *dummy=NULL)

Detailed Description

Definition at line 28 of file mitkCalculateSegmentationVolume.h.


Member Typedef Documentation

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

Reimplemented from mitk::SegmentationSink.

Definition at line 32 of file mitkCalculateSegmentationVolume.h.

Reimplemented from mitk::SegmentationSink.

Definition at line 32 of file mitkCalculateSegmentationVolume.h.

Reimplemented from mitk::SegmentationSink.

Definition at line 32 of file mitkCalculateSegmentationVolume.h.

Reimplemented from mitk::SegmentationSink.

Definition at line 32 of file mitkCalculateSegmentationVolume.h.


Constructor & Destructor Documentation

mitk::CalculateSegmentationVolume::CalculateSegmentationVolume (  ) [protected]

Definition at line 21 of file mitkCalculateSegmentationVolume.cpp.

{
mitk::CalculateSegmentationVolume::~CalculateSegmentationVolume (  ) [protected, virtual]

Definition at line 26 of file mitkCalculateSegmentationVolume.cpp.

{
}

Member Function Documentation

virtual ::itk::LightObject::Pointer mitk::CalculateSegmentationVolume::CreateAnother ( void   ) const [inline, virtual]

Reimplemented from mitk::SegmentationSink.

Definition at line 33 of file mitkCalculateSegmentationVolume.h.

:
    
virtual const char* mitk::CalculateSegmentationVolume::GetClassName (  ) const [virtual]

Reimplemented from mitk::SegmentationSink.

template<typename TPixel , unsigned int VImageDimension>
void mitk::CalculateSegmentationVolume::ItkImageProcessing ( itk::Image< TPixel, VImageDimension > *  itkImage,
TPixel *  dummy = NULL 
) [protected]

Definition at line 32 of file mitkCalculateSegmentationVolume.cpp.

{
}


template < typename TPixel, unsigned int VImageDimension >
void CalculateSegmentationVolume::ItkImageProcessing( itk::Image< TPixel, VImageDimension >* itkImage, TPixel* itkNotUsed(dummy) )
{
  itk::ImageRegionConstIteratorWithIndex<itk::Image<TPixel, VImageDimension> > iterBinaryImage( itkImage, itkImage->GetLargestPossibleRegion() );
  typename itk::ImageRegionConstIteratorWithIndex<itk::Image<TPixel, VImageDimension> >::IndexType currentIndex;
  typename itk::ImageRegionConstIteratorWithIndex<itk::Image<TPixel, VImageDimension> >::IndexType minIndex; 
  for (unsigned int i = 0; i < VImageDimension; ++i) minIndex[i] = std::numeric_limits<long int>::max();

  typename itk::ImageRegionConstIteratorWithIndex<itk::Image<TPixel, VImageDimension> >::IndexType maxIndex; 
  for (unsigned int i = 0; i < VImageDimension; ++i) maxIndex[i] = std::numeric_limits<long int>::min();
 
  m_CenterOfMass.Fill(0.0);
  
  m_Volume = 0;
  while (!iterBinaryImage.IsAtEnd())
  {
    if ( iterBinaryImage.Get() > static_cast<TPixel>(0.0) )
    {
      // update center of mass
      currentIndex = iterBinaryImage.GetIndex();
      itk::Vector<float, VImageDimension> currentPoint;  
      for (unsigned int i = 0; i < VImageDimension; ++i) currentPoint[i] = currentIndex[i];
    
      m_CenterOfMass =    (m_CenterOfMass * ( static_cast<float>(m_Volume) / static_cast<float>(m_Volume+1) ) )  // e.g. 3 points:   old center * 2/3 + currentPoint * 1/3;
             + currentPoint / static_cast<float>(m_Volume+1);
      
      // update number of voxels
      ++m_Volume;

      // update bounding box
      for (unsigned int i = 0; i < VImageDimension; ++i) 
      {
        if (currentIndex[i] < minIndex[i]) minIndex[i] = currentIndex[i];
        if (currentIndex[i] > maxIndex[i]) maxIndex[i] = currentIndex[i];
      }
    }
    
    ++iterBinaryImage;
  }

  m_MinIndexOfBoundingBox[2] = 0.0;
  m_MaxIndexOfBoundingBox[2] = 0.0;
  for (unsigned int i = 0; i < VImageDimension; ++i) 
static Pointer mitk::CalculateSegmentationVolume::New ( void   ) [inline, static]

Reimplemented from mitk::SegmentationSink.

Definition at line 33 of file mitkCalculateSegmentationVolume.h.

:
    
bool mitk::CalculateSegmentationVolume::ReadyToRun (  ) [protected, virtual]

Reimplemented from mitk::SegmentationSink.

Definition at line 81 of file mitkCalculateSegmentationVolume.cpp.

{
bool mitk::CalculateSegmentationVolume::ThreadedUpdateFunction (  ) [protected, virtual]

Reimplemented from mitk::SegmentationSink.

Definition at line 90 of file mitkCalculateSegmentationVolume.cpp.

{
  // get image
  Image::Pointer image;
  GetPointerParameter("Input", image);

  AccessFixedDimensionByItk( image.GetPointer(), ItkImageProcessing, 3 ); // some magic to call the correctly templated function (we only do 3D images here!)

  // consider single voxel volume
  Vector3D spacing = image->GetSlicedGeometry()->GetSpacing(); // spacing in mm
  float volumeML = (ScalarType) m_Volume * spacing[0] * spacing[1] * spacing[2] / 1000.0; // convert to ml
 
  DataNode* groupNode = GetGroupNode();
  if (groupNode)
  {
    groupNode->SetProperty( "volume", FloatProperty::New(volumeML) );
    groupNode->SetProperty( "centerOfMass", Vector3DProperty::New(m_CenterOfMass) );
    groupNode->SetProperty( "boundingBoxMinimum", Vector3DProperty::New(m_MinIndexOfBoundingBox) );
    groupNode->SetProperty( "boundingBoxMaximum", Vector3DProperty::New(m_MaxIndexOfBoundingBox) );

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