Search code examples
kinectkinect-sdk

Is the raw depth data from the Kinect 2 completely unfiltered?


As the title says, is the raw data really raw or does the Kinect apply some sort of filtering (median, bilateral etc.) to reduce the noise? I am comparing the data with other non consumer ToF cameras and it seems that the raw values from the Kinect 2 are pretty smooth.


Solution

  • No, some filters are applied.

    But Microsoft doesn't publish any information about what's going on inside their Kinect SDK/hardware, so we can only guess.

    The best information about this comes from libfreenect2, the open source driver for Kinect v2. One of the developers said:

    [libfreenect's] current depth processing code [...] is doing the same things as the shader shipped with the K4W2 Preview SDK (might have changed in the meantime). The bilateral filter is applied to the complex valued images before computing the amplitude/phase(depth). Its only aware of intensity edges in these images. The "edge-aware" filter basically tries to filter the flying pixels at the object boundaries by calculating some statistics in a local neighborhood. Both filters can be disabled in libfreenect2.

    (emphasis mine, Source)

    Of course we don't know if there's anything else going on or if something changed in the release version of the Microsoft SDK.

    Btw. here's a recent paper comparing some current ToF sensors:

    A Comparative Error Analysis of Current Time-of-Flight Sensors - Peter Fürsattel et al.