定义

导向滤波是一个线性滤波,输出为由引导图III乘上输入图PPP得到的权重的加权平均。

iii和jjj是像素下标,滤波核WijW_{ij}Wij​为III的函数,其不依赖于ppp。

引导滤波器的关键假设是引导I和滤波器输出qqq之间的局部线性模型。我们假设qqq是III在以像素kkk为中心的窗口ωk\omega_kωk​中的线性变换。

这里假设(aka_kak​, bkb_kbk​)在ωk\omega_kωk​中为线性的常数。其中ωk\omega_kωk​为一个半径为rrr的正方形窗口。在一个窗口ωk\omega_kωk​内,只会确定一个aka_kak​和bkb_kbk​,但可以根据一个aka_kak​和bkb_kbk​,求出∣ω∣|\omega|∣ω∣个qiq_iqi​。这个局部线性模型确保qqq只有在III有边缘时才有边缘,因为∇q∇q∇q = a∇Ia∇Ia∇I。

推导

利用岭回归确认参数aka_kak​, bkb_kbk​的值,也就是求下式的最小值:

其中ϵ\epsilonϵ是一个正则化参数,以防aka_kak​过大。
可以认为qiq_iqi​为pip_ipi​去掉噪音nin_ini​后的图片:

得出的结果如下:

其中μk\mu_kμk​和σk2\sigma_k^2σk2​是III在ωk\omega_kωk​内的均值与方差。∣ω∣|\omega|∣ω∣是窗口内的像素数目。p‾k\overline{p}_kp​k​是窗口内ppp的均值。具体推导可参考:公式推导

将这个线性模型应用在整幅图像上的所有小窗口上,qiq_iqi​在不同的小窗口内会有不同取值,所以需要将qiq_iqi​取平均:

论文指出,一开始提出的加权平均的权重如下式:

其只取决于引导图像III。具体推导详见论文3.3。

ϵ\epsilonϵ值的影响

当I=pI=pI=p时,该算法即成为一个边缘保持滤波器。

Case 1:

如果某个窗口在平坦区域,那么该区域的方程σk2\sigma_k^2σk2​将远远小于ϵ\epsilonϵ。从而ak≈0a_k\approx0ak​≈0,bk≈p‾kb_k\approx\overline{p}_kbk​≈p​k​,即相当于对该区域作均值滤波。

Case 2:

如果某个窗口在高方差区域,那么该区域的方程σk2\sigma_k^2σk2​将远远大于ϵ\epsilonϵ。从而ak≈1a_k\approx1ak​≈1,bk≈0b_k\approx0bk​≈0,即相当于在区域保持原有梯度。


rrr与ϵ\epsilonϵ越大,图像越模糊,越趋于做均值滤波。

代码


输入图像必须得先进行归一化后再处理,否则滤波后会有超过255的值

def guided_filter(I,p,win_size,eps):mean_I = cv2.blur(I,(win_size,win_size))mean_p = cv2.blur(p,(win_size,win_size))corr_I = cv2.blur(I*I,(win_size,win_size))corr_Ip = cv2.blur(I*p,(win_size,win_size))var_I = corr_I-mean_I*mean_Icov_Ip = corr_Ip - mean_I*mean_pa = cov_Ip/(var_I+eps)b = mean_p-a*mean_Imean_a = cv2.blur(a,(win_size,win_size))mean_b = cv2.blur(b,(win_size,win_size))q = mean_a*I + mean_breturn q

参考文献

Guided Image Filtering
导向滤波(Guided Filter)公式详解

导向滤波与opencv python实现相关推荐

  1. 美颜(磨皮,大眼)opencv python实现

    本文是利用opencv python 的美颜(磨皮,大眼)实现. 1 磨皮 1.1 导向滤波 磨皮使用的是导向滤波进行磨皮.关于导向滤波的介绍,可以看我的另一篇文章导向滤波与opencv python ...

  2. OpenCV中导向滤波介绍与应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导向滤波介绍 导向滤波是使用导向图像作为滤波内容图像,在导向图像上 ...

  3. 【OpenCV 例程200篇】61. 导向滤波(Guided filter)

    [OpenCV 例程200篇]61. 导向滤波(Guided filter) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续 ...

  4. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  5. 快速导向滤波 matlab,导向滤波小结:从导向滤波(guided filter)到快速导向滤波(fast guide filter)的原理,应用及opencv实现代码...

    http://blog.csdn.net/kuweicai/article/details/78385871 1. 导向滤波简介 导向滤波是何凯明在学生时代提出的一个保边滤波(edge-preserv ...

  6. 基于导向滤波的暗通道先验去雾算法(Python,可直接运行)

    基于导向滤波的暗通道先验去雾算法(Python语言,可直接运行) 1 编译环境 2 原理介绍 2.1 暗通道先验 2.1.1 暗通道先验理论与去雾模型 2.1.2 处理步骤 2.2 导向滤波求t(x) ...

  7. 【OpenCV图像处理】十七、图像的导向滤波

    http://blog.csdn.net/qq_34784753/article/details/70229009?locationNum=12&fps=1 导向图滤波是一种图像滤波技术,通过 ...

  8. opencv 实现导向滤波

    from:http://blog.csdn.net/wds555/article/details/23176313 何凯明去雾算法中的导向滤波实现,原文地址导向滤波. 导向图像I,滤波输入图像p以及输 ...

  9. 导向滤波小结:从导向滤波(guided filter)到快速导向滤波(fast guide filter)的原理,应用及opencv实现代码

    1. 导向滤波简介 导向滤波是何凯明在学生时代提出的一个保边滤波(edge-preserving smoothing)算法.何凯明在cv圈应该算是名人了,学生时代关于图像去雾的研究就以第一作者的身份获 ...

  10. OpenCV——几种图像滤波总结(python实现和c++实现)

    OpenCV--图像滤波原理及实现 4.1 简介 图像的实质是一种二维信号,滤波是信号处理中的一个重要概念.在图像处理中,滤波是一种非常常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是 ...

最新文章

  1. 【.NET】正则表达式笔记
  2. wordpress hmailserver等相关 3
  3. Java多线程系列(十一):ReentrantReadWriteLock的实现原理与锁获取详解
  4. OpenCV3.4.3DNN 模块中sample-colorization、Easy-textdetector、openpose
  5. 有下界的最小费用可行流2.0(bzoj 3876: [Ahoi2014]支线剧情)
  6. Makefile 管理工具 — Automake and Autoconf
  7. jdbc连接数据库步骤oracle,jdbc连接oracle数据库的步骤
  8. 乌龟git配置ssh密钥
  9. MATLAB——imhist函数
  10. Navicat Premium使用教程
  11. wps表格错开半行_word表格错开半行-Excel 表格上下怎么错位!
  12. 本地安装MySQL详细步骤
  13. makefile中wildcard的理解
  14. 大数据-玩转数据-IDEA创建Maven工程
  15. 计算机绘图图框实验报告,制图基础及计算机绘图实验报告.doc
  16. 小白也能写前端?推荐一款超实用的app----JsHD调试器,助你写出炫酷的网页!
  17. html下拉框动态增加成员,JavaScript实现左右下拉框动态增删示例
  18. oracle memory_error,ORA-27102: out of memory Linux-x86_64 Error: 12: Cannot allocate memory
  19. facebook-share(分享)
  20. 【融职培训】Web前端学习 第2章 网页重构1 第一个网页

热门文章

  1. 微生物组-扩增子16S分析和可视化(2022.7本周开课)
  2. wkhtmltopdf工具将html转换为pdf
  3. 怎么将CAD图纸转化为PDF格式呢?教你两个妙招搞定!
  4. HandlerThread的使用场景和用法
  5. k-means聚类算法过程与原理
  6. 问题G:卡布列克常数
  7. 继美国后新加坡电信运营商遭DDoS攻击 部分用户断网
  8. linux安装网卡驱动make报错,linux 安装网卡驱动详解
  9. Ubuntu网卡驱动安装
  10. X86与X64之间的区别