Score-Based Point Cloud Denoising
Shitong Luo, Wei Hu
TL;DR
This work reframes point cloud denoising as gradient ascent on the log-density of the noise-convolved distribution $q(\mathbf{x})=(p * n)(\mathbf{x})$, estimating the score $\nabla_{\mathbf{x}} \log q(\mathbf{x})$ from noisy observations. It introduces a score-estimation network with a feature extraction backbone and a localized score estimator, trained via a neighborhood-focused objective to align predicted scores with ground-truth neighborhood scores. Denoising is performed by ensemble gradient steps using a robust local score field, mitigating shrinkage and outliers and enabling a direct path to the underlying clean surface. Experiments on synthetic Gaussian and LiDAR-like noise show superior performance over state-of-the-art methods, with additional potential for point cloud upsampling, and the approach generalizes beyond the training noise model. The authors provide code to facilitate adoption and extension to related 3D tasks.
Abstract
Point clouds acquired from scanning devices are often perturbed by noise, which affects downstream tasks such as surface reconstruction and analysis. The distribution of a noisy point cloud can be viewed as the distribution of a set of noise-free samples $p(x)$ convolved with some noise model $n$, leading to $(p * n)(x)$ whose mode is the underlying clean surface. To denoise a noisy point cloud, we propose to increase the log-likelihood of each point from $p * n$ via gradient ascent -- iteratively updating each point's position. Since $p * n$ is unknown at test-time, and we only need the score (i.e., the gradient of the log-probability function) to perform gradient ascent, we propose a neural network architecture to estimate the score of $p * n$ given only noisy point clouds as input. We derive objective functions for training the network and develop a denoising algorithm leveraging on the estimated scores. Experiments demonstrate that the proposed model outperforms state-of-the-art methods under a variety of noise models, and shows the potential to be applied in other tasks such as point cloud upsampling. The code is available at \url{https://github.com/luost26/score-denoise}.
