Kinect Depth vs. Actual Distance

The depth array that comes in from the Kinect has a precision of up to 11 bits or 2^{11}=2048 different values. The Kinect is just a sensor, or measurement tool, and every scientist wants to know the limitations of their equipment. So the obvious questions are, what is the accuracy of these measurements? What do these values represent in physical space?

I conducted a very simple experiment to answer these questions. I placed the Kinect on the floor and also a long piece of tape orthogonal to the Kinect’s field of view. I then marked measurements along the piece of tape from 1ft – 10ft from the sensor. I placed a cardboard box in the center of the Kinect’s field of view for each hash, from 2ft all the way back to 10ft (1ft was within the minimum triangulation distance for Primesense’s PS1080-A2 SoC image processor). The experiment looked like this.

Experiment Layout.

For each measurement I saved the rgb image, a color mapped depth image, and a text file containing the raw values from the depth array of the ROI containing the box. I used the color mapped depth image to reference my measurements and give me a little more confidence in their accuracy. The Kinect’s depth measurements within the ROI were all very similar, the maximum deviation from the mean is 2 for all values along the planar surface of the box. I averaged those values to come up with my measurement for each distance.

My findings tell me that the Kinect’s depth measurement as a function of distance is not linear… It appears to follow a logarithmic scaling. This means that the further you get from the sensor the less detailed depth information you’ll get about objects.

There is no interpolation or further calculations done on the graph above, it is simply a line graph. The actual results are shown below.

2 feet 504
3 feet 706
4 feet 803
5 feet 859
6 feet 890
7 feet 931
8 feet 946
9 feet 963
10 feet 976

One sees the precision is significantly reduced with distance. The depth image shows the slow decline in color gradient the further away things get. Below, you can see the color mapped depth image and the rgb image as seen by the Kinect at the 10 ft hash. One sees that the box has roughly the same color as the majority of the objects at the same depth or further. This makes it difficult to discern meaningful information from objects at a depth of 10 feet or more.

Color Mapped Depth Image at 10ft from sensor


RGB Image at 10ft From Sensor

I shared these results with my professor Dr. Xiuwen Liu at Florida State University. Below are the slides he made to share this information with his Computer Vision course CAP5415.

Conclusion

For my research I plan to register point clouds from multiple Kinects. If I take the findings above as true, it means that I will need to consider the relative depth of objects from each sensor when using many Kinects to reduce noise in the measurements.

*UPDATE* Playing with the Kinect has always been a hobby. My research has taken me into a very different field, and I am not savvy with the latest and greatest Kinect ideas/libraries/tools. I would not consider myself an authoritative figure on Kinect matters.

This entry was posted in 3D Scene Reconstruction. Bookmark the permalink.

63 Responses to Kinect Depth vs. Actual Distance

  1. Sagar says:

    Hi Raghav,
    For kinect with libfreenect…follow the following post…It worked well
    http://mitchtech.net/ubuntu-openkinect/

  2. Sam says:

    Thank you so much for your dedication. Your post helps my project and saves big time. Keep up the good work. May God bless you.

  3. Nathan Crock says:

    My pleasure. I’m glad someone appreciates it. Good luck!

  4. Pingback: Progress so far: Aesthetics & Programming | James Quilty

  5. saleh says:

    hi,
    I am using kinect to mesure distance between head point and kinect sensor,
    after i get these distances x,y and z, i use them to calculate pitch, roll and yaw
    but how i can check these values are correct, because yaw, pitch and roll depends on x,y and z,
    if x,y and z are correct then yaw, pitch and roll are correct
    how can i check x,y and z values ?

  6. Nima says:

    Very interesting analysis! Nathan, is there any way to relate the depth information from Kinect to actual distance in cm?

  7. Vikas says:

    Thanks for detailed work

  8. Ed says:

    Awesome! Just what I needed :)

  9. dolly says:

    thanks for ur guidance, my project is to locate the ball n then hit that ball, I need ur guidance to accomplish this task I will be thankful. GOD bless u

  10. Nidhi says:

    Hi Nathan,
    (Urgent help required)

    I want to ask a simple question. Kinect gives inverse images compared to other digital cameras.

    Example, if an object is present in a scene at left position, kinect shows this object at right position in captured image.
    Please tell me how to correct it or how to capture images and avoid it.

    Thanks in advance :)

  11. Navanee says:

    Hi Nathan,
    Thank you so much for your post. it really helps me lot with my project.. i am wondering
    how you got the distance values from the depth image?.. did you used any software or sdk.. i request you please help me with my question.. Thanks for your help.. my email id is navaneedonz@gmail.com..

  12. Chen jiaju says:

    It’s of great help for my project working on Kinect based robot hand. Thx

  13. Raviteja Chivukula says:

    Hi Nathan,

    Thank you very much for publishing this work. It was very helpful. I was working on getting accurate depth images using Kinect and I got a feeling that the readings were not really linear. I then did a quick google search and your work came up. It saved a lot of time. Also, I wanted to ask if you had a more dense data of ‘Actual Z vs. Measured Z’ (in an excel file or something). Otherwise, I would need to pick the visual data from the picture you posted and need to interpolate it. :)

    Thanks
    Raviteja Chivukula

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>