Asked by:
Is the maximum depth really 4m?
Question

Hi,
just wanted to ask if the maximum depth value that can be read from the sensor with this API is 4 m? By that I mean that is the maximum value clipped to 4 m due to increasing error rate or would it be possible to read values beyond 4 m? (looking for a workaround ;)
 Edited by Jussi Litja Tuesday, November 8, 2011 9:00 PM
All replies


Yes, the data is clipped at 4m due to increasing error rate beyond that, especially under nonideal light conditions. While we know that answer doesn't sit well with everyone, we are biasing towards reliability of data, which is the approach that is working well for Xbox developers (where the same 4m clipping is applied).

I think the hardware has a resolution of 16 bits but the depth output in the kinect SDK has resolutions of 12 and 13 bits so that’s
4095 millimetres for 12 bits and 8192 millimetres for 13 bits. It don’t make sense does it?.
That’s like 4 meters and 8 meters. 
It isn't an issue of the bits available, instead it is a function of how the depth camera works. It shines a pattern of IR light and detects the reflected pattern of the light off of different objects in the room, using that information to calculate how far they are. That process generates errors, and those errors start to get bigger once you move out of the "sweet spot" that the sensor is tuned for.


I see in the docs where this is confusing  thanks, we'll clarify.
The precision is 1mm, and in fact the precision is less than that in a lot of situations, more so with larger numbers. So switching to a 0.5mm resolution wouldn't help, given the hardware limitations. So the valid depth values are 8004000, which represents a distance in mm, which can all fit in 12 bits. That 13th bit should always be zero.
 Proposed as answer by bobheddle Friday, November 25, 2011 11:10 PM


It's just Microsoft being arrogant.
The hardware itself creates a depth map with a much wider range than 800mm to 4000mm. That depth map is not in mm, and it is not linear, and it has 11 bits of precision. The driver does a mathematical formula on it to convert it to mm and rounds it to an integer. Microsoft's (and ONLY Microsoft's) driver then deletes any depth greater than 4000mm and less than 800mm. And then Microsoft decided to declare the field to be 12 bits so they can't fix their stupid decision later.
"just wanted to ask if the maximum depth value that can be read from the sensor with this API is 4 m?"
Yes.
"By that I mean that is the maximum value clipped to 4 m due to increasing error rate or would it be possible to read values beyond 4 m?"
No it's clipped to 4 m because Microsoft didn't need those depths so they didn't let anyone else use them either. Yes it would be possible to read values beyond 4m (and before 0.8m).
"(looking for a workaround ;)"
Use anybody else's drivers and anyone else's SDK. CLNUI, OpenKinect, and OpenNI will all give unfiltered depths. But you will have to convert the depths to mm yourself if you use CLNUI or OpenKinect.
With the extra depth range allowed by other drivers, people have done all sorts of amazing things, like finger tracking.
 Proposed as answer by Carl Kenner Wednesday, December 28, 2011 1:03 PM