高斯滤波
缺点:所有像素都会糊掉,无法保持边缘
双边滤波
表示像素之间的距离,
表示颜色之间的距离
优点:通过颜色突变找到图像边界
如果两个像素(i,j),(k,l)颜色相差不大-->正常高斯核滤波
如果两个像素(i,j),(k,l)S颜色相差太大-->高斯权重减小
缺点:噪声多的场景中,通过颜色突变无法区分是噪声还是边界
联合双边滤波
一种 spatial filtering 方法,通过充分利用 G-buffer 的各种属性作为参考(双边滤波公式基础上多乘以几个指标),来控制滤波的核和权重。实际关键就是在判断高频信息属于噪声还是图像信息,而 G-buffer 是光栅化过程生成的完全没有噪声,因此作为滤波的指导是非常有用的。
考虑的点有:
- 联合考虑深度差异和法线(不能简单的单纯考虑深度差异)
- 实际上就是考虑沿平面的深度差距
大滤波核带来的问题
使用大滤波核,如128x128, 每个像素都要取它周围的128x128个像素点,会耗费巨大性能
解决方法一 -seperate passes
1. 先横向滤波,取每个像素周围的(1xN)个像素
2. 再纵向滤波,取每个像素周围的(Nx1)个像素
N^2-->优化到N+N
原理:
高斯二维函数是可拆分的,(但双边滤波理论上不可分,工业界近似处理)
解决方法二 - a-trous wavelet
渐进增大filter大小
比如:每次取像素周围的5个sample, 但这些sample间隔会随着次数以2^i次方递增
原理:
逐步去掉: 高频-->中频-->低频噪声
firefly 解决
问题:图像中如果存在特别亮的点(firefly/outliner) ,需要先把这些点去掉,再去滤波
去掉的方法-->clamp操作(大于最大值取最大值,小于最小值取最小值)
取像素周围的7x7区域,获取一个颜色范围(根据均值和方差取),把超出这些范围的颜色clamp到这个范围内
同理,在temperal filter里,为防止上一帧的取值去到了颜色差异巨大的值,可对上一帧的颜色做clamp, clamp到当前帧的7x7颜色范围内
SVGF
SVGF(Spatio-Temporal Variance Guided Filter)主要是采用了更聪明也更符合现代 G-Buffer 管线的 spatial filtering 方法,再搭配上 temporal filtering,可以说是 real-time denoising 的里程碑。
SVGF = Joint Bilateral Filtering + Temporal Filtering。SVGF 算是 real-time denoising 的经典方案了,后续的降噪方案大都基于此去改进或创新。
公式:
考虑的metrix: 1.深度, 2.normal 3.颜色差异
1.深度差异
考虑A,B点之间深度的梯度--深度沿着AB方向的变化率
-->同一平面上的两个点可以做混合
2.normal差异
3.颜色差异
问题:
在有噪声的图像中,如果直接判断两个像素之间的颜色差,有可能取到的是有噪声的像素点。
解决方法:
--考虑标准差来衡量噪声程度, 标准差越大,颜色差异就不可信
参考自:实时光线追踪(1)降噪:Spatio-Temporal Filtering - KillerAery - 博客园 (cnblogs.com)