@@ -20,9 +20,9 @@ namespace mitk
2020{
2121ToFImageGrabber::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()
6864void 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
137105bool 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
156125bool 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
167130void 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}
0 commit comments