Denoising a Point Cloud for Surface Reconstruction
Surface reconstruction from unorganized point cloud is an
important problem due to its wide variety of applications. In
the presence of noise and outliers, surface reconstruction
becomes more challenging. We
have developed a software, DenoisingSurfRecon, to
denoise a point cloud. It handles white noise, possibly
clustered outliers, and gaussian noise on the data points. It
is applicable to a point cloud sampled from a smooth surface
in 3D. Smooth boundaries are allowed, but corners and
non-manifold features are not catered for. The executable of DenoisingSurfRecon
can be downloaded via this link (it should be
executed on a linux machine).
DenoisingSurfRecon first removes the white noise, outliers, and
very noisy points based on the point cloud behavior and simple
statistical analysis. It then denoises the remaining
points by a meshless Laplacian smoothing algorithm.
Then, the Robust
Cocone software is run on the denoised point set to
reconstruct the surface. Finally, some of the triangles of
the reconstructed surface are removed for constructing the
boundaries and the resulting mesh is further smoothed by a
standard Laplacian smoothing algorithm. The relevant
This work is supported by Research Grants Council, Hong Kong,
How to Run DenoisingSurfRecon?
Decompressing the file DenoisingSurfRecon.zip yields five
files: DenoisingSurfRecon, DenoisingPointCloud,
ConvertSurfToOFF, ConstructBoundaries and LaplacianSmoothing.
Before executing our program, please make sure that you have
downloaded the Robust Cocone software from the Robust Cocone project page and make sure
the name of the Robust Cocone software is "rcocone-linux".
Type in the following command to run our program with the
default parameter setting:
The input file should respect the following
format: Each row contains the coordinates of a 3D point, and the
coordinates are separated by a space.
DenoisingSurfRecon [inputFileName] [outputFileName(without
Several parameters are specified in the
first line in the DenoisingSurfRecon file:
$1 0.25 1 40 2 2 0.0008 200 2 $2
- Second parameter (0.25): The value of the parameter lambda
in section 3.3 of our paper. If the noise level is known
to be quite small, one can try smaller value of lambda such as
- Third parameter (1): Inform the software the number of
surface(s) to be reconstructed.
- Fourth parameter (40): The value of the parameter
gamma in section 3.3 of our paper.
- Fifth parameter (2): The value of the parameter alpha
in section 2 of our paper, which is used in building the
octree to remove white noise, outliers and very noisy
points. If the sampling is significantly non-uniform at
some places, a larger value of alpha is needed and setting
alpha = 2.5 or 4 may work.
- Sixth parameter (2): It is used in building the
octree after removing outliers and very noisy
parameter is no longer in use, but we do not bother to
modify the code to remove it.
- Ninth parameter (2): The value of the parameter beta in
section 3.2 of our paper.
- There is also a parameter epsilon (10) in section 4 of the
paper. This is specified as the third parameter in
the fifth line in the DenoisingSurfRecon file:
$2.off 0 10 $2.off
Several more parameters are specified in
the last line in the DenoisingSurfRecon file:
$2.off $2_smooth.off 0 50 40
- Fourth parameter (50): The maximum number of iterations for
smoothing the mesh by the standard Laplacian smoothing
- Fifth parameter (40): This parameter has the same effect as
the parameter gamma in section 3.3 of our paper.
The default values of the above parameters are set based on our
experience. You may change the parameters if
necessary. The other parameters that are not discussed
above are redundant parameters, and there is no need to change
them. Note that, you may also want to change the parameters of
the robust cocone software if necessary, that is,
[-L | -bbr | -thif | -thff ] infile
more details, you may refer to the Robust
Cocone project page.
Outputs of DenoisingSurfRecon
Three files are generated after
running DenoisingSurfRecon. Let $2 denotes the prefix of the
output file name.
- $2_denoised.obj is the denoised point
set file obtained by executing DenoisingPointCloud.
- $2.off is the mesh file obtained by
- $2_smooth.off is the mesh file
obtained by executing LaplacianSmoothing.
Noise Setting in Our Experiments
Let d be the length of the
diagonal of the minium axes-aligned bounding cube.
- The point sets are contaminated with
Gaussian noise with zero mean and x standard deviation
along a direction chosen uniformly at random, where x
is a certain fraction of d.
- White noise points are drawn from a
uniform distribution inside the minimum axes-aligned bounding
cube of the point set.
- Each white noise point p has
5% probability to become a cluster of outliers if there is no
sample point inside the ball centered at p with radius
0.05d. Let r_1 be a random integer in the range
from 1 to R and r_2 be a random real number in
the range from 0 to 1. If p is chosen to be a cluster
of outliers, r_1 points are generated uniformly at
random inside the ball centered at p and radius is 0.001*d*r_2.
contains quite a number of examples.
For the examples below, the # white
noise point is 50% of the original point set size, R =
400 and 0.5% Gaussian noise. Column (a) is the
input point cloud. Column (b) is the denoised point
set. Column (c) is the reconstructed surface mesh.
Some more examples of reconstructions using our denoising code
and Robust Cocone.
Some more examples of denoising point sets.