15#ifdef MITK_USE_TOF_PMDCAMBOARD
19#ifdef MITK_USE_TOF_PMDCAMCUBE
23#ifdef MITK_USE_TOF_PMDO3
27#include "itkMultiThreader.h"
28#include <itksys/SystemTools.hxx>
33 m_SourceDataBuffer(nullptr), m_SourceDataArray(nullptr), m_ShortSourceData(nullptr),
34 m_OriginControllerWidth(0), m_OriginControllerHeight(0)
92 this->m_FreePos = (this->m_FreePos+1) % this->
m_BufferSize;
101 this->m_ThreadID = this->m_MultiThreader->SpawnThread(this->
Acquire,
this);
103 itksys::SystemTools::Delay(100);
107 MITK_INFO<<
"Camera not connected";
117 itksys::SystemTools::Delay(100);
118 if (m_MultiThreader.IsNotNull())
120 m_MultiThreader->TerminateThread(m_ThreadID);
123 itksys::SystemTools::Delay(10);
145 struct itk::MultiThreader::ThreadInfoStruct * pInfo = (
struct itk::MultiThreader::ThreadInfoStruct*)pInfoStruct;
146 if (pInfo ==
nullptr)
148 return ITK_THREAD_RETURN_VALUE;
150 if (pInfo->UserData ==
nullptr)
152 return ITK_THREAD_RETURN_VALUE;
155 if (toFCameraDevice!=
nullptr)
159 t1 = realTimeClock->GetCurrentStamp();
161 bool overflow =
false;
162 bool printStatus =
false;
170 toFCameraDevice->Modified();
172 vtkShortArray* channelData = vtkShortArray::New();
182 toFCameraDevice->
m_Controller->GetModulationFrequency(),
183 toFCameraDevice->GetChannelSize());
204 channelData->Delete();
214 t2 = realTimeClock->GetCurrentStamp() - t1;
215 MITK_INFO <<
" Framerate (fps): " << n / (t2/1000) <<
" Sequence: " << toFCameraDevice->
m_ImageSequence;
216 t1 = realTimeClock->GetCurrentStamp();
222 return ITK_THREAD_RETURN_VALUE;
234 MITK_WARN(
"ToF") <<
"Warning: Data can only be acquired if camera is active.";
247 MITK_WARN(
"ToF") <<
"Warning: Data can only be acquired if camera is active.";
260 MITK_WARN(
"ToF") <<
"Warning: Data can only be acquired if camera is active.";
265 int requiredImageSequence,
int& capturedImageSequence,
unsigned char* rgbDataArray)
273 MITK_INFO <<
"Buffer empty!! ";
280 if ((requiredImageSequence < 0) || (requiredImageSequence > this->
m_ImageSequence))
295 capturedImageSequence = requiredImageSequence;
306 MITK_WARN(
"ToF") <<
"Warning: Data can only be acquired if camera is active.";
312 int captureWidth = this->GetCaptureWidth();
313 int captureHeight = this->GetCaptureHeight();
319 if(xAxis == 1 && yAxis != 1)
321 for (
int i=0; i<captureHeight; i++)
323 for (
int j=0; j<captureWidth; j++)
325 for (
int k=0; k<dimension; k++)
327 flippedData[i*captureWidth*dimension+j*dimension+k] = imageData[((captureHeight-1-i)*captureWidth*dimension)+((j)*dimension+k)];
336 if(xAxis!=1 && yAxis == 1)
338 for (
int i=0; i<captureHeight; i++)
340 for (
int j=0; j<captureWidth; j++)
342 for (
int k=0; k<dimension; k++)
344 flippedData[i*captureWidth*dimension+j*dimension+k] = imageData[(i+1)*captureWidth*dimension-1-j*dimension-k];
354 else if(xAxis == 1 && yAxis == 1)
356 for (
int i=0; i<captureHeight; i++)
358 for (
int j=0; j<captureWidth; j++)
360 for (
int k=0; k<dimension; k++)
362 flippedData[i*captureWidth*dimension+j*dimension+k] = imageData[((captureHeight-i)*(captureWidth)*dimension-1)-(j*dimension-k)];
378 if (
strcmp(propertyKey,
"ModulationFrequency") == 0)
380 int modulationFrequency = 0;
382 m_Controller->SetModulationFrequency(modulationFrequency);
384 else if (
strcmp(propertyKey,
"IntegrationTime") == 0)
386 int integrationTime = 0;
static Pointer New(void)
instanciates a new, operating-system dependant, instance of mitk::RealTimeClock.
int m_ImageSequence
counter for acquired images
PropertyList::Pointer m_PropertyList
a list of the corresponding properties
virtual void SetProperty(const char *propertyKey, BaseProperty *propertyValue)
set a BaseProperty property in the property list
int m_CaptureWidth
width of the range image (x dimension)
int m_FreePos
current position in the buffer which will be filled with data acquired from the hardware
int m_CurrentPos
current position in the buffer which will be retrieved by the Get methods
int m_PixelNumber
number of pixels in the range image (m_CaptureWidth*m_CaptureHeight)
bool GetIntProperty(const char *propertyKey, int &integer)
get an int from the property list
bool m_CameraConnected
flag indicating if the camera is successfully connected or not. Caution: thread safe access only!
int m_CaptureHeight
height of the range image (y dimension)
bool m_CameraActive
flag indicating if the camera is currently active or not. Caution: thread safe access only!
float * m_AmplitudeArray
float array holding the amplitude image
int m_BufferSize
buffer size of the image buffer needed for loss-less acquisition of range data
std::mutex m_CameraActiveMutex
mutex for the cameraActive flag
std::mutex m_ImageMutex
mutex for images provided by the range camera
float * m_IntensityArray
float array holding the intensity image
int m_SourceDataSize
size of the PMD source data
float * m_DistanceArray
float array holding the distance image
int m_MaxBufferSize
maximal buffer size needed for initialization of data arrays. Default value is 100.
Interface for all representations of PMD ToF devices. ToFCameraPMDDevice internally holds an instance...
ToFCameraPMDController::Pointer m_Controller
corresponding CameraController
virtual void AllocatePixelArrays()
method for allocating memory for pixel arrays m_IntensityArray, m_DistanceArray and m_AmplitudeArray
virtual void CleanupPixelArrays()
method for cleanup memory allocated for pixel arrays m_IntensityArray, m_DistanceArray and m_Amplitud...
virtual bool IsCameraActive()
returns whether the camera is currently active or not
virtual void CleanUpSourceData()
method for cleaning up memory allocated for m_SourceDataArray and m_SourceDataBuffer
void XYAxisFlipImage(float *imageData, float *&flippedData, int xAxis, int yAxis, int dimension=1)
gets the image data and flips it according to user needs Caution! The user is responsible for allocat...
short * m_ShortSourceData
array holding the current PMD raw data
virtual bool DisconnectCamera()
closes the connection to the camera
unsigned int m_OriginControllerWidth
holds the original controller width
virtual void GetAllImages(float *distanceArray, float *amplitudeArray, float *intensityArray, char *sourceDataArray, int requiredImageSequence, int &capturedImageSequence, unsigned char *rgbDataArray=nullptr)
gets the 3 images (distance, amplitude, intensity) from the ToF camera. Caution! The user is responsi...
char ** m_SourceDataBuffer
buffer holding the last acquired images
static ITK_THREAD_RETURN_TYPE Acquire(void *pInfoStruct)
Thread method continuously acquiring images from the ToF hardware.
virtual void GetAmplitudes(float *amplitudeArray, int &imageSequence)
gets the amplitude data from the ToF camera as the strength of the active illumination of every pixel...
ThreadedToFRawDataReconstruction::Pointer m_RawDataSource
virtual void AllocateSourceData()
method for allocating m_SourceDataArray and m_SourceDataBuffer
virtual void GetChannelSourceData(short *, vtkShortArray *)
virtual void SetProperty(const char *propertyKey, BaseProperty *propertyValue)
set a BaseProperty
virtual void GetIntensities(float *intensityArray, int &imageSequence)
gets the intensity data from the ToF camera as a greyscale image. Caution! The user is responsible fo...
virtual void StopCamera()
stops the continuous updating of the camera
char * m_SourceDataArray
array holding the current PMD source data
virtual void UpdateCamera()
updates the camera for image acquisition
virtual void GetDistances(float *distanceArray, int &imageSequence)
gets the distance data from the ToF camera measuring the distance between the camera and the differen...
ToFCameraPMDRawDataDevice()
virtual bool OnConnectCamera()
opens a connection to the ToF camera
~ToFCameraPMDRawDataDevice()
virtual void StartCamera()
starts the continuous updating of the camera. A separate thread updates the source data,...
unsigned int m_OriginControllerHeight
holds the original controller height
ToFCameraPMDController::Pointer GetController()
returns the corresponding camera controller
int strcmp(const String &s1, const String &s2)