图像去雾之引导滤波器(Guided Filter)

2024-05-21 21:56:06
/
0 点赞
/
184 阅读
2024-05-21

前言

引导滤波器的作用在于:

  1. 细化传输图:传输图是计算图像去雾、增强等操作中的重要部分。通过引导滤波器,可以细化传输图,使其更加准确。
  2. 保持边缘细节:在滤波过程中,滤波器能保留图像的边缘细节,避免边缘模糊。
  3. 去除噪声:能有效去除图像中的噪声,同时保留有用的信息。

引导滤波器通过局部均值和协方差计算,使得输出图像在平滑的同时保留了原图像的结构和细节,是一种高效的图像处理方法。

def guided_filter(I, p, radius, eps):
    """Guided filter for refining the transmission map"""
    mean_I = cv2.boxFilter(I, cv2.CV_64F, (radius, radius))
    mean_p = cv2.boxFilter(p, cv2.CV_64F, (radius, radius))
    mean_Ip = cv2.boxFilter(I * p, cv2.CV_64F, (radius, radius))
    cov_Ip = mean_Ip - mean_I * mean_p

    mean_II = cv2.boxFilter(I * I, cv2.CV_64F, (radius, radius))
    var_I = mean_II - mean_I * mean_I

    a = cov_Ip / (var_I + eps)
    b = mean_p - a * mean_I

    mean_a = cv2.boxFilter(a, cv2.CV_64F, (radius, radius))
    mean_b = cv2.boxFilter(b, cv2.CV_64F, (radius, radius))

    q = mean_a * I + mean_b
    return q
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

原理解析

  1. 输入参数

    • I:引导图像,通常是灰度图像或单通道图像。
    • p:需要处理的输入图像或传输图。
    • radius:滤波器的半径,决定了局部窗口的大小。
    • eps:正则化参数,避免除零错误,并控制平滑程度。
  2. 步骤解析

    • 计算局部均值

      mean_I = cv2.boxFilter(I, cv2.CV_64F, (radius, radius))
      mean_p = cv2.boxFilter(p, cv2.CV_64F, (radius, radius))
      mean_Ip = cv2.boxFilter(I * p, cv2.CV_64F, (radius, radius))
      
      1
      2
      3

      使用盒滤波器(box filter)计算引导图像I、输入图像p及其乘积I * p的局部均值。

    • 计算协方差

      cov_Ip = mean_Ip - mean_I * mean_p
      
      1

      计算Ip的局部协方差。

    • 计算局部方差

      mean_II = cv2.boxFilter(I * I, cv2.CV_64F, (radius, radius))
      var_I = mean_II - mean_I * mean_I
      
      1
      2

      计算引导图像I的局部方差。

    • 计算线性系数

      a = cov_Ip / (var_I + eps)
      b = mean_p - a * mean_I
      
      1
      2

      计算线性系数ab,其中a是滤波器的权重,b是偏置项。eps是正则化项,防止分母为零。

    • 计算系数的局部均值

      mean_a = cv2.boxFilter(a, cv2.CV_64F, (radius, radius))
      mean_b = cv2.boxFilter(b, cv2.CV_64F, (radius, radius))
      
      1
      2

      计算ab的局部均值。

    • 计算输出图像

      q = mean_a * I + mean_b
      
      1

      使用均值系数mean_amean_b,结合引导图像I,计算出最终的滤波结果q

参数radius和eps说明

在引导滤波器(Guided Filter)中,radiuseps两个参数对滤波效果有重要影响。下面详细解释它们的作用:

1. radius(滤波半径)

  • 定义radius是定义局部窗口大小的参数,即滤波器的半径。
  • 作用
    • 控制局部区域大小radius决定了滤波时考虑的局部区域的大小。例如,当radius为5时,滤波器会在一个大小为11x11(即2 * radius + 1)的窗口内计算局部均值和方差。
    • 影响平滑程度
      • radius:会在较小的局部区域内进行计算,这样可以更好地保留细节和边缘,但可能不能有效去除大面积的噪声。
      • radius:会在较大的局部区域内进行计算,这样可以更好地去除大面积的噪声和纹理,但可能会导致一些细节和边缘的丢失。
    • 计算复杂度:较大的radius会增加计算复杂度,因为需要处理更多的像素。

2. eps(正则化参数)

  • 定义eps是引导滤波器中的正则化参数,用于控制滤波过程中的平滑程度。

  • 作用

    • 避免除零错误:在计算线性系数a时,eps被加到局部方差var_I中,防止出现除以零的情况:
      a = cov_Ip / (var_I + eps)
      
      1
    • 控制平滑强度
      • eps:当eps较小时,滤波器对细节的敏感度较高,更能保留图像中的细节,但对噪声的抑制效果较弱。
      • eps:当eps较大时,滤波器更倾向于平滑图像,抑制噪声的能力增强,但也可能导致细节的丢失。
    • 调节平衡eps帮助在保持图像细节和去除噪声之间找到一个平衡点。适当的eps值可以在不丢失重要细节的情况下,有效地平滑噪声。
  • radius:决定了滤波的局部窗口大小,影响图像细节和噪声平滑的平衡。较大的radius用于大面积平滑,较小的radius用于保留细节。

  • eps:控制平滑程度,防止除零错误。较大的eps增强平滑效果,较小的eps保留更多细节。

在实际应用中,这两个参数通常需要根据具体的图像处理需求进行调试和选择,以达到最佳的滤波效果。

版权属于:

那棵树看起来生气了

本文链接:

https://dengyb.com/archives/108.html(转载时请注明本文出处及文章链接)