导向滤波(Guided Filtering)和双边滤波(BF)、最小二乘滤波(WLS)是三大边缘保持(Edge-perserving)滤波器。
 引导滤波(导向滤波)的目的是,保持双边滤波的优势(有效保持边缘,非迭代计算),而克服双边滤波的缺点(设计一种时间复杂度为 O(1) 的快速滤波器,而且在主要边缘附近没有梯度的变形)。
本次实验采取的方法是:引导滤波器的保留边缘平滑滤波器应用。

引导滤波简介

 引导滤波器的作用是:输入原始图像P和引导图像 I,输出图像 Q,使得 Q 与 P大体上相似,但边缘和纹理部分与I相似。其典型应用有两个:保边图像平滑,抠图。

 中心思想是局部线性,即图像看作是非解析的二维函数,但其中相邻近的(某个窗口内)的像素点可认为是解析的线性函数。因此,可通过线性参数将图像I线性变化为I2。

 其变换公式为:

边界平滑处理算法java 边界保持平滑滤波_像素点


 其中,i表示的是像素点,ωk为第k个窗口,ak和bk表示在第k个窗口中计算出的系数。

 对于3*3的窗口而言,第i个像素会通过9个窗口,最终的qi取平均值。

边界平滑处理算法java 边界保持平滑滤波_边界平滑处理算法java_02


 由上述的线性关系可得:

边界平滑处理算法java 边界保持平滑滤波_边界平滑处理算法java_03


 即在某个像素点上,输出图像Q和引导图I有着一样的梯度,因此可以保留I中的细节和纹理(梯度,边缘)部分。只要求解系数a,b即可得到Q

 下一步是求出线性函数的系数,也就是线性回归,即希望拟合函数的输出值 q与真实值 p 之间的差距最小,转化为最优化问题,也就是让下式最小:

边界平滑处理算法java 边界保持平滑滤波_计算机视觉_04


 通过最小二乘法,计算可得:

边界平滑处理算法java 边界保持平滑滤波_方差_05


其中,μk和σk^2分别表示引导图像I在窗口ωk中的平均值和方差,∣ω∣是窗口ωk中像素点的个数,pk= 1/|ω| ∑_(i∈ω_k)p_i 是输入图像在窗口ωk中的平均值。

引导滤波的保边平滑滤波器作用
 当输入图像和引导图像为同一张图像时,即P = I时,可以理解为,Q保留P中的纹理(梯度,边缘)部分,而平滑掉其他部分(噪声)。

 当I = P时,

边界平滑处理算法java 边界保持平滑滤波_边界平滑处理算法java_06


 其中,σk^2表示P在窗口ωk中的方差。

    pk表示P在窗口ωk中的均值。

    ε为调整对边缘检测敏感度的参数。值越大越不敏感。

 存在两种情况:1、平滑区域时,σk^2 << ε,ak ≈ 0,bk ≈pk,相当于均值滤波器,平滑图像。

        2、高方差(边缘)区域时,σk^2 >> ε,ak ≈ 1,bk ≈ 0,相当于保留梯度。

灰度图的保边平滑
 读取图像后,灰度图矩阵转化为double类型。计算完系数a,b后,组合的线性方程直接作用于灰度图矩阵。

彩色图像的保边平滑
 读取图像后,图像矩阵转化为double类型。将rgb三通道提取出来,计算完系数a,b后,组合的线性方程分别计算三个通道的矩阵,最后再用cat函数截切在一起。

 代码已上传资源,以下展示结果。

边界平滑处理算法java 边界保持平滑滤波_方差_07


边界平滑处理算法java 边界保持平滑滤波_像素点_08