文章主页: http://kaiminghe.com/eccv10/
导向滤波背景
在图像处理的历史中, 最常用的是LTI (Linear translation-invariant) filters,(包括 mean, Gaussian, Laplacian 和 sobel算子等一些滤波算子)。这类filters的特点是空间不变性及与图像内容无关。但是有时候,我们会想到从guide image上获取先验信息, 从而进行保边滤波或者细节增强等操作。
导向滤波思想
主要核心:. 假设滤波后的图像是导向图像的线性变换。
导向滤波在一方面可以达到双边滤波(bilteral filter)的效果,但是不会有biateral filter的 gradient reversal artifacts。另一方面可以使得输出结构化,不至于过于smooth。
复杂度: 导向滤波的复杂度是O(N), 而双边滤波在kernel radius为r的时候,复杂度是O(Nr^2)。
关于双边滤波及导向滤波区别
双边滤波如右边所示,根据range kernel和spatial kernel实现出一个保边的kernel。导向滤波则先假设输出是导向图的线性变换, 同时也是输入图去噪的结果。
Guided Filter 推导
Guide Filter是一种局部线性模型(Local Linear Model)。给定引导图, 输出图为, 那么在像素k为中心的window(),中,的边缘即是的边缘, 所以可得
进一步推导, 对两边进行积分:
为了求解系数a和b,因此需要对输入进行约束, 我们假设滤波输出是输入减去一些噪声成分,给定输入, 我们对模型输出进行建模为:
在这里插入图片描述
那么对公式4和公式5进行合并,按照最小二乘法 即为:
其中为正则系数, 按照解析解即可得系数a, b:
其中和为引导图在window k中的均值及方差, 为在窗口window中的像素个数。 为输入图在窗口win中的均值。
注意:由于Guide Filter是局部窗口的线性变换,因此对于像素来说,同一个像素存在于不同的窗口中,因此需要对包含这个像素的所有窗口的线性变换系数进行求均值和方差。
因此对于输出图来说:可以表示为:
其中,
算法流程
保边滤波
考虑特殊情况, 引导图为输入图,即自己引导自己。
那么按照公式7和公式8, 则为:
那么当, 则无滤波效果。
考虑,
- case 1: “High variance 方差区域”, 那么, 那么a->1, b->0, 则趋向保边
- case 2:“Flat patch 平坦区域”, 那么 , 那么ak -> 0, b->, 则进行滤波。
更一般的情况, 引导图非输入图:
越大, 则越平滑, 越小, 则保边效果越好。