#include <mitkImage.h>#include <mitkDataNodeFactory.h>#include <mitkCylindricToCartesianFilter.h>#include <mitkImageSliceSelector.h>#include <itksys/SystemTools.hxx>#include <fstream>Go to the source code of this file.
Functions | |
| int | mitkImageSliceSelectorTest (int argc, char *argv[]) |
| int mitkImageSliceSelectorTest | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 26 of file mitkImageSliceSelectorTest.cpp.
References EXIT_FAILURE, EXIT_SUCCESS, mitkIpPicDescriptor, mitk::CylindricToCartesianFilter::New(), mitk::ImageSliceSelector::New(), and mitk::DataNodeFactory::New().
{
int slice_nr = 1;
std::cout << "Loading file: ";
if(argc==0)
{
std::cout<<"no file specified [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
mitk::Image::Pointer image = NULL;
mitk::DataNodeFactory::Pointer factory = mitk::DataNodeFactory::New();
try
{
std::cout<<argv[1]<<std::endl;
factory->SetFileName( argv[1] );
factory->Update();
if(factory->GetNumberOfOutputs()<1)
{
std::cout<<"file could not be loaded [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
mitk::DataNode::Pointer node = factory->GetOutput( 0 );
image = dynamic_cast<mitk::Image*>(node->GetData());
if(image.IsNull())
{
std::cout<<"file not an image - test will not be applied [PASSED]"<<std::endl;
std::cout<<"[TEST DONE]"<<std::endl;
return EXIT_SUCCESS;
}
}
catch ( itk::ExceptionObject & ex )
{
std::cout << "Exception: " << ex << "[FAILED]" << std::endl;
return EXIT_FAILURE;
}
if(image->GetDimension(2)<2)
slice_nr = 0;
//Take a slice
mitk::ImageSliceSelector::Pointer slice = mitk::ImageSliceSelector::New();
slice->SetInput(image);
slice->SetSliceNr(slice_nr);
slice->Update();
std::cout << "Testing IsInitialized(): ";
if(slice->GetOutput()->IsInitialized()==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing IsSliceSet(): ";
if(slice->GetOutput()->IsSliceSet(0)==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
if(itksys::SystemTools::LowerCase(itksys::SystemTools::GetFilenameExtension(argv[1])).find(".pic")!=std::string::npos)
{
std::cout << "Testing whether the slice is identical with a slice loaded by mitkIpPicGetSlice:";
mitkIpPicDescriptor *picslice = mitkIpPicGetSlice(argv[1], NULL, (image->GetDimension(2)-1-slice_nr)+1);
int i, size = _mitkIpPicSize(picslice);
char * p1 = (char*)slice->GetPic()->data;
char * p2 = (char*)picslice->data;
//picslice->info->write_protect=mitkIpFalse;
//mitkIpPicPut("C:\\1aaaaIPPIC.pic", picslice);
//mitkIpPicPut("C:\\1aaaaSEL.pic", slice->GetPic());
for(i=0; i<size; ++i, ++p1, ++p2)
{
if((*p1) != (*p2))
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
}
std::cout<<"[PASSED]"<<std::endl;
mitkIpPicFree(picslice);
}
try
{
std::cout << "Testing another, smaller (!!) input with the same slice-selector(): ";
//Use CylindricToCartesianFilter
mitk::CylindricToCartesianFilter::Pointer cyl2cart = mitk::CylindricToCartesianFilter::New();
cyl2cart->SetInput(image);
//the output size of this filter is smaller than the of the input!!
cyl2cart->SetTargetXSize( 64 );
//Use the same slice-selector again, this time to take a slice of the filtered image
//which is smaller than the one of the old input!!
slice->SetInput(cyl2cart->GetOutput());
slice->SetSliceNr(1);
//The requested region is still the old one,
//therefore the following results in most ITK versions
//in an exception!
slice->Update();
//If no exception occured, check that the requested region is now
//the one of the smaller image
if(cyl2cart->GetOutput()->GetLargestPossibleRegion().GetSize()[0]!=64)
{
std::cout<<"Part 1 [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"Part 1 (without exception) [PASSED] ";
//Check that the size of the output is now the one of the smaller image
if((cyl2cart->GetOutput()->GetDimensions()[0]!=64) || (cyl2cart->GetOutput()->GetDimensions()[1]!=64))
{
std::cout<<"Part 1b [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"Part 1b [PASSED] ";
}
catch ( itk::ExceptionObject &err)
{
std::cout<<"Part 1(with expected exception) ... seems to be not ITK 2.0.0 [PASSED]"<<std::endl;
std::cout<<err<<std::endl;
//after such an exception, we need to call ResetPipeline.
slice->ResetPipeline();
}
try
{
slice->UpdateLargestPossibleRegion();
}
catch ( itk::ExceptionObject )
{
std::cout<<"Part 2 [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"Part 2 [PASSED]"<<std::endl;
std::cout << "Testing IsInitialized(): ";
if(slice->GetOutput()->IsInitialized()==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing IsSliceSet(): ";
if(slice->GetOutput()->IsSliceSet(0)==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
if(image->GetDimension(3) > 1)
{
int time=image->GetDimension(3)-1;
std::cout << "Testing 3D+t: Setting time to " << time << ": ";
slice->SetTimeNr(time);
if(slice->GetTimeNr()!=time)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing 3D+t: Updating slice: ";
slice->Update();
if(slice->GetOutput()->IsInitialized()==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing 3D+t: IsSliceSet(): ";
if(slice->GetOutput()->IsSliceSet(0)==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing 3D+t: First slice in reader available: ";
if(image->IsSliceSet(0, time)==false)
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
}
std::cout<<"[TEST DONE]"<<std::endl;
return EXIT_SUCCESS;
}
1.7.2