/*
* Header (only once at the beginning of each file):
*/
uint32 identifier; // Is always 0x511477 (SMART).
uint8 numCameras; // Is always 3.
float[16] matrix0; // Rigid transformation matrix of kinect 0 (derived by our grid registration prodecure).
float[16] matrix1; // Rigid transformation matrix of kinect 1 (derived by our grid registration procedure).
float[16] matrix2; // Rigid transformation matrix of kinect 2 (initial by our grid registration procedure).
// These matrices can be slightly different in different recordings.
float[9] params0; // Intrinsic camera parameters of kinect 0 (starting cx, cy, fx, fy, ..., see libfreenect2).
float[9] params1; // Intrinsic camera parameters of kinect 1 (starting cx, cy, fx, fy, ..., see libfreenect2).
float[9] params2; // Intrinsic camera parameters of kinect 2 (starting cx, cy, fx, fy, ..., see libfreenect2).
/*
* For every image (follows directly after the header and is repeated until the file ends):
*
* Note:
* When exporting the original recordings to these binary files, every 30th frame of camera 0 was used. In addition,
* the frames from camera 1 and camera 2 that was closest in time to that of camera 0 were exported too. At the beginning
* of the recording, the first few frames of camera 1 and camera 2 may repeat, since the recordings were started slightly
* delayed.
*
* Consecutive images are taken evenly alternating from camera 0, camera 1 and camera 2. Starting with the first image of
* the file, it can be assumed that three images in a row are one image each from camera 0, camera 1 and camera 2 and usually
* have a maximum distance of 33ms in time.
*
* The given depth image has already been undistorted using the registration class in libfreenect2
* (see https://openkinect.github.io/libfreenect2/0.1/classlibfreenect2_1_1Registration.html, apply-method, parameter:
* Frame *undistorted). This means that the image can be easily transformed into a 3D point cloud as the getPointXYZRGB
* method of the same class does.
*/
uint8 cameraID; // 0, 1 or 2.
float time; // Time in seconds since the first kinect starts recording.
uint32 imageWidth; // Always 512
uint32 imageHeight; // Always 424
uint16[217088] depthImage; // Depth image (ordered row wise), where each pixel contains a z-value in mm.