在做毕设的过程中,由于需要相对准确地提取一张图像的光照分量(光照分量一般是低频部分,所以平滑滤波可以提取,高斯滤波边缘保持能力很差),便找了许多边缘保持滤波算法,后来发现了何凯明大神提出的引导滤波算法,时间复杂度仅为O(N),N为图像像素总数,也即与滤波半径无关,极大地提高了运算速度,就学习了一下,顺便记录下自己的思考。主要参考文献是何凯明的《Guided Image Filtering》以及https://www.cnblogs.com/riddick/p/8367591.html。
引导滤波算法利用引导图像与滤波输出图像之间的局部线性关系(这样就能保证输出图像保留引导图像的局部特征了),将计算出来的输出图像与待滤波图像(即原图像)做最小二乘,使输出图像尽可能逼近原图像。如果引导图像选用原图像,那么即可实现在保留原图像局部特征的基础上实现对原图像的滤波平滑。我们来看原论文的公式:
其中是指某一个滤波窗口,在这个滤波窗口内的所有像素点,输出图像均是引导图像的线性变换,这个变化由和决定。我们对上式两边求梯度,得到:
可以看出,决定了梯度保留能力。如果较大,则梯度保留效果好;反之,就是平滑效果好了。看到这儿,我们应该知道和就是自适应调节因子了。我们希望在边缘处大些,其他地方小些。那,究竟应该怎样取值,才能实现这样一个自适应调节作用呢?接着往下看:
因为我们是要对原图像进行滤波,所以在满足上面局部线性的基础上,还需要使输出图像尽可能逼近原图像,作者采用的是最小二乘方法,使输出图像与原图像