#include "mitkImage.h"
#include "mitkImageAccessByItk.h"
#include "mitkITKImageImport.h"
#include "mitkReferenceCountWatcher.h"
#include "itkDiffusionTensor3D.h"
#include "itkConfidenceDiffusionTensor3D.h"
#include <mitkImageCast.h>
#include <fstream>
Go to the source code of this file.
Functions | |
int | compareGeometries (mitk::Geometry3D *geometry1, mitk::Geometry3D *geometry2) |
template<class ImageType > | |
int | testBackCasting (mitk::Image *imgMem, typename ImageType::Pointer &itkImage, bool disconnectAfterImport) |
template<unsigned int dim> | |
int | testImageToItkAndBack (mitk::Image *imgMem) |
int | mitkImageToItkTest (int, char *[]) |
int compareGeometries | ( | mitk::Geometry3D * | geometry1, |
mitk::Geometry3D * | geometry2 | ||
) |
Definition at line 29 of file mitkImageToItkTest.cpp.
References EXIT_FAILURE, EXIT_SUCCESS, mitk::Geometry3D::GetAxisVector(), mitk::Geometry3D::GetOrigin(), and mitk::Geometry3D::GetSpacing().
Referenced by testBackCasting().
{ std::cout << "Testing transfer of GetGeometry()->GetOrigin(): " << std::flush; if(mitk::Equal(geometry1->GetOrigin(), geometry2->GetOrigin()) == false) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; std::cout << "Testing transfer of GetGeometry()->GetSpacing(): " << std::flush; if(mitk::Equal(geometry1->GetSpacing(), geometry2->GetSpacing()) == false) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; int i; for(i=0; i<3; ++i) { std::cout << "Testing transfer of GetGeometry()->GetAxisVector(" << i << "): " << std::flush; if(mitk::Equal(geometry1->GetAxisVector(i), geometry2->GetAxisVector(i)) == false) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; } return EXIT_SUCCESS; }
int mitkImageToItkTest | ( | int | , |
char * | [] | ||
) |
Definition at line 157 of file mitkImageToItkTest.cpp.
References mitk::CastToItkImage(), EXIT_FAILURE, EXIT_SUCCESS, mitk::PlaneGeometry::New(), and mitk::Image::New().
{ int result; //Create Image out of nowhere mitk::Image::Pointer imgMem; mitk::PixelType pt(typeid(int)); std::cout << "Testing creation of Image: "; imgMem=mitk::Image::New(); if(imgMem.IsNull()) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; // geometry information for image mitk::Point3D origin; mitk::Vector3D right, bottom; mitk::Vector3D spacing; mitk::FillVector3D(origin, 17.0, 19.92, 7.83); mitk::FillVector3D(right, 1.0, 2.0, 3.0); mitk::FillVector3D(bottom, 0.0, -3.0, 2.0); mitk::FillVector3D(spacing, 0.78, 0.91, 2.23); std::cout << "Testing InitializeStandardPlane(rightVector, downVector, spacing): " << std::flush; mitk::PlaneGeometry::Pointer planegeometry = mitk::PlaneGeometry::New(); planegeometry->InitializeStandardPlane(100, 100, right, bottom, &spacing); planegeometry->SetOrigin(origin); std::cout << "done" << std::endl; std::cout << "Testing Initialize(const mitk::PixelType& type, int sDim, const mitk::PlaneGeometry& geometry) and GetData(): "; imgMem->Initialize(mitk::PixelType(typeid(int)), 40, *planegeometry); //XXXXXXXXXXXXXXXXXXXXXCHANGE! result = testImageToItkAndBack<3>(imgMem); if(result != EXIT_SUCCESS) return result; std::cout << "Testing mitk::CastToItkImage with casting (mitk int to itk float): " << std::flush; typedef itk::Image<float,3> ImageType; ImageType::Pointer itkImage; mitk::CastToItkImage( imgMem, itkImage ); result = testBackCasting<ImageType>(imgMem, itkImage, false); if(result != EXIT_SUCCESS) return result; result = testBackCasting<ImageType>(imgMem, itkImage, true); if(result != EXIT_SUCCESS) return result; std::cout << "Testing Initialize(const mitk::PixelType& type, int sDim, const mitk::PlaneGeometry& geometry) and GetData(): "; imgMem->Initialize(mitk::PixelType(typeid(int)), 40, *planegeometry, false, 1, 6); result = testImageToItkAndBack<4>(imgMem); if(result != EXIT_SUCCESS) return result; std::cout << "Testing mitk::CastToItkImage again (mitk float to itk float): " << std::flush; imgMem->Initialize(mitk::PixelType(typeid(float)), 40, *planegeometry); mitk::CastToItkImage( imgMem, itkImage ); std::cout<<"[PASSED]"<<std::endl; mitk::ImageDataItem::Pointer imageDataItem = imgMem->GetChannelData().GetPointer(); std::cout << "Testing destruction of original mitk::Image: " << std::flush; imgMem = NULL; std::cout<<"[PASSED]"<<std::endl; std::cout << "Testing reference count mitk::ImageDataItem, which is responsible for the memory still used within the itk::Image: " << std::flush; if(imageDataItem->GetReferenceCount()-1 != 1) // 1 count by imageDataItem itself { std::cout<< imageDataItem->GetReferenceCount()-1 << " != 1. [FAILED]" << std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; std::cout << "Testing destruction of itk::Image: " << std::flush; itkImage = NULL; std::cout<<"[PASSED]"<<std::endl; std::cout << "Testing reference count mitk::ImageDataItem, which should now have been freed by itk::Image: " << std::flush; if(imageDataItem->GetReferenceCount()-1 != 0) // 1 count by imageDataItem itself { std::cout<< imageDataItem->GetReferenceCount()-1 << " != 0. [FAILED]" << std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; imgMem=mitk::Image::New(); itk::Image<itk::DiffusionTensor3D<float>,3>::Pointer diffImage; imgMem->Initialize(mitk::PixelType(typeid(itk::DiffusionTensor3D<float>)), 40, *planegeometry); mitk::CastToItkImage( imgMem, diffImage ); imgMem->InitializeByItk(diffImage.GetPointer()); std::cout<<"[PASSED]"<<std::endl; itk::Image<itk::DiffusionTensor3D<double>,3>::Pointer diffImage2; imgMem->Initialize(mitk::PixelType(typeid(itk::DiffusionTensor3D<double>)), 40, *planegeometry); mitk::CastToItkImage( imgMem, diffImage2 ); imgMem->InitializeByItk(diffImage2.GetPointer()); std::cout<<"[PASSED]"<<std::endl; itk::Image<itk::ConfidenceDiffusionTensor3D<float>,3>::Pointer confDiffImage; imgMem->Initialize(mitk::PixelType(typeid(itk::ConfidenceDiffusionTensor3D<float>)), 40, *planegeometry); mitk::CastToItkImage( imgMem, confDiffImage ); imgMem->InitializeByItk(confDiffImage.GetPointer()); std::cout<<"[PASSED]"<<std::endl; itk::Image<itk::ConfidenceDiffusionTensor3D<double>,3>::Pointer confDiffImage2; imgMem->Initialize(mitk::PixelType(typeid(itk::ConfidenceDiffusionTensor3D<double>)), 40, *planegeometry); mitk::CastToItkImage( imgMem, confDiffImage2 ); imgMem->InitializeByItk(confDiffImage2.GetPointer()); std::cout<<"[PASSED]"<<std::endl; std::cout<<"[TEST DONE]"<<std::endl; return EXIT_SUCCESS; }
int testBackCasting | ( | mitk::Image * | imgMem, |
typename ImageType::Pointer & | itkImage, | ||
bool | disconnectAfterImport | ||
) |
Definition at line 62 of file mitkImageToItkTest.cpp.
References mitk::CastToMitkImage(), compareGeometries(), EXIT_FAILURE, EXIT_SUCCESS, mitk::BaseData::GetGeometry(), mitk::ImportItkImage(), and mitk::Image::New().
{ int result; if(itkImage.IsNull()) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } int *p = (int*)itkImage->GetBufferPointer(); if(p==NULL) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; std::cout << "Testing mitk::CastToMitkImage: " << std::flush; mitk::Image::Pointer mitkImage = mitk::Image::New(); mitk::CastToMitkImage( itkImage, mitkImage ); std::cout<<"[PASSED]"<<std::endl; result = compareGeometries(imgMem->GetGeometry(), mitkImage->GetGeometry()); if(result != EXIT_SUCCESS) return result; std::cout << "Testing whether data after mitk::CastToMitkImage is available: " << std::flush; if(mitkImage->IsChannelSet()==false) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; std::cout << "Testing mitk::ImportItkImage: " << std::flush; mitkImage = mitk::ImportItkImage(itkImage); std::cout<<"[PASSED]"<<std::endl; if(disconnectAfterImport) { std::cout << "Testing DisconnectPipeline() on mitk::Image into which was imported : " << std::flush; mitkImage->DisconnectPipeline(); std::cout<<"[PASSED]"<<std::endl; } result = compareGeometries(imgMem->GetGeometry(), mitkImage->GetGeometry()); if(result != EXIT_SUCCESS) return result; std::cout << "Testing whether data after mitk::ImportItkImage is available: " << std::flush; if(mitkImage->IsChannelSet()==false) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; return EXIT_SUCCESS; }
int testImageToItkAndBack | ( | mitk::Image * | imgMem ) |
Definition at line 124 of file mitkImageToItkTest.cpp.
References EXIT_FAILURE, EXIT_SUCCESS, mitk::Image::GetData(), mitk::ImageToItk< TOutputImage >::New(), and mitk::ImageToItk< TOutputImage >::SetInput().
{ int result; int *p = (int*)imgMem->GetData(); if(p==NULL) { std::cout<<"[FAILED]"<<std::endl; return EXIT_FAILURE; } std::cout<<"[PASSED]"<<std::endl; std::cout << "Testing for dimension " << dim << ": " << std::flush; std::cout << "Testing mitk::ImageToItk: " << std::flush; typedef itk::Image<int,dim> ImageType; typename mitk::ImageToItk<ImageType>::Pointer toItkFilter = mitk::ImageToItk<ImageType>::New(); toItkFilter->SetInput(imgMem); toItkFilter->Update(); typename ImageType::Pointer itkImage = toItkFilter->GetOutput(); result = testBackCasting<ImageType>(imgMem, itkImage, false); if(result != EXIT_SUCCESS) return result; std::cout << "Testing mitk::ImageToItk (with subsequent DisconnectPipeline, see below): " << std::flush; result = testBackCasting<ImageType>(imgMem, itkImage, true); if(result != EXIT_SUCCESS) return result; return EXIT_SUCCESS; }