MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkToFImageRecorderTest.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 <mitkImageSliceSelector.h>
16#include <mitkTestFixture.h>
19#include <mitkToFConfig.h>
20#include <mitkIOUtil.h>
21
22class mitkToFImageRecorderTestSuite : public mitk::TestFixture
23{
24
25 CPPUNIT_TEST_SUITE(mitkToFImageRecorderTestSuite);
26 //See bug #12997
27// MITK_TEST(StartRecording_ValidDepthImage_WritesImageToFile);
28// MITK_TEST(StartRecording_ValidAmplitudeImage_WritesImageToFile);
29// MITK_TEST(StartRecording_ValidIntensityImage_WritesImageToFile);
30 CPPUNIT_TEST_SUITE_END();
31
32private:
33
38 mitk::ToFImageRecorder::Pointer m_ToFImageRecorder;
39 mitk::ToFCameraMITKPlayerDevice::Pointer m_PlayerDevice;
40 std::string m_DistanceImageName;
41 std::string m_AmplitudeImageName;
42 std::string m_IntensityImageName;
43
44 mitk::Image::Pointer m_GroundTruthDepthImage;
45 mitk::Image::Pointer m_GroundTruthIntensityImage;
46 mitk::Image::Pointer m_GroundTruthAmplitudeImage;
47
48public:
49
54 void setUp() override
55 {
56 m_ToFImageRecorder = mitk::ToFImageRecorder::New();
57 m_DistanceImageName = mitk::IOUtil::CreateTemporaryFile();
58 m_AmplitudeImageName = mitk::IOUtil::CreateTemporaryFile();
59 m_IntensityImageName = mitk::IOUtil::CreateTemporaryFile();
60
61 //The recorder would automatically append the default extension ".nrrd"
62 //but we have to append it here, because the data is later loaded with
63 //IOUtil which does not know what kind of data to load/look for.
64 m_DistanceImageName.append("Distance.nrrd");
65 m_AmplitudeImageName.append("Amplitude.nrrd");
66 m_IntensityImageName.append("Intensity.nrrd");
67
68 m_PlayerDevice = mitk::ToFCameraMITKPlayerDevice::New();
69 m_ToFImageRecorder->SetCameraDevice(m_PlayerDevice);
70
71 //the test data set has 20 frames, so we record 20 per default
72 m_ToFImageRecorder->SetNumOfFrames(20);
73 m_ToFImageRecorder->SetRecordMode(mitk::ToFImageRecorder::PerFrames);
74
75 std::string dirName = MITK_TOF_DATA_DIR;
76 std::string distanceFileName = dirName + "/PMDCamCube2_MF0_IT0_20Images_DistanceImage.nrrd";
77 std::string amplitudeFileName = dirName + "/PMDCamCube2_MF0_IT0_20Images_AmplitudeImage.nrrd";
78 std::string intensityFileName = dirName + "/PMDCamCube2_MF0_IT0_20Images_IntensityImage.nrrd";
79
80 m_PlayerDevice->SetProperty("DistanceImageFileName",mitk::StringProperty::New(distanceFileName));
81 m_PlayerDevice->SetProperty("AmplitudeImageFileName",mitk::StringProperty::New(amplitudeFileName));
82 m_PlayerDevice->SetProperty("IntensityImageFileName",mitk::StringProperty::New(intensityFileName));
83
84 //comparing against IOUtil seems fair enough
85 m_GroundTruthDepthImage = mitk::IOUtil::Load<mitk::Image>(distanceFileName);
86 m_GroundTruthAmplitudeImage = mitk::IOUtil::Load<mitk::Image>(amplitudeFileName);
87 m_GroundTruthIntensityImage = mitk::IOUtil::Load<mitk::Image>(intensityFileName);
88
89 m_PlayerDevice->ConnectCamera();
90 m_PlayerDevice->StartCamera();
91 }
92
93 void tearDown() override
94 {
95 m_PlayerDevice->StopCamera();
96 m_PlayerDevice->DisconnectCamera();
97 }
98
100 {
101 m_ToFImageRecorder->SetDistanceImageFileName(m_DistanceImageName);
102 m_ToFImageRecorder->StartRecording();
103 m_ToFImageRecorder->WaitForThreadBeingTerminated();
104 m_ToFImageRecorder->StopRecording();
105
106 mitk::Image::Pointer recordedImage = mitk::IOUtil::Load<mitk::Image>(m_DistanceImageName);
107 MITK_ASSERT_EQUAL( m_GroundTruthDepthImage, recordedImage, "Recorded image should be equal to the test data.");
108
109 //delete the tmp image
110 if( remove( m_DistanceImageName.c_str() ) != 0 )
111 {
112 MITK_ERROR<<"File: "<< m_DistanceImageName << " not successfully deleted!";
113 }
114 }
115
117 {
118 m_ToFImageRecorder->SetAmplitudeImageFileName(m_AmplitudeImageName);
119 m_ToFImageRecorder->SetAmplitudeImageSelected(true);
120 m_ToFImageRecorder->SetDistanceImageSelected(false);
121 m_ToFImageRecorder->StartRecording();
122 m_ToFImageRecorder->WaitForThreadBeingTerminated();
123 m_ToFImageRecorder->StopRecording();
124
125 mitk::Image::Pointer recordedImage = mitk::IOUtil::Load<mitk::Image>(m_AmplitudeImageName);
126 MITK_ASSERT_EQUAL( m_GroundTruthAmplitudeImage, recordedImage, "Recorded image should be equal to the test data.");
127
128 //delete the tmp image
129 if( remove( m_AmplitudeImageName.c_str() ) != 0 )
130 {
131 MITK_ERROR<<"File: "<< m_AmplitudeImageName << " not successfully deleted!";
132 }
133 }
134
136 {
137 m_ToFImageRecorder->SetIntensityImageFileName(m_IntensityImageName);
138 m_ToFImageRecorder->SetIntensityImageSelected(true);
139 m_ToFImageRecorder->SetDistanceImageSelected(false);
140 m_ToFImageRecorder->StartRecording();
141 m_ToFImageRecorder->WaitForThreadBeingTerminated();
142 m_ToFImageRecorder->StopRecording();
143
144 mitk::Image::Pointer recordedImage = mitk::IOUtil::Load<mitk::Image>(m_IntensityImageName);
145 MITK_ASSERT_EQUAL( m_GroundTruthIntensityImage, recordedImage, "Recorded image should be equal to the test data.");
146
147 //delete the tmp image
148 if( remove( m_IntensityImageName.c_str() ) != 0 )
149 {
150 MITK_ERROR<<"File: "<< m_IntensityImageName << " not successfully deleted!";
151 }
152 }
153};
154
155MITK_TEST_SUITE_REGISTRATION(mitkToFImageRecorder)
void setUp() override
Setup a recorder including a device. Here, we use a player, because in an automatic test hardware is ...