InfiniTAM icon indicating copy to clipboard operation
InfiniTAM copied to clipboard

Add low-level engine filters for RGBD data from slanted surfaces.

Open Algomorph opened this issue 5 years ago • 1 comments

RGBD data from surfaces oblique to the camera plane at a high angle is highly unreliable. Exploring #203 showed that it results in excessive voxel hash block allocations in specific corner-cases, and these cases occur once in every few frames. By rough estimate, this accounts for over 20% of block allocations after only 50 frames of the Snoopy sequence.

In addition, it forms noise-based, incorrect surfaces / level sets far away ("deep") from the rest of a 3D object from which it emanates.

A filter in the portion of the code currently dubbed "LowLevel" engine need to be provided for this data. Some control over the filter should be provided to the user, e.g. tuning the "cutoff" angle and turning the filter on and off.

Algomorph avatar Jun 20 '20 19:06 Algomorph

Currently, there is already a simple thresholding filter that I implemented awhile back: one which checks if the average depth of surrounding neighbors of each pixel is or isn't within a specific threshold from its own depth value. If the neighbor average depth exceeds this threshold, the target pixel is removed.

This doesn't work in all places, but it does alleviate the noise from poor background subtraction to a degree.

Also, just setting the far clip plane to a smaller depth seems to help dramatically for the Snoopy scene. Deferring this issue until it's more important.

Algomorph avatar Jul 10 '20 15:07 Algomorph