MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkToFNrrdImageWriterTest.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 <mitkImage.h>
14#include <mitkTestingMacros.h>
15#include <mitkTestFixture.h>
17#include <mitkToFConfig.h>
18#include <mitkIOUtil.h>
19#include <mitkImageGenerator.h>
20#include <mitkImageReadAccessor.h>
21
22class mitkToFNrrdImageWriterTestSuite : public mitk::TestFixture
23{
24
25 CPPUNIT_TEST_SUITE(mitkToFNrrdImageWriterTestSuite);
28 //Work in progress:
29// MITK_TEST(Add_WriteDistanceAndAmplitudeImage_OutputImagesAreEqualToInput);
30// MITK_TEST(Add_WriteDistanceAndIntensityImage_OutputImagesAreEqualToInput);
31// MITK_TEST(Add_WriteDistanceAndIntensityAndAmplitudeImage_OutputImagesAreEqualToInput);
32 CPPUNIT_TEST_SUITE_END();
33
34private:
35
40 mitk::ToFNrrdImageWriter::Pointer m_ToFNrrdImageWriter;
41 std::string m_DistanceImageName;
42 std::string m_AmplitudeImageName;
43 std::string m_IntensityImageName;
44
45 mitk::Image::Pointer m_GroundTruthDepthImage;
46 mitk::Image::Pointer m_GroundTruthIntensityImage;
47 mitk::Image::Pointer m_GroundTruthAmplitudeImage;
48
49 unsigned int m_NumberOfFrames;
50
51public:
52
57 void setUp() override
58 {
59 m_ToFNrrdImageWriter = mitk::ToFNrrdImageWriter::New();
60 m_ToFNrrdImageWriter->SetToFImageType(mitk::ToFNrrdImageWriter::ToFImageType3D); //we test the ToFImageType3D since 3D is deprecated?
61
62 //Generate some random test data
63 unsigned int dimX = 255;
64 unsigned int dimY = 178;
65 m_NumberOfFrames = 23;
66 m_GroundTruthDepthImage= mitk::ImageGenerator::GenerateRandomImage<float>(dimX, dimY, m_NumberOfFrames,1.0, 1.0f, 1.0f);
67 m_GroundTruthAmplitudeImage = mitk::ImageGenerator::GenerateRandomImage<float>(dimX, dimY, m_NumberOfFrames,1.0, 1.0f, 2000.0f);
68 m_GroundTruthIntensityImage = mitk::ImageGenerator::GenerateRandomImage<float>(dimX, dimY, m_NumberOfFrames,1.0, 1.0f, 100000.0f);
69
70 m_ToFNrrdImageWriter->SetToFCaptureWidth(dimX);
71 m_ToFNrrdImageWriter->SetToFCaptureHeight(dimY);
72
73 m_DistanceImageName = "test_DistanceImage.nrrd";
74 m_AmplitudeImageName = "test_AmplitudeImage.nrrd";
75 m_IntensityImageName = "test_IntensityImage.nrrd";
76 }
77
78 void tearDown() override
79 {
80 }
81
83 {
84 MITK_TEST_CONDITION_REQUIRED(m_ToFNrrdImageWriter->GetExtension() == ".nrrd", "Is .nrrd the default extension?");
85 }
86
88 {
89 m_ToFNrrdImageWriter->SetDistanceImageFileName(m_DistanceImageName);
90
91 //buffer for each slice
92 float* distanceArray;
93
94 m_ToFNrrdImageWriter->Open(); //open file/stream
95 for(unsigned int i = 0; i < m_NumberOfFrames ; ++i)
96 {
97 mitk::ImageReadAccessor distAcc(m_GroundTruthDepthImage, m_GroundTruthDepthImage->GetSliceData(i, 0, 0));
98 distanceArray = (float*)distAcc.GetData();
99
100 //write (or add) the three slices to the file
101 m_ToFNrrdImageWriter->Add(distanceArray, nullptr, nullptr);
102 }
103 m_ToFNrrdImageWriter->Close(); //close file
104
105 mitk::Image::Pointer writtenImage = mitk::IOUtil::Load<mitk::Image>( m_DistanceImageName );
106 MITK_ASSERT_EQUAL( m_GroundTruthDepthImage, writtenImage, "Written image should be equal to the test data.");
107
108 //clean up tmp written image
109 remove( m_DistanceImageName.c_str() );
110 }
111
113 {
114 m_ToFNrrdImageWriter->SetDistanceImageFileName(m_DistanceImageName);
115 m_ToFNrrdImageWriter->SetAmplitudeImageFileName(m_AmplitudeImageName);
116 m_ToFNrrdImageWriter->SetAmplitudeImageSelected(true);
117
118
119 //buffer for each slice
120 float* distanceArray;
121 float* amplitudeArray;
122
123 m_ToFNrrdImageWriter->Open(); //open file/stream
124 for(unsigned int i = 0; i < m_NumberOfFrames ; ++i)
125 {
126 mitk::ImageReadAccessor distAcc(m_GroundTruthDepthImage, m_GroundTruthDepthImage->GetSliceData(i, 0, 0));
127 mitk::ImageReadAccessor amplAcc(m_GroundTruthAmplitudeImage, m_GroundTruthAmplitudeImage->GetSliceData(i, 0, 0));
128 distanceArray = (float*)distAcc.GetData();
129 amplitudeArray = (float*)amplAcc.GetData();
130
131 //write (or add) the three slices to the file
132 m_ToFNrrdImageWriter->Add(distanceArray, amplitudeArray, nullptr);
133 }
134 m_ToFNrrdImageWriter->Close(); //close file
135
136 mitk::Image::Pointer writtenDepthImage = mitk::IOUtil::Load<mitk::Image>( m_DistanceImageName );
137 mitk::Image::Pointer writtenAmplitudeImage = mitk::IOUtil::Load<mitk::Image>( m_AmplitudeImageName );
138
139 MITK_ASSERT_EQUAL( m_GroundTruthDepthImage, writtenDepthImage, "Written depth image should be equal to the test data.");
140 MITK_ASSERT_EQUAL( m_GroundTruthAmplitudeImage, writtenAmplitudeImage, "Written amplitude image should be equal to the test data.");
141
142 //clean up tmp written image
143 remove( m_DistanceImageName.c_str() );
144 remove( m_AmplitudeImageName.c_str() );
145 }
146
148 {
149 m_ToFNrrdImageWriter->SetDistanceImageFileName(m_DistanceImageName);
150 m_ToFNrrdImageWriter->SetIntensityImageFileName(m_IntensityImageName);
151 m_ToFNrrdImageWriter->SetIntensityImageSelected(true);
152
153 //buffer for each slice
154 float* distanceArray;
155 float* intensityArray;
156
157 m_ToFNrrdImageWriter->Open(); //open file/stream
158 for(unsigned int i = 0; i < m_NumberOfFrames ; ++i)
159 {
160 mitk::ImageReadAccessor distAcc(m_GroundTruthDepthImage, m_GroundTruthDepthImage->GetSliceData(i, 0, 0));
161 mitk::ImageReadAccessor intensityAcc(m_GroundTruthIntensityImage, m_GroundTruthIntensityImage->GetSliceData(i, 0, 0));
162 distanceArray = (float*)distAcc.GetData();
163 intensityArray = (float*)intensityAcc.GetData();
164
165 //write (or add) the three slices to the file
166 m_ToFNrrdImageWriter->Add(distanceArray, nullptr, intensityArray);
167 }
168 m_ToFNrrdImageWriter->Close(); //close file
169
170 mitk::Image::Pointer writtenDepthImage = mitk::IOUtil::Load<mitk::Image>( m_DistanceImageName );
171 mitk::Image::Pointer writtenIntensityImage = mitk::IOUtil::Load<mitk::Image>( m_IntensityImageName );
172
173 MITK_ASSERT_EQUAL( m_GroundTruthDepthImage, writtenDepthImage, "Written depth image should be equal to the test data.");
174 MITK_ASSERT_EQUAL( m_GroundTruthIntensityImage, writtenIntensityImage, "Written amplitude image should be equal to the test data.");
175
176 //clean up tmp written image
177 remove( m_DistanceImageName.c_str() );
178 remove( m_IntensityImageName.c_str() );
179 }
180
182 {
183 m_ToFNrrdImageWriter->SetDistanceImageFileName(m_DistanceImageName);
184 m_ToFNrrdImageWriter->SetIntensityImageFileName(m_IntensityImageName);
185 m_ToFNrrdImageWriter->SetIntensityImageSelected(true);
186 m_ToFNrrdImageWriter->SetAmplitudeImageFileName(m_AmplitudeImageName);
187 m_ToFNrrdImageWriter->SetAmplitudeImageSelected(true);
188
189 //buffer for each slice
190 float* distanceArray;
191 float* intensityArray;
192 float* amplitudeArray;
193
194 m_ToFNrrdImageWriter->Open(); //open file/stream
195 for(unsigned int i = 0; i < m_NumberOfFrames ; ++i)
196 {
197 mitk::ImageReadAccessor distAcc(m_GroundTruthDepthImage, m_GroundTruthDepthImage->GetSliceData(i, 0, 0));
198 mitk::ImageReadAccessor intensityAcc(m_GroundTruthIntensityImage, m_GroundTruthIntensityImage->GetSliceData(i, 0, 0));
199 mitk::ImageReadAccessor amplAcc(m_GroundTruthAmplitudeImage, m_GroundTruthAmplitudeImage->GetSliceData(i, 0, 0));
200
201 distanceArray = (float*)distAcc.GetData();
202 intensityArray = (float*)intensityAcc.GetData();
203 amplitudeArray = (float*)amplAcc.GetData();
204
205 //write (or add) the three slices to the file
206 m_ToFNrrdImageWriter->Add(distanceArray, amplitudeArray, intensityArray);
207 }
208 m_ToFNrrdImageWriter->Close(); //close file
209
210 mitk::Image::Pointer writtenDepthImage = mitk::IOUtil::Load<mitk::Image>( m_DistanceImageName );
211 mitk::Image::Pointer writtenIntensityImage = mitk::IOUtil::Load<mitk::Image>( m_IntensityImageName );
212 mitk::Image::Pointer writtenAmplitudeImage = mitk::IOUtil::Load<mitk::Image>( m_AmplitudeImageName );
213
214 MITK_ASSERT_EQUAL( m_GroundTruthDepthImage, writtenDepthImage, "Written depth image should be equal to the test data.");
215 MITK_ASSERT_EQUAL( m_GroundTruthAmplitudeImage, writtenAmplitudeImage, "Written amplitude image should be equal to the test data.");
216 MITK_ASSERT_EQUAL( m_GroundTruthIntensityImage, writtenIntensityImage, "Written amplitude image should be equal to the test data.");
217
218 //clean up tmp written image
219 remove( m_DistanceImageName.c_str() );
220 remove( m_IntensityImageName.c_str() );
221 remove( m_AmplitudeImageName.c_str() );
222 }
223};
224
225MITK_TEST_SUITE_REGISTRATION(mitkToFNrrdImageWriter)
void setUp() override
Setup a recorder including a device. Here, we use a player, because in an automatic test hardware is ...