Skip to content

Commit dcb2028

Browse files
committed
Merge branch 'bug-17410-FixDimensions'
2 parents 90a0cf1 + 3b9c466 commit dcb2028

File tree

6 files changed

+106
-77
lines changed

6 files changed

+106
-77
lines changed

Modules/ToFHardware/mitkToFCameraMITKPlayerController.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,19 @@ void ToFCameraMITKPlayerController::CleanUp()
9696
this->m_IntensityArray = NULL;
9797
delete[] this->m_RGBArray;
9898
this->m_RGBArray = NULL;
99+
100+
this->m_DistanceImageFileName = "";
101+
this->m_AmplitudeImageFileName = "";
102+
this->m_IntensityImageFileName = "";
103+
this->m_RGBImageFileName = "";
99104
}
100105

101106
bool ToFCameraMITKPlayerController::OpenCameraConnection()
102107
{
103108
if(!this->m_ConnectionCheck)
104109
{
110+
// reset the image status before connection
111+
m_ImageStatus = std::vector<bool>(4,true);
105112
try
106113
{
107114
if (this->m_DistanceImageFileName.empty() &&

Modules/ToFHardware/mitkToFCameraMITKPlayerDevice.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ bool ToFCameraMITKPlayerDevice::DisconnectCamera()
6565
if (ok)
6666
{
6767
m_CameraConnected = false;
68+
m_PropertyList->Clear();
6869
}
6970
return ok;
7071
}

Modules/ToFHardware/mitkToFImageGrabber.cpp

Lines changed: 64 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ namespace mitk
2020
{
2121
ToFImageGrabber::ToFImageGrabber():
2222
m_ToFCameraDevice(NULL),
23-
m_CaptureWidth(204),
24-
m_CaptureHeight(204),
25-
m_PixelNumber(41616),
23+
m_CaptureWidth(-1),
24+
m_CaptureHeight(-1),
25+
m_PixelNumber(-1),
2626
m_RGBImageWidth(0),
2727
m_RGBImageHeight(0),
2828
m_RGBPixelNumber(0),
@@ -33,11 +33,7 @@ ToFImageGrabber::ToFImageGrabber():
3333
m_AmplitudeArray(NULL),
3434
m_SourceDataArray(NULL),
3535
m_RgbDataArray(NULL),
36-
m_DeviceObserverTag(),
37-
m_DistanceImageInitialized(false),
38-
m_IntensityImageInitialized(false),
39-
m_AmplitudeImageInitialized(false),
40-
m_RGBImageInitialized(false)
36+
m_DeviceObserverTag()
4137
{
4238
// Create the output. We use static_cast<> here because we know the default
4339
// output must be of type TOutputImage
@@ -68,70 +64,42 @@ ToFImageGrabber::~ToFImageGrabber()
6864
void ToFImageGrabber::GenerateData()
6965
{
7066
int requiredImageSequence = 0;
71-
unsigned int dimensions[3];
72-
dimensions[0] = this->m_ToFCameraDevice->GetCaptureWidth();
73-
dimensions[1] = this->m_ToFCameraDevice->GetCaptureHeight();
74-
dimensions[2] = 1;
75-
mitk::PixelType FloatType = MakeScalarPixelType<float>();
7667
// acquire new image data
7768
this->m_ToFCameraDevice->GetAllImages(this->m_DistanceArray, this->m_AmplitudeArray, this->m_IntensityArray, this->m_SourceDataArray,
7869
requiredImageSequence, this->m_ImageSequence, this->m_RgbDataArray );
7970

80-
mitk::Image::Pointer distanceImage = this->GetOutput();
81-
if (!m_DistanceImageInitialized)
71+
mitk::Image::Pointer distanceImage = this->GetOutput(0);
72+
if (m_DistanceArray)
8273
{
83-
distanceImage->ReleaseData();
84-
distanceImage->Initialize(FloatType, 3, dimensions, 1);
85-
m_DistanceImageInitialized = true;
74+
distanceImage->SetSlice(this->m_DistanceArray, 0, 0, 0);
8675
}
87-
mitk::Image::Pointer amplitudeImage = this->GetOutput(1);
88-
if (!m_AmplitudeImageInitialized)
76+
77+
bool hasAmplitudeImage = false;
78+
m_ToFCameraDevice->GetBoolProperty("HasAmplitudeImage", hasAmplitudeImage);
79+
if((hasAmplitudeImage) && (m_AmplitudeArray))
8980
{
90-
amplitudeImage->ReleaseData();
91-
amplitudeImage->Initialize(FloatType, 3, dimensions, 1);
92-
m_AmplitudeImageInitialized = true;
81+
mitk::Image::Pointer amplitudeImage = this->GetOutput(1);
82+
amplitudeImage->SetSlice(this->m_AmplitudeArray, 0, 0, 0);
9383
}
94-
mitk::Image::Pointer intensityImage = this->GetOutput(2);
95-
if (!m_IntensityImageInitialized)
84+
85+
bool hasIntensityImage = false;
86+
m_ToFCameraDevice->GetBoolProperty("HasIntensityImage", hasIntensityImage);
87+
if((hasIntensityImage) && (m_IntensityArray))
9688
{
97-
intensityImage->ReleaseData();
98-
intensityImage->Initialize(FloatType, 3, dimensions, 1);
99-
m_IntensityImageInitialized = true;
89+
mitk::Image::Pointer intensityImage = this->GetOutput(2);
90+
intensityImage->SetSlice(this->m_IntensityArray, 0, 0, 0);
10091
}
10192

10293
bool hasRGBImage = false;
10394
m_ToFCameraDevice->GetBoolProperty("HasRGBImage", hasRGBImage);
10495
if( hasRGBImage )
10596
{
106-
unsigned int rgbDimension[3];
107-
rgbDimension[0] = this->m_ToFCameraDevice->GetRGBCaptureWidth();
108-
rgbDimension[1] = this->m_ToFCameraDevice->GetRGBCaptureHeight();
109-
rgbDimension[2] = 1 ;
11097
mitk::Image::Pointer rgbImage = this->GetOutput(3);
111-
if (!m_RGBImageInitialized)
112-
{
113-
rgbImage->ReleaseData();
114-
rgbImage->Initialize(mitk::PixelType(MakePixelType<unsigned char, itk::RGBPixel<unsigned char>, 3>()), 3, rgbDimension,1);
115-
m_RGBImageInitialized = true;
116-
}
11798
if (m_RgbDataArray)
11899
{
119100
rgbImage->SetSlice(this->m_RgbDataArray, 0, 0, 0);
120101
}
121102
}
122-
123-
if (m_DistanceArray)
124-
{
125-
distanceImage->SetSlice(this->m_DistanceArray, 0, 0, 0);
126-
}
127-
if (m_AmplitudeArray)
128-
{
129-
amplitudeImage->SetSlice(this->m_AmplitudeArray, 0, 0, 0);
130-
}
131-
if (m_IntensityArray)
132-
{
133-
intensityImage->SetSlice(this->m_IntensityArray, 0, 0, 0);
134-
}
135103
}
136104

137105
bool ToFImageGrabber::ConnectCamera()
@@ -149,19 +117,14 @@ bool ToFImageGrabber::ConnectCamera()
149117

150118
this->m_SourceDataSize = m_ToFCameraDevice->GetSourceDataSize();
151119
this->AllocateImageArrays();
120+
this->InitializeImages();
152121
}
153122
return ok;
154123
}
155124

156125
bool ToFImageGrabber::DisconnectCamera()
157126
{
158-
bool success = m_ToFCameraDevice->DisconnectCamera();
159-
// reset initialized flag of outputs to allow reinitializing when using new device
160-
m_DistanceImageInitialized = false;
161-
m_IntensityImageInitialized = false;
162-
m_AmplitudeImageInitialized = false;
163-
m_RGBImageInitialized = false;
164-
return success;
127+
return m_ToFCameraDevice->DisconnectCamera();
165128
}
166129

167130
void ToFImageGrabber::StartCamera()
@@ -358,4 +321,47 @@ void ToFImageGrabber::AllocateImageArrays()
358321
m_SourceDataArray = new char[m_SourceDataSize];
359322
m_RgbDataArray = new unsigned char[m_RGBPixelNumber*3];
360323
}
324+
325+
void ToFImageGrabber::InitializeImages()
326+
{
327+
unsigned int dimensions[3];
328+
dimensions[0] = this->m_ToFCameraDevice->GetCaptureWidth();
329+
dimensions[1] = this->m_ToFCameraDevice->GetCaptureHeight();
330+
dimensions[2] = 1;
331+
mitk::PixelType FloatType = MakeScalarPixelType<float>();
332+
mitk::Image::Pointer distanceImage = this->GetOutput();
333+
distanceImage->ReleaseData();
334+
distanceImage->Initialize(FloatType, 3, dimensions, 1);
335+
336+
bool hasAmplitudeImage = false;
337+
m_ToFCameraDevice->GetBoolProperty("HasAmplitudeImage", hasAmplitudeImage);
338+
if(hasAmplitudeImage)
339+
{
340+
mitk::Image::Pointer amplitudeImage = this->GetOutput(1);
341+
amplitudeImage->ReleaseData();
342+
amplitudeImage->Initialize(FloatType, 3, dimensions, 1);
343+
}
344+
345+
bool hasIntensityImage = false;
346+
m_ToFCameraDevice->GetBoolProperty("HasIntensityImage", hasIntensityImage);
347+
if(hasIntensityImage)
348+
{
349+
mitk::Image::Pointer intensityImage = this->GetOutput(2);
350+
intensityImage->ReleaseData();
351+
intensityImage->Initialize(FloatType, 3, dimensions, 1);
352+
}
353+
354+
bool hasRGBImage = false;
355+
m_ToFCameraDevice->GetBoolProperty("HasRGBImage", hasRGBImage);
356+
if(hasRGBImage)
357+
{
358+
unsigned int rgbDimension[3];
359+
rgbDimension[0] = this->m_ToFCameraDevice->GetRGBCaptureWidth();
360+
rgbDimension[1] = this->m_ToFCameraDevice->GetRGBCaptureHeight();
361+
rgbDimension[2] = 1 ;
362+
mitk::Image::Pointer rgbImage = this->GetOutput(3);
363+
rgbImage->ReleaseData();
364+
rgbImage->Initialize(mitk::PixelType(MakePixelType<unsigned char, itk::RGBPixel<unsigned char>, 3>()), 3, rgbDimension,1);
365+
}
366+
}
361367
}

Modules/ToFHardware/mitkToFImageGrabber.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,11 @@ namespace mitk
171171
*/
172172
virtual void AllocateImageArrays();
173173

174+
/**
175+
* @brief InitializeImages Initialze the geometries of the images according to the device properties.
176+
*/
177+
void InitializeImages();
178+
174179
ToFCameraDevice::Pointer m_ToFCameraDevice; ///< Device allowing access to ToF image data
175180
int m_CaptureWidth; ///< Width of the captured ToF image
176181
int m_CaptureHeight; ///< Height of the captured ToF image
@@ -186,10 +191,6 @@ namespace mitk
186191
char* m_SourceDataArray;///< member holding the current source data array
187192
unsigned char* m_RgbDataArray; ///< member holding the current rgb data array
188193
unsigned long m_DeviceObserverTag; ///< tag of the observer for the ToFCameraDevice
189-
bool m_DistanceImageInitialized; ///< flag indicating whether the distance image is initialized or not
190-
bool m_IntensityImageInitialized; ///< flag indicating whether the intensity image is initialized or not
191-
bool m_AmplitudeImageInitialized; ///< flag indicating whether the amplitude image is initialized or not
192-
bool m_RGBImageInitialized; ///< flag indicating whether the RGB image is initialized or not
193194
ToFImageGrabber();
194195

195196
~ToFImageGrabber();

Modules/ToFUI/Qmitk/QmitkToFConnectionWidget.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ void QmitkToFConnectionWidget::OnConnectCamera()
150150
{
151151
MITK_INFO<< "Kinect is connected here";
152152
//If the particular property is selected, the suitable data-node will be generated
153-
this->m_ToFImageGrabber->SetBoolProperty("RGB", m_Controls->m_KinectParameterWidget->IsAcquisitionModeRGB());//--------------------------------------------------------
153+
this->m_ToFImageGrabber->SetBoolProperty("RGB", m_Controls->m_KinectParameterWidget->IsAcquisitionModeRGB());
154154
this->m_ToFImageGrabber->SetBoolProperty("IR", m_Controls->m_KinectParameterWidget->IsAcquisitionModeIR());
155155
}
156156

Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,11 @@ void QmitkToFUtilView::OnToFCameraConnected()
206206
m_Controls->m_ToFCompositeFilterWidget->SetDataStorage(this->GetDataStorage());
207207
}
208208

209-
// initialize measurement widget
210-
m_Controls->m_ToFMeasurementWidget->InitializeWidget(this->GetRenderWindowPart()->GetQmitkRenderWindows(),this->GetDataStorage(), this->m_ToFDistanceImageToSurfaceFilter->GetCameraIntrinsics());
209+
if ( this->GetRenderWindowPart() )
210+
// initialize measurement widget
211+
m_Controls->m_ToFMeasurementWidget->InitializeWidget(this->GetRenderWindowPart()->GetQmitkRenderWindows(),this->GetDataStorage(), this->m_ToFDistanceImageToSurfaceFilter->GetCameraIntrinsics());
212+
else
213+
MITK_WARN << "No StdMultiWidget available!!! MeasurementWidget will not work.";
211214

212215
this->m_RealTimeClock = mitk::RealTimeClock::New();
213216
this->m_2DTimeBefore = this->m_RealTimeClock->GetCurrentStamp();
@@ -245,6 +248,16 @@ void QmitkToFUtilView::ResetGUIToDefault()
245248

246249
void QmitkToFUtilView::OnToFCameraDisconnected()
247250
{
251+
this->GetDataStorage()->Remove(m_DistanceImageNode);
252+
if(m_RGBImageNode)
253+
this->GetDataStorage()->Remove(m_RGBImageNode);
254+
if(m_AmplitudeImageNode)
255+
this->GetDataStorage()->Remove(m_AmplitudeImageNode);
256+
if(m_IntensityImageNode)
257+
this->GetDataStorage()->Remove(m_IntensityImageNode);
258+
if(m_SurfaceNode)
259+
this->GetDataStorage()->Remove(m_SurfaceNode);
260+
248261
m_Controls->m_ToFRecorderWidget->OnStop();
249262
m_Controls->m_ToFRecorderWidget->setEnabled(false);
250263
m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false);
@@ -300,18 +313,6 @@ void QmitkToFUtilView::OnToFCameraStarted()
300313
// initial update of image grabber
301314
this->m_ToFImageGrabber->Update();
302315

303-
this->m_ToFCompositeFilter->SetInput(0,this->m_ToFImageGrabber->GetOutput(0));
304-
this->m_ToFCompositeFilter->SetInput(1,this->m_ToFImageGrabber->GetOutput(1));
305-
this->m_ToFCompositeFilter->SetInput(2,this->m_ToFImageGrabber->GetOutput(2));
306-
307-
// initial update of composite filter
308-
this->m_ToFCompositeFilter->Update();
309-
this->m_MitkDistanceImage = m_ToFCompositeFilter->GetOutput();
310-
this->m_DistanceImageNode = ReplaceNodeData("Distance image",m_MitkDistanceImage);
311-
312-
std::string rgbFileName;
313-
m_ToFImageGrabber->GetCameraDevice()->GetStringProperty("RGBImageFileName",rgbFileName);
314-
315316
bool hasRGBImage = false;
316317
m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasRGBImage",hasRGBImage);
317318

@@ -321,6 +322,19 @@ void QmitkToFUtilView::OnToFCameraStarted()
321322
bool hasAmplitudeImage = false;
322323
m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasAmplitudeImage",hasAmplitudeImage);
323324

325+
this->m_ToFCompositeFilter->SetInput(0,this->m_ToFImageGrabber->GetOutput(0));
326+
if(hasAmplitudeImage)
327+
this->m_ToFCompositeFilter->SetInput(1,this->m_ToFImageGrabber->GetOutput(1));
328+
if(hasIntensityImage)
329+
this->m_ToFCompositeFilter->SetInput(2,this->m_ToFImageGrabber->GetOutput(2));
330+
331+
// initial update of composite filter
332+
this->m_ToFCompositeFilter->Update();
333+
this->m_MitkDistanceImage = m_ToFCompositeFilter->GetOutput();
334+
this->m_DistanceImageNode = ReplaceNodeData("Distance image",m_MitkDistanceImage);
335+
336+
std::string rgbFileName;
337+
m_ToFImageGrabber->GetCameraDevice()->GetStringProperty("RGBImageFileName",rgbFileName);
324338

325339
if(hasRGBImage || (rgbFileName!=""))
326340
{

0 commit comments

Comments
 (0)