Really noisy the reconstructed scene is. There are a lot of "dust" and "particles" hovering in the air.
Mainly three reasons:
There are holes, because it is hard to extract features from plain color or low brightness region.
Unavoidable tiny error even after we perform bundle adjustment (you can not optimize forever)
limited resolution or lens distortion
We must denoise!
A primary idea of denoising is Radius Outlier Removal, based on the intuition that: if a point (or a limited number of gathered points) is alone within a threshold range, then it is probably a noise point.
However, a typical point cloud file after dense reconstruction consists of over one million points.
The naive idea of comparing the distance between any two points is not feasible with O(n^2) .
We do not need to compute the distance within any of the two points. We only care about the distance between points with its neighbor points. That's to say, make a coarse screening first.
The detailed algorithm is as follow:
divide the whole space into grids. Each point falls into one of those grid bins, let's say G[i,j,k]
only need compute distance within this point's adjacent 27 bins: G[i-1,j-1,k-1]~G[i+1,j+1,k+1]
if the point is alone, then we eliminate it
One shortcoming: we must memorize points' index within every bins.
It is a typical trade-space-for-time strategy.