Static Public Member Functions

CompareImageSliceTestHelper Class Reference

#include <mitkCompareImageSliceTestHelper.h>

Collaboration diagram for CompareImageSliceTestHelper:
Collaboration graph
[legend]

List of all members.

Static Public Member Functions

template<typename TPixel1 , unsigned int VImageDimension1, typename TPixel2 , unsigned int VImageDimension2>
static void ItkImageCompare (itk::Image< TPixel1, VImageDimension1 > *inputImage, itk::Image< TPixel2, VImageDimension2 > *outputImage)
template<typename TPixel , unsigned int VImageDimension>
static void ItkImageSwitch (itk::Image< TPixel, VImageDimension > *itkImage)
static bool CompareSlice (mitk::Image *image, unsigned int sliceDimension, unsigned int sliceIndex, mitk::Image *slice)

Detailed Description

Definition at line 52 of file mitkCompareImageSliceTestHelper.h.


Member Function Documentation

static bool CompareImageSliceTestHelper::CompareSlice ( mitk::Image image,
unsigned int  sliceDimension,
unsigned int  sliceIndex,
mitk::Image slice 
) [inline, static]

Definition at line 118 of file mitkCompareImageSliceTestHelper.h.

References AccessFixedDimensionByItk, mitk::Image::GetDimension(), and ItkImageSwitch().

Referenced by mitkSegmentationInterpolationTestClass::CompareInterpolationsToDefinedReference(), mitkOverwriteSliceImageFilterTestClass::Test3D(), mitkExtractImageFilterTestClass::Test3D(), and mitkExtractImageFilterTestClass::Test4D().

{
  if ( !image || ! slice ) return false;

  switch (sliceDimension)
  {
    default:
    case 2:
      m_Dimension0 = 0;
      m_Dimension1 = 1;
      break;
    case 1:
      m_Dimension0 = 0;
      m_Dimension1 = 2;
      break;
    case 0:
      m_Dimension0 = 1;
      m_Dimension1 = 2;
      break;
  }

  if ( slice->GetDimension() != 2 || image->GetDimension() != 3 ||
       slice->GetDimension(0) != image->GetDimension(m_Dimension0) ||
       slice->GetDimension(1) != image->GetDimension(m_Dimension1) )
  {
   std::cerr << "Slice and image dimensions differ. Sorry, cannot work like this." << std::endl;
   return false;
  }

  // this will do a long long if/else to find out both pixel typesA
  m_SliceImage = slice;
  m_SliceIndex = sliceIndex;
  m_SliceDimension = sliceDimension;
  m_ComparisonResult = false;
  AccessFixedDimensionByItk( image, ItkImageSwitch, 3 );

  return m_ComparisonResult;
}
template<typename TPixel1 , unsigned int VImageDimension1, typename TPixel2 , unsigned int VImageDimension2>
static void CompareImageSliceTestHelper::ItkImageCompare ( itk::Image< TPixel1, VImageDimension1 > *  inputImage,
itk::Image< TPixel2, VImageDimension2 > *  outputImage 
) [inline, static]

Definition at line 67 of file mitkCompareImageSliceTestHelper.h.

Referenced by ItkImageSwitch().

{
m_ComparisonResult = false;
  
  typedef itk::Image<TPixel1, VImageDimension1> SliceImageType;
  typedef itk::Image<TPixel2, VImageDimension2> VolumeImageType;

  typedef itk::ImageSliceConstIteratorWithIndex< VolumeImageType > OutputSliceIteratorType;
  typedef itk::ImageRegionConstIterator< SliceImageType >     InputSliceIteratorType;

  typename VolumeImageType::RegionType            sliceInVolumeRegion;

  sliceInVolumeRegion = outputImage->GetLargestPossibleRegion();
  sliceInVolumeRegion.SetSize( m_SliceDimension, 1 );             // just one slice
  sliceInVolumeRegion.SetIndex( m_SliceDimension, m_SliceIndex ); // exactly this slice, please
  
  OutputSliceIteratorType outputIterator( outputImage, sliceInVolumeRegion );
  outputIterator.SetFirstDirection(m_Dimension0);
  outputIterator.SetSecondDirection(m_Dimension1);

  InputSliceIteratorType inputIterator( inputImage, inputImage->GetLargestPossibleRegion() );

  // iterate over output slice (and over input slice simultaneously)
  outputIterator.GoToBegin();
  inputIterator.GoToBegin();
  while ( !outputIterator.IsAtEnd() )
  {
    while ( !outputIterator.IsAtEndOfSlice() )
    {
      while ( !outputIterator.IsAtEndOfLine() )
      {
        m_ComparisonResult = outputIterator.Get() == (TPixel2) inputIterator.Get();
        if (!m_ComparisonResult) return; // return on first mismatch
        ++outputIterator; 
        ++inputIterator; 
      }
      outputIterator.NextLine();
    }
    outputIterator.NextSlice();
  }
}
template<typename TPixel , unsigned int VImageDimension>
static void CompareImageSliceTestHelper::ItkImageSwitch ( itk::Image< TPixel, VImageDimension > *  itkImage ) [inline, static]

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