Guided Filter对三维点云降噪

Guided Filter for 3D Point Cloud

Posted by Jerry Zhao on April 28, 2019

Guided Filter点云降噪

Guided Filter一般用来对2D图像进行降噪等处理,实际上,稍作修改后可以对3D点云进行降噪。

从Guided Filter的基本假设出发,可以推导出针对3D数据的处理方法。这里仅考虑引导数据是点云本身的情况。

首先,根据局部线性假设,有

其中是滤波后输出的三维点,是当前需要滤波的点(即算法的输入),是一个3x3矩阵,是3x1向量。

我们希望这个局部线性模型,在的领域内有最小的重建误差,即

用上式分别对求导,并令导数等于0,可得

其中的领域中的点数(包括自己),中所有点的平均,将带入第一个等式中,且等式两边同时除以,有

注意到

即领域中所有点的协方差矩阵,所以最终有

于是针对点云的Guided Filter算法,可概况为

  1. 计算点云中某一个点的领域
  2. 中所有点的均值和协方差
  3. 根据上面的公式计算
  4. ,输出作为对点的滤波结果

上面的算法实际上对Guided Filter做了一些简化,原本的Guided Filter需要得到所有包含的领域对应的,并对这些求平均,再输出

三维情况的Guided Filter依然保持了二维情况的优点,即对边缘或者尖锐形状的地方有较好的保护作用。平滑作用的强弱可以通过调节领域搜索时的半径来改变。

其实,双边滤波(Bilateral Filter)也能用于3D点云的降噪,而Guided Filter相对于双边滤波在三维情况下的最大优势,在于不用估计点云中每个点的法线方向。

Results

输入的带有噪声的点云:

经过两轮Guided Filter滤波后的点云:

Notes

  1. 对同一个点云进行多轮滤波(一般2轮足矣)可以大大提高降噪效果,有点类似于优化中的重复线性化思想。但过多的轮数可能造成滤波后的点云分布不均,由于计算均值的关系,每一轮滤波都会放大原来点云的非均匀性。

Code

Python源码可见github.

References

  1. Guided Image Filtering