Static Public Member Functions

mitkOverwriteSliceImageFilterTestClass Class Reference

List of all members.

Static Public Member Functions

static void Test3D (mitk::OverwriteSliceImageFilter *filter, mitk::Image *image, unsigned int &numberFailed)
static void Test2D (mitk::OverwriteSliceImageFilter *filter, mitk::Image *image, unsigned int &numberFailed)
static void TestOtherD (mitk::OverwriteSliceImageFilter *filter, mitk::Image *image, unsigned int &numberFailed)

Detailed Description

Definition at line 24 of file mitkOverwriteSliceImageFilterTest.cpp.


Member Function Documentation

static void mitkOverwriteSliceImageFilterTestClass::Test2D ( mitk::OverwriteSliceImageFilter filter,
mitk::Image image,
unsigned int &  numberFailed 
) [inline, static]

Definition at line 227 of file mitkOverwriteSliceImageFilterTest.cpp.

References mitk::Image::GetDimension(), mitk::ImageToImageFilter::SetInput(), and mitk::OverwriteSliceImageFilter::SetSliceImage().

Referenced by mitkOverwriteSliceImageFilterTest().

{
  assert(filter);
  assert(image);

  filter->SetInput( image );
  filter->SetSliceImage( image );
  bool exception = false;
  try
  {
    filter->Update();
  }
  catch(...)
  {
    exception = true;
  }

  if (!exception)
  {
    std::cerr << "  (EE) Using OverwriteImageFilter for 2D -> 2D did not throw an exception "
              << "(l. " << __LINE__ << ")" << std::endl;
  }

  unsigned int initialNumberFailed = numberFailed;
  if ( numberFailed == initialNumberFailed )
  {
    std::cout << "  (II) Overwriting works nicely (gives result, pixels are good) "
              << image->GetDimension() 
              << "-dimensional image." << "(l. " << __LINE__ << ")" << std::endl;
  }
}
static void mitkOverwriteSliceImageFilterTestClass::Test3D ( mitk::OverwriteSliceImageFilter filter,
mitk::Image image,
unsigned int &  numberFailed 
) [inline, static]

Definition at line 29 of file mitkOverwriteSliceImageFilterTest.cpp.

References CompareImageSliceTestHelper::CompareSlice(), mitk::Image::GetDimension(), mitk::ImageSource::GetOutput(), mitk::Image::New(), mitk::ExtractImageFilter::New(), mitk::ImageToImageFilter::SetInput(), mitk::OverwriteSliceImageFilter::SetSliceDimension(), mitk::OverwriteSliceImageFilter::SetSliceImage(), and mitk::OverwriteSliceImageFilter::SetSliceIndex().

Referenced by mitkOverwriteSliceImageFilterTest().

{
  assert(filter);
  assert(image);

  filter->SetInput( image );
  
  unsigned int initialNumberFailed = numberFailed;
  bool exception = false;
  // first extract slices and rewrite them
  for ( unsigned int sliceDimension = 0; sliceDimension < 6; ++sliceDimension )
  {
    mitk::ExtractImageFilter::Pointer extractor = mitk::ExtractImageFilter::New();
    extractor->SetInput( image );
    extractor->SetSliceDimension( sliceDimension );
    extractor->SetSliceIndex( 2 ); // third slice in that direction

    try 
    {
      extractor->Update();
    }
    catch(...)
    {
      if ( sliceDimension < 3 )
      {
         // probably no sliceindex 2 there or extractor just doesn't work (check the corresponding test)
        std::cout << "  (WW) Couldn't extract slice number 3 from a 3D image. This could be a problem if the image is not only two slices big." << std::endl;
        continue;
      }
      else
      {
        continue; // good
      }
    }

    mitk::Image::Pointer slice = extractor->GetOutput();

    filter->SetSliceDimension( sliceDimension );
    filter->SetSliceIndex( 1 ); // second slice in that direction
    filter->SetSliceImage( slice );

    try
    {
      filter->Update(); // try to overwrite
    }
    catch(...)
    {
      if ( sliceDimension < 3 )
      {
        ++numberFailed;
        std::cerr << "  (EE) Couln't overwrite a slice with data from a neigbor in a " 
                  << image->GetDimension() 
                  << "-dimensional image, sliceDimension " 
                  << sliceDimension 
                  << " sliceIndex 1-2." << "(l. " << __LINE__ << ")" << std::endl;
      }
      else
      {
        // this was expected and is nice to see
        continue;
      }
    }

    mitk::Image::Pointer output = filter->GetOutput();

    if (output.IsNull())
    {
      ++numberFailed;
      std::cerr << "  (EE) Overwrite filter has output NULL and gave no exception for an "
                << image->GetDimension() 
                << "-dimensional image, sliceDimension " 
                << sliceDimension 
                << " sliceIndex 1-2." << "(l. " << __LINE__ << ")" << std::endl;
       continue;
    }

    if (!CompareImageSliceTestHelper::CompareSlice( image, sliceDimension , 1 , slice ))
    {
      ++numberFailed;
      std::cerr << "  (EE) Overwriting a slice seemed to work, but the pixels are not correct for an "
                << image->GetDimension() 
                << "-dimensional image, sliceDimension " 
                << sliceDimension 
                << " sliceIndex 1-2." << "(l. " << __LINE__ << ")" << std::endl;
    }


    // try inserting at a position outside the image
    filter->SetSliceDimension( sliceDimension );
    filter->SetSliceIndex( image->GetDimension(sliceDimension)  ); // last possible slice index + 1
    filter->SetSliceImage( slice );

    exception = false;
    try
    {
      filter->Update(); // try to overwrite
    }
    catch(...)
    {
      exception = true;
    }
    
    if (!exception)
    {
      ++numberFailed;
      std::cerr << "  (EE) Inserting a slice outside the 3D volume did NOT throw an exception for an " 
                << image->GetDimension() 
                << "-dimensional image, sliceDimension " 
                << sliceDimension 
                << " sliceIndex 1-2." << "(l. " << __LINE__ << ")" << std::endl;
    }

 
    mitk::Image::Pointer originalSlice = slice;

    // now test slices that just don't fit (slice too big)
    {
      unsigned int dim[]={ slice->GetDimension(0) + 2, slice->GetDimension(1) + 2 };
      slice = mitk::Image::New();
      slice-> Initialize(mitk::PixelType(typeid(signed int)), 2, dim);
      unsigned int i;
      signed int *p = (signed int*)slice->GetData();
      unsigned int size = dim[0]*dim[1];
      for(i=0; i<size; ++i, ++p)
        *p= (signed int)i;

      // try to insert this bad slice 
      filter->SetSliceImage( slice );
      exception = false;
      try
      {
        filter->Update(); // try to overwrite
      }
      catch(...)
      {
        exception = true;
      }

      if (!exception)
      {
        ++numberFailed;
        std::cerr << "  (EE) Trying to insert a slice of bad dimensions (larger) did NOT throw an exception in an "
                  << image->GetDimension() 
                  << "-dimensional image, sliceDimension " 
                  << sliceDimension 
                  << " sliceIndex 1-2." << "(l. " << __LINE__ << ")" << std::endl;
      }
    }

    // now test slices that just don't fit (slice too small)
    {
      slice = originalSlice;
      if ( (slice->GetDimension(0) <3) || (slice->GetDimension(1) <3) ) continue; // not possible shrink the image much further
      unsigned int dim[]={ slice->GetDimension(0) - 2, slice->GetDimension(1) - 2 };
      slice = mitk::Image::New();
      slice-> Initialize(mitk::PixelType(typeid(signed int)), 2, dim);
      unsigned int i;
      signed int *p = (signed int*)slice->GetData();
      unsigned int size = dim[0]*dim[1];
      for(i=0; i<size; ++i, ++p)
        *p= (signed int)i;

      // try to insert this bad slice 
      filter->SetSliceImage( slice );
      exception = false;
      try
      {
        filter->Update(); // try to overwrite
      }
      catch(...)
      {
        exception = true;
      }

      if (!exception)
      {
        ++numberFailed;
        std::cerr << "  (EE) Trying to insert a slice of bad dimensions (smaller) did NOT throw an exception in an "
                  << image->GetDimension() 
                  << "-dimensional image, sliceDimension " 
                  << sliceDimension 
                  << " sliceIndex 1-2." << "(l. " << __LINE__ << ")" << std::endl;
      }
    }
   
  }
  


  if ( numberFailed == initialNumberFailed )
  {
    std::cout << "  (II) Overwriting works nicely (gives result, pixels are good) "
              << image->GetDimension() 
              << "-dimensional image." << "(l. " << __LINE__ << ")" << std::endl;
  }
}
static void mitkOverwriteSliceImageFilterTestClass::TestOtherD ( mitk::OverwriteSliceImageFilter filter,
mitk::Image image,
unsigned int &  numberFailed 
) [inline, static]

Definition at line 259 of file mitkOverwriteSliceImageFilterTest.cpp.

References mitk::Image::GetDimension(), mitk::ImageToImageFilter::SetInput(), and mitk::OverwriteSliceImageFilter::SetSliceImage().

Referenced by mitkOverwriteSliceImageFilterTest().

{
  assert(filter);
  assert(image);

  filter->SetInput( image );
  filter->SetSliceImage( image );
  bool exception = false;
  try
  {
    filter->Update();
  }
  catch(...)
  {
    exception = true;
  }

  if (!exception)
  {
    std::cerr << "  (EE) Using OverwriteImageFilter did not throw an exception "
              << "(l. " << __LINE__ << ")" << std::endl;
  }

  unsigned int initialNumberFailed = numberFailed;
  if ( numberFailed == initialNumberFailed )
  {
    std::cout << "  (II) Overwriting works nicely (gives result, pixels are good) "
              << image->GetDimension() 
              << "-dimensional image." << "(l. " << __LINE__ << ")" << std::endl;
  }
}

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