栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

美颜技术---引导滤波 Guided Filter

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

美颜技术---引导滤波 Guided Filter

引导滤波 Guided Filter

paper: Guided Image Filtering


简介

导向滤波是何恺明2013年的杰作,相比于常见的滤波器,例如双边滤波(BF),PS的表面模糊,拥有更好的保边效果和性能优势。导向滤波除了能做保边滤波,在图像去雾,图像抠图均有应用


初步定义
  • 将引导滤波定义为一个线性滤波

    • 输入图像 q q q, 引导图像 I I I, 滤波后输出图像 q q q

    • 数学模型

      • q i = ∑ j W i j ( I ) p j q_i=sum_{j}{W_{ij}(I)p_j} qi​=j∑​Wij​(I)pj​

      • 其中 i i i 和 j j j分别表示像素下标, W i j W{ij} Wij是与引导图像 I I I 相关的滤波核函数,滤波输出一个加权平均值


重要假设
  • 假设一:导向滤波的一个重要假设是输出图像 q q q和引导图像 I I I在滤波窗口 w k w_k wk​上存在局部线性关系:

    • q i = a k I i + b k , ∀ i ∈ w k q_i=a_kI_i+b_k,∀i∈w_k qi​=ak​Ii​+bk​,∀i∈wk​

    • 对于一个以 k k k为边长的方形窗口 w k w_k wk​, a k a_k ak​和 b k b_k bk​是根据窗口的某些特征求得的常量系数,对这个公式两边求导,得到$ ∇ q = a ∇ I , 两 边 的 梯 度 呈 线 性 关 系 , 该 特 性 保 证 了 输 出 图 像 ,两边的梯度呈线性关系,该特性保证了输出图像 ,两边的梯度呈线性关系,该特性保证了输出图像q$的一个特性,即可以在图像边缘处保持引导图像的梯度特征。

    • 从公式中可知,求得 a k a_k ak​和 b k b_k bk​两个常量,即可得到输出图像 q i q_i qi​

  • 假设二:输入图像的非边缘区域中不平滑的区域,视为是有噪声的。

    • 该假设是为了求解 a k a_k ak​和 b k b_k bk​而设立的

    • 因此提出数学模型

      • q i = p i − n i q_i=p_i-ni qi​=pi​−ni

      • 其中 q i q_i qi​为输出像素, p i p_i pi​为输入像素, n i n_i ni​为噪声

    • 现在要把噪声最小化

      • 建立数学模型:

        • 最小二乘法可以表示为:

        • a r g m i n ∑ w k ​ ( a k ​ I i ​ + b k ​ − p i ​ ) 2 argminsum_{w_k}​(a_k​I_i​+b_k​−p_i​)^2 argminwk​∑​​(ak​​Ii​​+bk​​−pi​​)2

        • 为了不让 a k a_k ak​过大,因此设置一个正则化参数 ϵ epsilon ϵ,建立滤波窗口内的损失函数:

          • E ( a k , b k ) = ∑ i ϵ w k ( ( a k I i + b k − p i ) 2 + ϵ a k 2 ) . E(a_k,b_k)=sum_{iepsilon w_k}((a_kI_i+b_k−p_i)^2+ϵa_k^2). E(ak​,bk​)=iϵwk​∑​((ak​Ii​+bk​−pi​)2+ϵak2​).

求最优解
  • 对 a k a_k ak​, b k b_k bk​求偏导

    • ∂ E a k = ∑ i ϵ w k ( 2 ( a k I i + b k − p i ) I i + 2 ϵ a k ) = 0 ∂ E b k = ∑ i ϵ w k ( 2 ( a k I i + b k − p i ) ) = 0 frac{partial E}{a_k}=sum_{i epsilon w_k}(2(a_kI_i+b_k-p_i)I_i+2epsilon a_k)=0 \ frac{partial E}{b_k}=sum_{i epsilon w_k}(2(a_kI_i+b_k-p_i))=0 ak​∂E​=iϵwk​∑​(2(ak​Ii​+bk​−pi​)Ii​+2ϵak​)=0bk​∂E​=iϵwk​∑​(2(ak​Ii​+bk​−pi​))=0
  • 根据偏导,求 b k b_k bk​

    • b k = 1 w ∑ i ϵ w k ( p i − a k I i ) b_k=frac{1}{w}sum_{iepsilon w_k}(p_i-a_kI_i) bk​=w1​iϵwk​∑​(pi​−ak​Ii​)

    • 为了简化表达,把 1 w ∑ i ϵ w k p i frac{1}{w}sum_{iepsilon w_k}p_i w1​∑iϵwk​​pi​表示为$bar{p_k} , , ,frac{1}{w}sum_{iepsilon w_k}I_i 表 示 为 表示为 表示为bar{I_k} $

    • b k = p k ˉ − a k I k ˉ b_k=bar{p_k}-a_kbar{I_k} bk​=pk​ˉ​−ak​Ik​ˉ​

  • 根据偏导,求 a k a_k ak​

    • ​

    ∑ i ϵ w k ( 2 ( a k I i + b k − p i ) I i + 2 ϵ a k ) = 0 sum_{i epsilon w_k}(2(a_kI_i+b_k-p_i)I_i+2epsilon a_k)=0 iϵwk​∑​(2(ak​Ii​+bk​−pi​)Ii​+2ϵak​)=0

    • ==>

      • ∑ i ϵ w k ( a k I i 2 + b k I i − p i I i + ϵ a k ) = 0 sum_{i epsilon w_k}(a_kI_i^2+b_kI_i-p_iI_i+epsilon a_k)=0 iϵwk​∑​(ak​Ii2​+bk​Ii​−pi​Ii​+ϵak​)=0
    • 把 b k b_k bk​代入式子==>

      • ∑ i ϵ w k ( a k I i 2 + ( p k ˉ − a k I k ˉ ) I i − p i I i + ϵ a k ) = 0 sum_{i epsilon w_k}(a_kI_i^2+(bar{p_k}-a_kbar{I_k})I_i-p_iI_i+epsilon a_k)=0 iϵwk​∑​(ak​Ii2​+(pk​ˉ​−ak​Ik​ˉ​)Ii​−pi​Ii​+ϵak​)=0
    • 把常量系数 a k a_k ak​提取出来==>

      • a k ∑ i ϵ w k ( I i − I k ˉ ) I i + ϵ ) = ∑ i ϵ w k ( p i I i − p k ˉ I i ) a_ksum_{i epsilon w_k}(I_i-bar{I_k})I_i+epsilon)=sum_{i epsilon w_k}(p_iI_i-bar{p_k}I_i) ak​iϵwk​∑​(Ii​−Ik​ˉ​)Ii​+ϵ)=iϵwk​∑​(pi​Ii​−pk​ˉ​Ii​)
    • ==>

      • a k = ∑ i ϵ w k ( p i I i − p k ˉ I i ) ∑ i ϵ w k ( I i 2 − I k ˉ I i + ϵ ) a_k=frac{sum_{i epsilon w_k}(p_iI_i-bar{p_k}I_i)}{sum_{i epsilon w_k}(I_i^2-bar{I_k}I_i+epsilon)} ak​=∑iϵwk​​(Ii2​−Ik​ˉ​Ii​+ϵ)∑iϵwk​​(pi​Ii​−pk​ˉ​Ii​)​

      • 根据方差的原理和推导公式,这里把 I i 2 − I k ˉ I i I_i^2-bar{I_k}I_i Ii2​−Ik​ˉ​Ii​进似看成方差 σ 2 sigma^2 σ2

      • a k = ∑ i ϵ w k ( p i I i − p k ˉ I i ) ∑ i ϵ w k ( σ 2 + ϵ ) a_k=frac{sum_{i epsilon w_k}(p_iI_i-bar{p_k}I_i)}{sum_{i epsilon w_k}(sigma ^2+epsilon)} ak​=∑iϵwk​​(σ2+ϵ)∑iϵwk​​(pi​Ii​−pk​ˉ​Ii​)​

      • 进一步化简

      • a k = p i I i ˉ − p k ˉ I i ˉ σ 2 + ϵ a_k=frac{bar{p_iI_i}-bar{p_k}bar{I_i}}{sigma ^2+epsilon} ak​=σ2+ϵpi​Ii​ˉ​−pk​ˉ​Ii​ˉ​​

  • 得出结论

    • b k = p k ˉ − a k I k ˉ a k = p i I i ˉ − p k ˉ I i ˉ σ 2 + ϵ b_k=bar{p_k}-a_kbar{I_k} \ a_k=frac{bar{p_iI_i}-bar{p_k}bar{I_i}}{sigma ^2+epsilon} bk​=pk​ˉ​−ak​Ik​ˉ​ak​=σ2+ϵpi​Ii​ˉ​−pk​ˉ​Ii​ˉ​​

    • 结论: q i = a k I i + b k q_i=a_kI_i+b_k qi​=ak​Ii​+bk​

    • 公式推导结束


优化结果
  • 原因:由于 a k , b k a_k,b_k ak​,bk​是根据某一个窗口求得的值,但是对于一个像素,是有多个窗口进行重叠了,所以要求得一个像素的 a k , b k a_k,b_k ak​,bk​值,需要考虑与该像素有关的所有重叠窗口。

  • 优化策略:

    • 对与中心像素有关的重叠窗口求得的 a k , b k a_k,b_k ak​,bk​值进行加权平均,具体操作是使用均值滤波器。
  • 优化后公式

    • q i = 1 w ∑ k ϵ w k a k I i + b i q_i=frac{1}{w}sum_{kepsilon w_k}a_kI_i+b_i qi​=w1​kϵwk​∑​ak​Ii​+bi​

算法流程


调参调节

对于该算法,当 I = p I=p I=p时,即输入图像和引导图像是同一副图像时,该算法即成为一个边缘保持滤波器。同时,方程的解也可作如下表示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mtnORW3Q-1657358757822)(C:UsersEDYDesktop美颜与滤镜images引导滤波image-20220709163344084.png)]

  • ϵ epsilon ϵ相当于界定平滑预取和边缘区域的阈值
  • 情况一: 对于平坦区域,是低方差区域,方差远小于 ϵ epsilon ϵ。从而$a_kapprox 0 , , ,b_kapprox bar{p_k}$,相当于在该区域做了均值滤波
  • 情况二: 对于边缘区域,是高方差区域,方差远小于 ϵ epsilon ϵ。从而$a_kapprox 1 , , ,b_kapprox 0$,相当于在该区域保持了原有梯度
算法优势
  • 与双边滤波对比

    • 1.双边滤波有梯度反转现象,而导向滤波可以完好的保留图像原有的梯度

      • 从图中可以观察到,双边滤波梯度反转现象可以很明显的看到,即在边缘区域,图像原本的斜线上升梯度在进行双边滤波后,图像的梯度不再是原有的斜线,而是出现了梯度波动,图像没有良好的保持原有梯度

      • 而对图像进行导向滤波后,滤波后的图像的梯度还能保持良好

    • 2.速度上的优势,双边滤波的时间复杂度为 O ( n k 2 ) O(nk^2) O(nk2),而导向滤波的时间复杂度 O ( n ) O(n) O(n),n表示图像像素数量,k表示滤波核的尺寸。

      • 导向滤波在均值滤波时候也是涉及到滤波核的尺寸,为什么时间复杂度为 O ( n ) O(n) O(n)?
        • 均值滤波器可以被优化为O(n)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008853.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号