Smoothing Depth Data

By
Dave
Project
Published
25 Nov 2012 17:38
Last Modified
13 Jan 2013 17:14

The Kinect for Windows SDK exposes depth data as an array of 16-bit values, with the least-significant 3-bits used for player index.1 There are therefore 2^13 = 8192 values available to report depth within the supported range. A sample depth image is shown below in Figure 1. Note that the shape is a result of the sensor being angled downwards, and that black areas correspond to those pixels where no depth information was reported by the sensor.

Kinect Room

Figure 1. Kinect depth image.

If this image is rotated and viewed from above, as shown below in Figure 2, discrete depth bands become visible.

Kinect Room

Figure 2. Kinect depth image, rotated to highlight depth-banding.

The intervals between depth values for another sample image are plotted against depth in Figure 3 below. Note that the sample image used did not contain any data around 1.5m in depth, so there are some jumps in the data at this point. The graph shows how the depth intervals increase in size with distance from the sensor, from around a 2mm gap at 1m depth to around a 45mm gap at 4m depth.

Depth Step by Depth

Figure 3. Depth step by depth.

My initial attempt at a smoothing algorithm is shown below in Figure 4. This approach looks for horizontal and vertical lines of equal depth, and interpolates data between the discrete depth bands. Since these depth bands increase in size further away from the camera, smoothing is more effective for larger depth values.

Kinect Room Kinect Room

Figure 4. Raw and smoothed depth image.

1 As of version 1.6, the Kinect for Windows SDK exposes extended depth information.

Comments

By
Junaid
14 Mar 2013 15:41
Hey, Nice website.

I am new to kinect, and want to map the depth to 3D point cloud. How do i proceed.

And one more thing, i dont have kinect sensor at present, i am about to buy it, so can you please instruct me some kinect data center on the web which can
provide me with depth image samples in robotic applications.

thanks,
cheers,
Junaid
By
Dave
15 Mar 2013 23:13
Hi Junaid - great to hear you're going to start playing with Kinect. If possible, get a Kinect for Windows sensor rather than an XBOX sensor. Download the SDK from http://www.microsoft.com/en-us/kinectforwindows/develop/overview.aspx and start having a look at the source code for the samples in the Developer Toolkit - there is a sample there on rendering point clouds. There are also a number of Open Source tools and frameworks if you'd rather use those. Have fun!
Dave

Add Comment

*
*
*
Captcha
*
*Required