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

mitk::VolumeCalculator Class Reference

Calculates the volume of a mitk::Image. The given volume is in milliliters or as a voxel count. Voxels are counted if their gray value is above a threshold (see SetThreshold), the default threshold is 0. More...

#include <mitkVolumeCalculator.h>

List of all members.

Public Member Functions

 mitkClassMacro (VolumeCalculator, itk::Object)
virtual void SetImage (Image *_arg)
virtual void SetThreshold (int _arg)
virtual float GetVolume ()
virtual unsigned long int GetVoxelCount ()
std::vector< float > GetVolumes ()
void ComputeVolume ()
void ComputeVolumeFromImageStatistics ()

Static Public Member Functions

static Pointer New ()
static float ComputeVolume (Vector3D spacing, unsigned int voxelCount)

Protected Member Functions

 VolumeCalculator ()
virtual ~VolumeCalculator ()
template<typename TPixel , unsigned int VImageDimension>
void InternalCompute (itk::Image< TPixel, VImageDimension > *itkImage)

Protected Attributes

Image::ConstPointer m_Image
int m_Threshold
float m_Volume
unsigned long int m_VoxelCount
std::vector< float > m_Volumes
ImageTimeSelector::Pointer m_TimeSelector

Detailed Description

Calculates the volume of a mitk::Image. The given volume is in milliliters or as a voxel count. Voxels are counted if their gray value is above a threshold (see SetThreshold), the default threshold is 0.

The filter works for 2D, 3D and 3D+t. In the 3D+t case a vector of volumes is provided (see GetVolumes()).

Definition at line 38 of file mitkVolumeCalculator.h.


Constructor & Destructor Documentation

mitk::VolumeCalculator::VolumeCalculator (  ) [protected]

Definition at line 46 of file mitkVolumeCalculator.cpp.

References m_TimeSelector, and New().

mitk::VolumeCalculator::~VolumeCalculator (  ) [protected, virtual]

Definition at line 54 of file mitkVolumeCalculator.cpp.

{
}

Member Function Documentation

void mitk::VolumeCalculator::ComputeVolume (  )

Definition at line 63 of file mitkVolumeCalculator.cpp.

References AccessFixedDimensionByItk, and InternalCompute().

Referenced by mitk::ImageMapperGL2D::Paint().

{
  const_cast<Image*>(m_Image.GetPointer())->SetRequestedRegionToLargestPossibleRegion();
  if (m_Image->GetDimension() == 4) 
  {
    m_TimeSelector->SetInput(m_Image);
    m_Volumes.resize(m_Image->GetDimension(3));
    for (unsigned int timeStep = 0; timeStep<m_Image->GetDimension(3); ++timeStep) 
    {
      m_TimeSelector->SetTimeNr(timeStep);
      m_TimeSelector->Update();
      AccessFixedDimensionByItk(m_TimeSelector->GetOutput(),InternalCompute,3);
      m_Volumes[timeStep] = m_Volume;
    }
  }
  else if (m_Image->GetDimension() == 3) 
  {
    const_cast<Image*>(m_Image.GetPointer())->Update();
    AccessFixedDimensionByItk(m_Image,InternalCompute,3);
  } 
  else if (m_Image->GetDimension() == 2) 
  {
    const_cast<Image*>(m_Image.GetPointer())->Update();
    AccessFixedDimensionByItk(m_Image,InternalCompute,2);
  }
}
float mitk::VolumeCalculator::ComputeVolume ( Vector3D  spacing,
unsigned int  voxelCount 
) [static]

Definition at line 117 of file mitkVolumeCalculator.cpp.

{
  return (voxelCount / 1000.0 * spacing[0] * spacing[1] * spacing[2]);
}
void mitk::VolumeCalculator::ComputeVolumeFromImageStatistics (  )

Definition at line 90 of file mitkVolumeCalculator.cpp.

References QuadProgPP::t().

{
  unsigned int dim = m_Image->GetDimension();

  if(dim == 4)
  {
    m_Volumes.resize(m_Image->GetDimension(3),0);
    Vector3D spacing = m_Image->GetSlicedGeometry()->GetSpacing();

    for(unsigned int t = 0; t < m_Image->GetDimension(3); ++t )
    {
      m_Volumes[t] = m_Image->GetCountOfMaxValuedVoxels(t) / 1000.0 * spacing[0] * spacing[1] * spacing[2];
    }
  }
  else if(dim == 3)
  {
    Vector3D spacing = m_Image->GetSlicedGeometry()->GetSpacing();
    m_Volume = m_Image->GetCountOfMaxValuedVoxels() / 1000.0 * spacing[0] * spacing[1] * spacing[2];
  }
  else if (dim == 2) 
  {
    Vector3D spacing = m_Image->GetGeometry()->GetSpacing();
    m_Volume = m_Image->GetCountOfMaxValuedVoxels() / 100.0 * spacing[0] * spacing[1];
  }
  else itkExceptionMacro(<<"Wrong image dimension...");
}
virtual float mitk::VolumeCalculator::GetVolume (  ) [virtual]
std::vector< float > mitk::VolumeCalculator::GetVolumes (  )

Definition at line 58 of file mitkVolumeCalculator.cpp.

{
  return m_Volumes;
}
virtual unsigned long int mitk::VolumeCalculator::GetVoxelCount (  ) [virtual]
template<typename TPixel , unsigned int VImageDimension>
void mitk::VolumeCalculator::InternalCompute ( itk::Image< TPixel, VImageDimension > *  itkImage ) [protected]

Definition at line 23 of file mitkVolumeCalculator.cpp.

References m_Threshold, m_Volume, and m_VoxelCount.

{
  itk::ImageRegionConstIterator<itk::Image < TPixel, VImageDimension > > imageIt(itkImage, itkImage->GetLargestPossibleRegion() );
  unsigned long int count = 0;

  for (imageIt.GoToBegin(); !imageIt.IsAtEnd(); ++imageIt)
  {
    if ( (int)(imageIt.Get()) >= m_Threshold )
    {
      count++;
    }
  }
  if (itkImage->GetLargestPossibleRegion().GetImageDimension() == 3) 
  {
    m_Volume = count / 1000.0 * itkImage->GetSpacing()[0] * itkImage->GetSpacing()[1] * itkImage->GetSpacing()[2];
  } 
  else if (itkImage->GetLargestPossibleRegion().GetImageDimension() == 2) 
  {
    m_Volume = count / 100.0 * itkImage->GetSpacing()[0] * itkImage->GetSpacing()[1];
  }
  m_VoxelCount = count;
}
mitk::VolumeCalculator::mitkClassMacro ( VolumeCalculator  ,
itk::Object   
)
static Pointer mitk::VolumeCalculator::New (  ) [static]
virtual void mitk::VolumeCalculator::SetImage ( Image _arg ) [virtual]
virtual void mitk::VolumeCalculator::SetThreshold ( int  _arg ) [virtual]

Member Data Documentation

Definition at line 63 of file mitkVolumeCalculator.h.

Definition at line 64 of file mitkVolumeCalculator.h.

Referenced by InternalCompute().

ImageTimeSelector::Pointer mitk::VolumeCalculator::m_TimeSelector [protected]

Definition at line 68 of file mitkVolumeCalculator.h.

Referenced by VolumeCalculator().

Definition at line 65 of file mitkVolumeCalculator.h.

Referenced by InternalCompute().

std::vector<float> mitk::VolumeCalculator::m_Volumes [protected]

Definition at line 67 of file mitkVolumeCalculator.h.

unsigned long int mitk::VolumeCalculator::m_VoxelCount [protected]

Definition at line 66 of file mitkVolumeCalculator.h.

Referenced by InternalCompute().


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