none
Is the maximum depth really 4m? RRS feed

  • 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
    Tuesday, November 8, 2011 8:55 PM

All replies

  • The workaround would be the unofficial SDK; that will only get you about one more meter, though, depending on how accurate you want your data. 4 meters is a little on the conservative side, but not by much.
    Wednesday, November 9, 2011 1:25 AM
  • Yes, the data is clipped at 4m due to increasing error rate beyond that, especially under non-ideal 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).
    Thursday, November 10, 2011 1:37 AM
  • 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.
    Tuesday, November 15, 2011 4:07 PM
  • 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.
    Tuesday, November 15, 2011 4:49 PM
  • But there is a big difference between 12 and 13 bits. The difference has to be either the accuracy will be 0.5 mm or the range is 8 meters?
    Tuesday, November 15, 2011 5:08 PM
  • 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 800-4000, 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
    Wednesday, November 16, 2011 12:41 AM
  • OK, Thanks for clarifying that.
    Wednesday, November 16, 2011 5:56 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
    Wednesday, December 28, 2011 1:02 PM