Supervisor: Chat Wacharamanotham
I'm a biology student at RWTH Aachen and did an internship, writing two Processing programs for Chat.
Their purpose is to record hands above the keyboard over several hours, save the data to the disk, and later analyzes it with background removal. In the default use case the Kinect camera is mounted above the desktop, looking at the keyboard from above.
Chat wants to get information about the airspace above the keyboard and where the hands move around. The software is highly specialized for that use case and can't be used otherwise without major changes.
Software: HeightMeasurementToolThis is a tool to measure the distance of the Kinect sesor to a surface. It takes the pixel in the center of the depth image and averages the depth data over 10 frames. The result is displayed in millimeters.
Software: KinectDepthRecorderThe KinectDepthRecorder is a tool to record depth data over several hours. Due to the fact that a single frame is 300KB in size, frames are processed in two steps and then saved to a text file.
The processing mechanism is specialized to record hands over a keyboard. Two parameters can be used to configure it:
SmallStepFrames -> This number of frames will be averaged in the first step.
BigStepFrames -> Sets how many SmallStepFrames are "maximized" to one frame that is saved to the disc.
where Maximized means -> a number of frames is taken and each pixel in the result frame equals the _smallest_ value of the corresponding pixels in the other frames. In the default use case the pixel highest above the ground has the smallest depth value!
Another feature of the recorder is to track for so called background frames. A background frame is a frame that differs from the previous frames by less than a certain value. This mechanism can be modified by two parameters too, if you have further questions feel free to contact me.
In the result text file there's a human readable header. Every Frame is saved into a single line. Upper case letters at the beginning of the line mark the kind of the frame (D=depth, B=background). The first comma seperated value in the line is a timestamp (milliseconds since start), followed by the pixels (each line, from left to right).
Software: KinectDepthPlayerThe KinectDepthPlayer can be used to play/view recorded depth data. There're plenty of features it provides:
- background removal
- single frame navigation
- heat mapping
- image processing
The background detection relies on the input data: the first character in a line specifies if it's a background (B) or depth (D) frame. In the parameters you can customize the background-averaging. Background averaging can helps to eliminate single background frames by allowing series of background frames for calculation only.
Optionally the background frame can be blurred, but I found that this actually reduces the image quality. Artifact removal (killing lonely pixels) is enabled by default.
With the Return/Enter key the automatic playback can be paused and resumed. With the Left/Right arrow key you can navigate between frames. (Deactivates automatic playback.)
The left part of the of the window always represents the current frame. In the right part of the window the currently used background frame is drawn.
In the ten rectangles on the left side of the window you can observe the median value of the highest 500 pixels in sets of 48 rows.