导向滤波与opencv python实现
定义
导向滤波是一个线性滤波,输出为由引导图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}_kpk是窗口内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≈pk,即相当于对该区域作均值滤波。
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实现相关推荐
- 美颜(磨皮,大眼)opencv python实现
本文是利用opencv python 的美颜(磨皮,大眼)实现. 1 磨皮 1.1 导向滤波 磨皮使用的是导向滤波进行磨皮.关于导向滤波的介绍,可以看我的另一篇文章导向滤波与opencv python ...
- OpenCV中导向滤波介绍与应用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导向滤波介绍 导向滤波是使用导向图像作为滤波内容图像,在导向图像上 ...
- 【OpenCV 例程200篇】61. 导向滤波(Guided filter)
[OpenCV 例程200篇]61. 导向滤波(Guided filter) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续 ...
- OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内
OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...
- 快速导向滤波 matlab,导向滤波小结:从导向滤波(guided filter)到快速导向滤波(fast guide filter)的原理,应用及opencv实现代码...
http://blog.csdn.net/kuweicai/article/details/78385871 1. 导向滤波简介 导向滤波是何凯明在学生时代提出的一个保边滤波(edge-preserv ...
- 基于导向滤波的暗通道先验去雾算法(Python,可直接运行)
基于导向滤波的暗通道先验去雾算法(Python语言,可直接运行) 1 编译环境 2 原理介绍 2.1 暗通道先验 2.1.1 暗通道先验理论与去雾模型 2.1.2 处理步骤 2.2 导向滤波求t(x) ...
- 【OpenCV图像处理】十七、图像的导向滤波
http://blog.csdn.net/qq_34784753/article/details/70229009?locationNum=12&fps=1 导向图滤波是一种图像滤波技术,通过 ...
- opencv 实现导向滤波
from:http://blog.csdn.net/wds555/article/details/23176313 何凯明去雾算法中的导向滤波实现,原文地址导向滤波. 导向图像I,滤波输入图像p以及输 ...
- 导向滤波小结:从导向滤波(guided filter)到快速导向滤波(fast guide filter)的原理,应用及opencv实现代码
1. 导向滤波简介 导向滤波是何凯明在学生时代提出的一个保边滤波(edge-preserving smoothing)算法.何凯明在cv圈应该算是名人了,学生时代关于图像去雾的研究就以第一作者的身份获 ...
- OpenCV——几种图像滤波总结(python实现和c++实现)
OpenCV--图像滤波原理及实现 4.1 简介 图像的实质是一种二维信号,滤波是信号处理中的一个重要概念.在图像处理中,滤波是一种非常常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是 ...
最新文章
- 【.NET】正则表达式笔记
- wordpress hmailserver等相关 3
- Java多线程系列(十一):ReentrantReadWriteLock的实现原理与锁获取详解
- OpenCV3.4.3DNN 模块中sample-colorization、Easy-textdetector、openpose
- 有下界的最小费用可行流2.0(bzoj 3876: [Ahoi2014]支线剧情)
- Makefile 管理工具 — Automake and Autoconf
- jdbc连接数据库步骤oracle,jdbc连接oracle数据库的步骤
- 乌龟git配置ssh密钥
- MATLAB——imhist函数
- Navicat Premium使用教程
- wps表格错开半行_word表格错开半行-Excel 表格上下怎么错位!
- 本地安装MySQL详细步骤
- makefile中wildcard的理解
- 大数据-玩转数据-IDEA创建Maven工程
- 计算机绘图图框实验报告,制图基础及计算机绘图实验报告.doc
- 小白也能写前端?推荐一款超实用的app----JsHD调试器,助你写出炫酷的网页!
- html下拉框动态增加成员,JavaScript实现左右下拉框动态增删示例
- oracle memory_error,ORA-27102: out of memory Linux-x86_64 Error: 12: Cannot allocate memory
- facebook-share(分享)
- 【融职培训】Web前端学习 第2章 网页重构1 第一个网页