Search code examples
kinectkinect-sdkfusion

Kinect Fusion volume voxel settings?


I need some help trying to figure out the Volume Voxel Per Meter and Resolution settings in Kinect Fusion...mostly how, and if at all, they interact with Depth Threshold settings in the Kinect Fusion Explorer program please...because I don't get if the depth threshold minimum is increased and maximum is reduced, does that smaller range increases the overall precision of the scanned volume, or does it stay the same?

Say I set the Kinect Fusion's depth threshold minimum to 2m and the maximum to 3m, thus setting the scanned range to 3m-2m=1m, does then the volume voxels per meter setting of say 256 and a resolution of also 256 mean that I would get a voxel depth precision of 1m/256=0.003m=0.3cm (a third of a centimeter)? Or is the resolution applicable only to the complete Kinect depth range instead of the one set via depth threshold? Also, how's width and height affected by depth threshold settings, and how to calculate precision in those two remaining axis?

Thanks in advance

P.S. If the volume voxel resolution is set to maximum for all three axis (768x768x768) what is the minimum amount of GPU memory needed to make Kinect Fusion work?


Solution

  • Answering an old topic; because there is no other answer:

    A. Simple Answer: Depth threshold settings simply decide what region of the depth map are you interested in. Any value below min depth threshold and above max depth threshold is simply replaced with 0 during depth map generation.

    B. Detailed Answer:

    Volume Voxel per meter: This is the mm value depth represented by a single voxels . So 1000mm/256 (voxel_per_meter) = ~3.9 mm/voxel ( See:PCL documentation )

    Voxel Resolution: The number of voxels in the volume you are constructing.

    So; Voxel Resolution / Voxel per m = Volume of Reconstruction volume (in meters)

    EG: 512 voxels / 256 vpm = 2.0m (The volume of the reconstruction cube, given that the number of voxels per side of the cube are the same - each axis can be independently defined.)

    If you have the Kinect SDK installed; see the descriptions of the following variables:

    minDepthClip = FusionDepthProcessor.DefaultMinimumDepth;
    maxDepthClip = FusionDepthProcessor.DefaultMaximumDepth;
    voxelsPerMeter; voxelsX; voxelsY; voxelsZ;
    

    So; these values are not dependent (or vice versa) on the depth threshold value. A good example of using the depth threshold values is in the great video by Daniel Shiffman ([Kinect & Processing])