Click here to Skip to main content
15,885,767 members
Articles / Programming Languages / C#
Tip/Trick

Kinect Version 2 Depth Frame to .mat File Exporter Tool

Rate me:
Please Sign up or sign in to vote.
5.00/5 (5 votes)
16 Sep 2014CPOL4 min read 112.3K   4.7K   5   42
Tool for extracting depth frames from Kinect v2 to .mat files, with point cloud generator script. Ready to use!

Introduction

The new Kinect v2 is awesome, however for people who are not coding experts, it can be hard to get the data of the Kinect into a workable setting, like MatLab. This tool is meant as a solution to solve the problem of getting depth data from the Kinect SDK into MatLab. And no external libraries are needed! (except for the ones needed for Windows Kinect and Windows)

Furthermore, a class is also provided, which can be used to export any ushort (or uint16) array to a loadable .mat file.

Background

I tried a few libraries (including csmatio and matio) for extracting the depth frames to .mat files. None of them seemed to work and therefore I decided to make my own .mat file writer. It's not meant to be an example of good coding, but rather a usable tool.

Main Tool

The main tool is called "KinectMLConnect", which is both found as source code and .exe, ready to be built in VS (tested in VS 2013), or run directly in Windows.
(The .exe is located in: "KinectMLConnect\KinectMLConnect\KinectMLConnect\bin\Release".)
The tool simply listens for an active sensor (or for the Kinect studio sensor emulator), grabs the stream and exports each frame as a .mat file.

The interface is quite simple and self explanatory, and is shown here:

Image 1

There are two options, extracting IR frames or depth frames. Due to a heavy amount of bit reordering in the program, I have chosen not to make it available to get both at the same time. This would probably cause the program to freeze and/or break.

By default, the frames are exported to "\%My documents dir%\Kinect to Matlab\TYPEframeXX.mat". The tool will overwrite previous frames, so make sure to move them to another folder! TYPE refers to Depth or IR.

Intrinsic parameters of the depth camera are saved to the file "Intrinsic parameters.txt" in the Kinect to Matlab folder. NOTE: Some problems have been reported on this, however, I have not been able to recreate the problems, so it is hard for me to debug them.

The frame timings are saved in a .mat file called "FrameTimings.mat" in the Kinect to Matlab folder. This file is set to a fixed size of 10000 elements giving roughly 6 hours of recording. If there is overflow, the world will end.

REMARK: The matrix extracted from this code is rotated 90 degrees, hence in matlab use:

rot90(depthmat,-1) 

And it should be right like this:

Image 2

MATWriter Class

Included is also a class file, for the MATWriter class, which is the one used for the actual export of the frames. Its constructor (and only callable code) is given here:

C#
public MATWriter(string name, string filepath, ushort[] data, int height, int width)

Hopefully it is very clear, that it is kept very simple, so that it is easy to use.

A new input string, 'name', is added to the function. This sets the name of the variable in MatLab. Since the .mat file writing is troublesome, this variable will be concatenated to 8 characters. Hence if you write "rainfall2008" only "rainfall" will be shown as the variable name in MatLab.

It cannot be used directly to export the RGB channels from the kinect, but with some Ninja tricks, it could probably be used for this purpose. (e.g. run matwriter for each channel in the RGB image)

DepthToXYZ

To make it even more simple, I've added a matlab script, which should be placed in the "\%My documents dir%\Kinect to Matlab" folder. From here, it will run all the frames through and calculate the cartesian coordinates of each point and save the coordinates in the variables, 'wx', 'wy' and 'wz' (with 'w' signifying 'world').
At the end of the file, there is a small code snippet to display a frame with scatter3 plotting, like this:

Image 3

Points of Interest

If anyone would like to edit the MATwriter or dig into how a .mat file is created, see this pdf from MathWorks.

Also, I would like to refer to Vangos Pterneas, whose code I was inspired by.

History

  • 10/19/2014: Updated main tool, included an option to choose between two types of extracted data, IR or Depth images.
  • 10/16/2014: Updated main tool to extract the timestamps, and save them in a .mat file, called FrameTimings.mat. Also, the MatWriter class is changed, so the name of the variable can be set as an input.
  • 9/17/2014: Updated main tool to extract the instrinsic parameters of the Kinect v2 camera, and save it to "Intrinsic parameters.txt". In addition, a small MatLab script is added, which converts the depth frames to Cartesian coordinates and displays the point cloud.
  • 9/16/2014: First upload, tool can export .mat files from Kinect v2 stream.

Feel free to contact me with any problems or questions.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Student
Denmark Denmark
I'm a student studying Electronics and IT, and currently doing my final year of the masters degree in Vision, Graphics and Interactive Systems, specializing in computer vision.

Comments and Discussions

 
Questiondisabling infrared emitter Pin
Member 129912343-May-17 7:20
Member 129912343-May-17 7:20 
GeneralWILL NOT BE UPDATED FURTHER Pin
SergentMT24-Feb-16 23:08
SergentMT24-Feb-16 23:08 
QuestionTracking an object and get it's XYZ cordinates Pin
Member 1234592523-Feb-16 1:54
Member 1234592523-Feb-16 1:54 
QuestionRGB and Depth matrix Pin
Member 1234592523-Feb-16 1:28
Member 1234592523-Feb-16 1:28 
QuestionProblems with recording of depth frames Pin
Member 1206500828-Jan-16 0:47
Member 1206500828-Jan-16 0:47 
QuestionCalculating cartesian coordinates Pin
joe kid15-Oct-15 12:11
joe kid15-Oct-15 12:11 
QuestionWhat are the requirements to use this software? Pin
Member 1205823014-Oct-15 6:40
Member 1205823014-Oct-15 6:40 
Questioncan't stop recording Pin
Member 1062054421-Sep-15 5:13
Member 1062054421-Sep-15 5:13 
AnswerRe: can't stop recording Pin
Member 1062054421-Sep-15 22:53
Member 1062054421-Sep-15 22:53 
QuestionDepthmat can't work Pin
Member 1185648312-Aug-15 17:32
Member 1185648312-Aug-15 17:32 
QuestionFrame per seconds. Pin
Member 1162060511-Jun-15 21:17
Member 1162060511-Jun-15 21:17 
AnswerRe: Frame per seconds. Pin
jeanmichel617-Jun-15 4:42
jeanmichel617-Jun-15 4:42 
QuestionMapping Color to Depth Image Pin
Member 1110713111-Jun-15 12:54
Member 1110713111-Jun-15 12:54 
QuestionCan't stop capture Pin
Member 117472487-Jun-15 18:40
Member 117472487-Jun-15 18:40 
QuestionFrametimings.mat Pin
Member 1172054626-May-15 9:26
Member 1172054626-May-15 9:26 
AnswerRe: Frametimings.mat Pin
Member 1172341228-May-15 5:23
Member 1172341228-May-15 5:23 
GeneralRe: Frametimings.mat Pin
jeanmichel617-Jun-15 4:48
jeanmichel617-Jun-15 4:48 
AnswerRe: Frametimings.mat Pin
Madera Madera23-Jun-15 0:51
Madera Madera23-Jun-15 0:51 
QuestionWorks perfect for Depth and IR!! RGB? Pin
Member 115031375-Mar-15 22:30
Member 115031375-Mar-15 22:30 
AnswerRe: Works perfect for Depth and IR!! RGB? Pin
SergentMT5-Mar-15 22:59
SergentMT5-Mar-15 22:59 
GeneralRe: Works perfect for Depth and IR!! RGB? Pin
Member 115031376-Mar-15 0:31
Member 115031376-Mar-15 0:31 
Thanks for the quick reply.

I know it would be really slow, but as I only want a RGB frame not a complete video I hope I could extract it.

As a said I am completely new in C++ so I don't even know where is the main program and if i have to "recompile" once a change something.
Hope you can look at it Smile | :)

Thanks!!

Alex
GeneralRe: Works perfect for Depth and IR!! RGB? Pin
SergentMT9-Mar-15 2:26
SergentMT9-Mar-15 2:26 
GeneralRe: Works perfect for Depth and IR!! RGB? Pin
Member 1234592523-Feb-16 1:35
Member 1234592523-Feb-16 1:35 
GeneralRe: Works perfect for Depth and IR!! RGB? Pin
SergentMT24-Feb-16 22:59
SergentMT24-Feb-16 22:59 
QuestionFile Exporter Tool for Kinect 1.8 ( for old kinect) Pin
Member 1130641523-Jan-15 3:46
Member 1130641523-Jan-15 3:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.