同步更新于github page
Guided Filter点云降噪
Guided Filter一般用来对2D图像进行降噪等处理,实际上,稍作修改后可以对3D点云进行降噪。
从Guided Filter的基本假设出发,可以推导出针对3D数据的处理方法。这里仅考虑引导数据是点云本身的情况。
首先,根据局部线性假设,有
qi=Akpi+bk
其中qi是滤波后输出的三维点,pi是当前需要滤波的点(即算法的输入),Ak是一个3x3矩阵,bk是3x1向量。
我们希望这个局部线性模型,在pi的领域内有最小的重建误差,即
argAk,bkminj∈N(i)∑(∥Akpj+bk−pj∥2+ϵ∥Ak∥2)
用上式分别对Ak和bk求导,并令导数等于0,可得
Ak(j∈N(i)∑pjpjT+nϵI)+bkj∈N(i)∑pjT−j∈N(i)∑pipiT=0bk=n1j∈N(i)∑pj−Akn1j∈N(i)∑pj=μi−Akμi
其中n是pi的领域N(i)中的点数(包括pi自己),μi是N(i)中所有点的平均,将bk带入第一个等式中,且等式两边同时除以n,有
Ak(n1j∈N(i)∑pjpjT−μiμiT+ϵI)=n1j∈N(i)∑pjpjT−μiμiT
注意到
n1j∈N(i)∑pjpjT−μiμiT=Σi
即领域N(i)中所有点的协方差矩阵,所以最终有
Akbk=Σi(Σi+ϵI)−1=μi−Akμi
于是针对点云的Guided Filter算法,可概况为
- 计算点云中某一个点pi的领域N(i)
- 求N(i)中所有点的均值μi和协方差Σi
- 根据上面的公式计算Ak和bk
-
qi=Akpi+bk,输出qi作为对点pi的滤波结果
上面的算法实际上对Guided Filter做了一些简化,原本的Guided Filter需要得到所有包含pi的领域对应的Ak和bk,并对这些Ak,bk求平均,再输出qi=Aˉkpi+bˉk。
三维情况的Guided Filter依然保持了二维情况的优点,即对边缘或者尖锐形状的地方有较好的保护作用。平滑作用的强弱可以通过调节领域搜索时的半径r和ϵ来改变。
其实,双边滤波(Bilateral Filter)也能用于3D点云的降噪,而Guided Filter相对于双边滤波在三维情况下的最大优势,在于不用估计点云中每个点的法线方向。
Results
输入的带有噪声的点云:
经过两轮Guided Filter滤波后的点云:
Notes
- 对同一个点云进行多轮滤波(一般2轮足矣)可以大大提高降噪效果,有点类似于优化中的重复线性化思想。但过多的轮数可能造成滤波后的点云分布不均,由于计算均值的关系,每一轮滤波都会放大原来点云的非均匀性。
References
- Guided Image Filtering