双边滤波问世以来,以其较好的效果受到了广泛的实用,但是由于双边滤波同时考虑了空域和值域使其在速度方面带来了不少麻烦。为此人们提出了不少改进方法。
(一)分离高斯核的方法(对每个空间方向使用一维双边滤波)
Pham and Vliet在separable bilateral filtering for fast video preprocessing . [PvV05]这篇文章中提出用一维的双边滤波器分别对各个空间方向进行滤波。结果非常快,但在图象边缘分布着坐标系的地方会产生人工的痕迹。
1:简单的分离高斯核
由于高斯函数可以写成可分离的形式,因此可以采用可分离滤波器实现来加速。所谓的可分离滤波器,就是可以把多维的卷积化成多个一维卷积。具体到二维的高斯滤波,就是指先对行做一维卷积,再对列做一维卷积。这样就可以将计算复杂度从O(M*M*N*N)降到O(2*M*M*N),M,N分别是图像和滤波器的窗口大小。问题是实现时候怎么计算一维的卷积核呢?其实很简单,按照前面计算出来的窗口大小,计算所有离散点上一维高斯函数的权值,最后将权值之和归一化到1. 另外,可以设法将二维模板运算转换成一维模板运算,对速度的提高也是非常可观的。
例如,(1)式可以分解成一个水平模板和一个垂直模板,即
用一个实际的例子来验证一下:
设图象为,经过(1)式处理后变为
,经过(2)式处理后变为
,两者完全一样。如果计算时不考虑周围一圈的象素,前者做了4×(9个乘法,8个加法,1个除法),共36个乘法,32个加法,4个除法;后者做了4×(3个乘法,2个加法)+4×(3个乘法,2个加法)+4个除法,共24个乘法,16个加法,4个除法,运算简化了不少,如果是大图,效率的提高将是非常客观的。
2:应用到高斯滤波器
高斯平滑滤波器的原理高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对去除服从正态分布的噪声是很有效果的。一维零均值高斯函数为。其中,高斯分布参数决定了高斯滤波器的宽度。对图像来说,常用二维零均值离散高斯函数作平滑滤波器,函数表达式如下:
式(1)
由于高斯函数的可分离性,高斯滤波器加速可以有效实现。通过二维高斯函数的卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积的结果与方向垂直的相同一维高斯函数进行卷积。因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。这些性质使得它在早期的图像处理中特别有用,表明高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器。
高斯函数的可分离性很容易表示:
离散高斯平滑滤波器的设计在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。实际上,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。对较大的滤波器,二项式展开系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板值。
选择适当的σ2值,就可以在窗口上评价该值,以便获取核或模板。首先选择n值和σ2值,然后根据式(4)计算出模板的右下角元素,再根据高斯模板的中心左右上下对称性(如图1 c7×7的模板结构所示)对应地复制给其它三个区域,即可得出整个模板的元素,最后再对全部的模板元素求和、取倒数即求得规范化系数。
(二)实用3D直方图
Weiss在文章Fast Median and Bilateral Filtering中提出用一个基于3维直方图的方法,并用此方法来加速正方形空间核的二维双边滤波。其算法的主要思想就是改变图像直方图的表示方式来达到加速图像处理的过程,同时达到在任意位宽的图像,任意大小的滤波核的情况下其时间复杂度都为;这是一种基于处理每个像素需要的时间复杂度度量,在之前的双边滤波算法都是在之上。其核心思想就是利用多个部分直方图来合成一个完整的直方图,相邻列可以并行处理,相邻行之间的改变也大大缩小了;并且在对直方图的排序时采用基数排序来代替传统的快速排序。而该改进确实可以提升算法的速度,但是存储开销非常大,文中则提出了一种基于序数变化的思想来减小存储开销。对于高精度的图像他又提出了一种基于移位操作的逐步取精的方法,即在源图像上右移8位得到一个低位图像然后进行双边滤波,得到的结果保存以便第二次移位得到的图像利用,以便更快的找到中值;最后右移完成,那么整个高精度的图像也就完成了滤波。
在最近的文章Contant time O(1) Bilatearal Filtering[Por08]中,Porikli同样介绍了基于3维直方图的一种低计算复杂度的算法,Porikli提出常数时间双边滤波算法O(1)。其中常数时间是指计算时间与滤波核大小r无关。文章针对不同特征的双边滤波采用不同的证明方法。文章主要提供了三种方法:整体直方图,线性滤波器,泰勒级数。作者证明几种情况都能使双边滤波达到o(1)。
(三)基于FFT加速的方法
Durand and Dorsey 在文章Fast Bilateral Filtering for the Display of High-Dynamic Images[DD02]中提出一种快速的近似算法来处理3维的双边滤波,该算法通过将灰度核g2表示为g2(n-I(y))I(y),其中n是一个常数,通二维快速复利叶变换减少计算量,然后线性插值得到结果。
Paris and Durand 在文章A Fast Approximation of the Bilateral Filter using a Signal Processing Approach[PD06]中将3维复利叶变换应用到下采样中。所以[DD02]中的算法可以看成Paris and Durand 在文章[PD06]中算法的一种特殊情况。Paris and Durand在文章[PD09]中将他们的算法扩展到彩色图象中。
(四)FGT泰勒级数展开
1:快速高斯变换
如下对高斯函数的加权和进行处理
定义
对高斯函数进行Hermite展开为:
进行平移和尺度变换后有:
由上面可以得到下式:
于是对多维的情况可以表示如下:
2:基于快速高斯变换的双边滤波
在文章[Fast Gauss Bilateral Filtering——2010]中,作者应用FGT的办法,首先对双边滤波的表达式进行改写:
其中:
然后定义了
其中ti为目标的,si为源点。
3:基于改进的快速高斯变换的双边滤波
(五)用Raised cosines函数来逼近高斯值域函数(可参考下面博文)http://blog.csdn.net/laviewpbt/article/details/14126839