最近在使用引导滤波器,速度相对于双边滤波器快了很多,主要是算法中涉及到大量的窗口内的求和、求均值、求方差等,利用了BoxFilter滤波器,使得上述过程得到了极大的加速,所以效率很高,这里我查了相关的资料,结合经典的暗通道去雾算法中给出的引导滤波的Matlab代码,分析其在Matlab中实现的过程,比较基础。
BoxFilter包滤波器的原理,在这篇文章中有介绍,http://www.cnblogs.com/easymind223/archive/2012/11/13/2768680.html
总的来说,BoxFilter包的功能可以大致概括如下:
输入: 有 2个 对象:
第一、待处理的矩阵(input)(在此讨论的是二维矩阵,即针对灰度图像的处理中的应用);
第二、窗口半径(r);
输出:out 和 input 维数大小相等,每个元素out(i,j)表示以该input(i,j)为中心的半径为r的窗口内的所有元素的和,当处于边缘时,窗口自动根据边框缩小。
首先给出BoxFilter包滤波器的Matlab代码如下:
function imDst = boxfilter(imSrc, r)
% BOXFILTER O(1) time box filtering using cumulative sum
%
% - Definition imDst(x, y)=sum(sum(imSrc(x-r:x+r,y-r:y+r)));
% - Running time independent of r;
% - Equivalent to the function: colfilt(imSrc, [2*r+1,