基本理念
基本思想是:用一张引导图,去指导滤波操作。这张就叫做i(x);
这个损失函数中,减号前面是:预测输出图像ax+b
。减号后面是输入图像g(x)
。这里下标x是表示在原图像中的索引,x'
表示是邻域的坐标,w
表示邻域。
这里对损失函数进行求导,这是在找极小值点,所以令导数等于0,得到最终的形式如上;这二个式子中:黑色标注表示邻域之和,也就是邻域的一阶范数。
这里先对b求解,最终,b等于原图上的邻域均值,减去a乘以引导图中的邻域均值。
这里求解a,最终,a等于原图和引导图的邻域相关系数除以引导图的邻域方差。当然如果引导图就是原图的话,那就是引导图的方差除以引导图的方差。
- 如果方差较小,即是一个平滑区域的话,那么方差较小约等于0,则ak约等于方差除以epsilon,因此 ak 约等于 0 。那么bk约等于1,那么qi =mean(p),这样相当于说这个pixel在该窗口内的输出值相当于在这个窗口进行了均值平滑,而考虑到pixel属于多个窗口,如果这是一个平滑区域,那么就相当与多个均值平滑滤波器的级联。
- 如果方差大,即是边缘的话,ak 就约等于 1(epsilon很小),因此,b就约等于0。相当于输出等于输入只是乘以一个约等于1的系数,这样可以保证梯度的比例关系不变。
算法实现
在算法实现上,可以用前缀和,加速运算速度。
运行结果:
参考: