MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkToFImageRecorderFilterTest.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
13#include <mitkTestingMacros.h>
14
15#include <mitkImageDataItem.h>
16#include <mitkItkImageFileReader.h>
17#include <mitkToFConfig.h>
19#include <mitkToFImageWriter.h>
20
21#include <itkImage.h>
22#include <itkImageRegionIterator.h>
23#include <itkMersenneTwisterRandomVariateGenerator.h>
24
25mitk::Image::Pointer CreateTestImage(unsigned int dimX, unsigned int dimY)
26{
27 typedef itk::Image<float,2> ItkImageType2D;
28 typedef itk::ImageRegionIterator<ItkImageType2D> ItkImageRegionIteratorType2D;
29
30 ItkImageType2D::Pointer image = ItkImageType2D::New();
31 ItkImageType2D::IndexType start;
32 start[0] = 0;
33 start[1] = 0;
34 ItkImageType2D::SizeType size;
35 size[0] = dimX;
36 size[1] = dimY;
37 ItkImageType2D::RegionType region;
38 region.SetSize(size);
39 region.SetIndex( start);
40 ItkImageType2D::SpacingType spacing;
41 spacing[0] = 1.0;
42 spacing[1] = 1.0;
43
44 image->SetRegions( region );
45 image->SetSpacing ( spacing );
46 image->Allocate();
47
48 //Obtaining image data from ToF camera//
49
50 //Correlate inten values to PixelIndex//
51 ItkImageRegionIteratorType2D imageIterator(image,image->GetLargestPossibleRegion());
52 imageIterator.GoToBegin();
53 itk::Statistics::MersenneTwisterRandomVariateGenerator::Pointer randomGenerator = itk::Statistics::MersenneTwisterRandomVariateGenerator::New();
54 while (!imageIterator.IsAtEnd())
55 {
56 double pixelValue = randomGenerator->GetUniformVariate(0.0,1000.0);
57 imageIterator.Set(pixelValue);
58 ++imageIterator;
59 }
60 mitk::Image::Pointer mitkImage = mitk::Image::New();
61 mitk::CastToMitkImage(image,mitkImage);
62 return mitkImage;
63}
64
65static bool CompareImages(mitk::Image::Pointer image1, mitk::Image::Pointer image2)
66{
67 //check if epsilon is exceeded
68 unsigned int sliceDimension = image1->GetDimension(0)*image1->GetDimension(1);
69 bool picturesEqual = true;
70
71 float* floatArray1 = (float*)image1->GetSliceData(0, 0, 0)->GetData();
72 float* floatArray2 = (float*)image2->GetSliceData(0, 0, 0)->GetData();
73 for(unsigned int i = 0; i < sliceDimension; i++)
74 {
75 if(!(mitk::Equal(floatArray1[i], floatArray2[i])))
76 {
77 picturesEqual = false;
78 }
79 }
80 return picturesEqual;
81}
82
86int mitkToFImageRecorderFilterTest(int /* argc */, char* /*argv*/[])
87{
88 MITK_TEST_BEGIN("ToFImageRecorder");
89 mitk::ToFImageRecorderFilter::Pointer tofImageRecorderFilter = mitk::ToFImageRecorderFilter::New();
90 std::string dirName = MITK_TOF_DATA_DIR;
91 MITK_TEST_OUTPUT(<< "Test SetFileName()");
92 std::string testFileName = dirName + "test.nrrd";
93 MITK_TEST_FOR_EXCEPTION_BEGIN(std::logic_error);
94 tofImageRecorderFilter->SetFileName(testFileName);
95 MITK_TEST_FOR_EXCEPTION_END(std::logic_error);
96 testFileName = dirName + "test.nrrd";
97 tofImageRecorderFilter->SetFileName(testFileName);
98 mitk::ToFImageWriter::Pointer tofImageWriter = tofImageRecorderFilter->GetToFImageWriter();
99 std::string requiredName = dirName + "test_DistanceImage.nrrd";
100 std::string name = tofImageWriter->GetDistanceImageFileName();
101 MITK_TEST_CONDITION_REQUIRED(requiredName==name,"Test for distance image file name");
102 requiredName = dirName + "test_AmplitudeImage.nrrd";
103 name = tofImageWriter->GetAmplitudeImageFileName();
104 MITK_TEST_CONDITION_REQUIRED(requiredName==name,"Test for amplitude image file name");
105 requiredName = dirName + "test_IntensityImage.nrrd";
106 name = tofImageWriter->GetIntensityImageFileName();
107 MITK_TEST_CONDITION_REQUIRED(requiredName==name,"Test for intensity image file name");
108
109 mitk::Image::Pointer testDistanceImage = CreateTestImage(200,200);
110 mitk::Image::Pointer testAmplitudeImage = CreateTestImage(200,200);
111 mitk::Image::Pointer testIntensityImage = CreateTestImage(200,200);
112
113 MITK_TEST_OUTPUT(<< "Apply filter");
114 tofImageRecorderFilter->StartRecording();
115 tofImageRecorderFilter->SetInput(0,testDistanceImage);
116 tofImageRecorderFilter->SetInput(1,testAmplitudeImage);
117 tofImageRecorderFilter->SetInput(2,testIntensityImage);
118 tofImageRecorderFilter->Update();
119
120 MITK_TEST_OUTPUT(<< "Test outputs of filter");
121 mitk::Image::Pointer outputDistanceImage = tofImageRecorderFilter->GetOutput();
122 MITK_TEST_CONDITION_REQUIRED(CompareImages(testDistanceImage,outputDistanceImage),"Test output 0 (distance image)");
123 mitk::Image::Pointer outputAmplitudeImage = tofImageRecorderFilter->GetOutput(1);
124 MITK_TEST_CONDITION_REQUIRED(CompareImages(testAmplitudeImage,outputAmplitudeImage),"Test output 1 (amplitude image)");
125 mitk::Image::Pointer outputIntensityImage = tofImageRecorderFilter->GetOutput(2);
126 MITK_TEST_CONDITION_REQUIRED(CompareImages(testIntensityImage,outputIntensityImage),"Test output 2 (intensity image)");
127 tofImageRecorderFilter->StopRecording();
128
129 MITK_TEST_OUTPUT(<< "Test content of written files");
130 mitk::ItkImageFileReader::Pointer imageReader = mitk::ItkImageFileReader::New();
131 std::string testDistanceImageName = dirName + "test_DistanceImage.nrrd";
132 imageReader->SetFileName(testDistanceImageName);
133 imageReader->Update();
134 mitk::Image::Pointer loadedDistanceImage = imageReader->GetOutput();
135 MITK_TEST_CONDITION_REQUIRED(CompareImages(testDistanceImage,loadedDistanceImage),"Test loaded image 0 (distance image)");
136 std::string testAmplitudeImageName = dirName + "test_AmplitudeImage.nrrd";
137 imageReader->SetFileName(testAmplitudeImageName);
138 imageReader->Update();
139 mitk::Image::Pointer loadedAmplitudeImage = imageReader->GetOutput();
140 MITK_TEST_CONDITION_REQUIRED(CompareImages(testAmplitudeImage,loadedAmplitudeImage),"Test loaded image 1 (amplitude image)");
141 std::string testIntensityImageName = dirName + "test_IntensityImage.nrrd";
142 imageReader->SetFileName(testIntensityImageName);
143 imageReader->Update();
144 mitk::Image::Pointer loadedIntensityImage = imageReader->GetOutput();
145 MITK_TEST_CONDITION_REQUIRED(CompareImages(testIntensityImage,loadedIntensityImage),"Test loaded image 2 (intensity image)");
146
147 //clean up and delete saved image files
148 if( remove( testDistanceImageName.c_str() ) != 0 )
149 {
150 MITK_ERROR<<"File: test_DistanceImage.nrrd not successfully deleted!";
151 }
152 if( remove( testAmplitudeImageName.c_str() ) != 0 )
153 {
154 MITK_ERROR<<"File: test_AmplitudeImage.nrrd not successfully deleted!";
155 }
156 if( remove( testIntensityImageName.c_str() ) != 0 )
157 {
158 MITK_ERROR<<"File: test_IntensityImage.nrrd not successfully deleted!";
159 }
160 MITK_TEST_END();
161}
162
163
itk::ImageRegionIterator< ItkImageType_2D > ItkImageRegionIteratorType2D
itk::Image< float, 2 > ItkImageType2D
int mitkToFImageRecorderFilterTest(int, char *[])
mitk::Image::Pointer CreateTestImage(unsigned int dimX, unsigned int dimY)
MITKIGTBASE_EXPORT bool Equal(const mitk::NavigationData &leftHandSide, const mitk::NavigationData &rightHandSide, ScalarType eps=mitk::eps, bool verbose=false)
Equal A function comparing two navigation data objects for beeing equal in meta- and imagedata.