opencv-双边滤波
一、双边滤波原理
双边滤波(Bilateral Filter)是非线性滤波中的一种。这是一种结合图像的空间邻近度与像素值相似度的处理办法。在滤波时,该滤波方法同时考虑空间临近信息与颜色相似信息,在滤除噪声、平滑图像的同时,又做到边缘保存。
双边滤波采用了两个高斯滤波的结合。一个负责计算空间邻近度的权值,也就是常用的高斯滤波器原理。而另一个负责计算像素值相似度的权值。在两个高斯滤波的同时作用下,就是双边滤波。
如上图所示,双边滤波的图像边缘信息被较好的保留,而高斯滤波的边缘信息则十分模糊。
二、双边滤波公式
g(i,j)=∑(k,l)∈S(i,j)f(k,l)w(i,j,k,l)∑(k,l)∈S(i,j)w(i,j,k,l)g(i,j)= {\frac {\sum_{(k,l)\in S(i,j)}f(k,l)w(i,j,k,l)} {\sum_{\substack{(k,l)\in S(i,j)}}w(i,j,k,l)} }g(i,j)=∑(k,l)∈S(i,j)w(i,j,k,l)∑(k,l)∈S(i,j)f(k,l)w(i,j,k,l)
S(i, j):指以 (i, j) 为中心的 (2N+1)x(2N+1) 的大小的范围;
f(k, l):(多个) 输入点;
w(i, j, k, l):代表经过两个高斯函数计算出的值(这里还不是权值)
g(i, j):输出点;
上述公式我们进行转化,假设公式中 w(i,j,k,l) 为 m,则有
g(i,j)=f1∗m1+f2∗m2+⋯+fn∗mnm1+m2+⋯+mng(i,j)= {\frac {f_1*m_1+f_2*m_2+ \cdots +f_n*m_n} {m_1+m_2+ \cdots +m_n} }g(i,j)=m1+m2+⋯+mnf1∗m1+f2∗m2+⋯+fn∗mn
设 m1+m2+m3…+mn=Mm_1+m_2+m_3 … +m_n = Mm1+m2+m3…+mn=M,则有
g(i,j)=f1∗m1M+f2∗m2M+⋯+fn∗mnMg(i,j) = f_1 * {\frac {m_1} M} + f_2 * {\frac {m_2} M} + \cdots + f_n * {\frac {m_n} M}g(i,j)=f1∗Mm1+f2∗Mm2+⋯+fn∗Mmn
此时可以看到,这明显是图像矩阵与核的卷积运算了。其中 m1/M 代表的第一个点(或最后一个点,看后面如何实现)的权值,而图像矩阵与核通过卷积算子作加权和,最终得到输出值。
接下来我们来讨论最关键的w(i, j, k, l), ws为空间临近高斯函数,wr为像素值相似度高斯函数
w=ws∗wrw = w_s *w_rw=ws∗wr ws=e−(i−k)2+(j−l)22σs2w_s = e^{-{\frac {(i-k)^2+(j-l)^2}{2\sigma_s^2}}}ws=e−2σs2(i−k)2+(j−l)2 wr=e−∣∣f(i,j)−f(k,l)∣∣22σr2w_r = e^{-{\frac {||f(i,j)-f(k,l)||^2} {2\sigma_r^2}}}wr=e−2σr2∣∣f(i,j)−f(k,l)∣∣2 可以看到,对于 wsw_sws 来说,这就是普通的高斯滤波函数,其代入的坐标,σs\sigma_sσs 是程序输入值,该函数是在空间临近度上计算的。而 wrw_rwr 是计算像素值相似度(颜色空间),注意,这就是高斯函数代入坐标值,2σr22\sigma_r^22σr2 的上方是范数,在这里的值为 ∣∣f(i,j)−f(k,l)∣∣2||f(i,j)-f(k,l)||^2∣∣f(i,j)−f(k,l)∣∣2 。也就是两个点像素值差值的绝对值的平方。其中,彩色图片计算差值时应将(i,j)点的RGB三通道值之和减去(k,l)点的RGB三通道值之和。这里是颜色空间计算,不能当成单通道,但是在最后矩阵卷积时,是单通道与权值相乘而不是三个通道之和。
三、bilateralFilter 函数
OpenCV还给出了简单的函数形式:
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );
src : 原图, 8为整形或浮点型,单通道或者3通道;
dst : 与原图同样尺寸,但不能是原图;
d : 滤波核的直径;
sigmaColor : σr\sigma_rσr
sigmaSpace : σs\sigma_sσs
borderType : 用于设置图像边界元素的方式
双边滤波的效果(来自网络图片)
本文第一、二部分转载自 OpenCV双边滤波详解及实代码实现
opencv-双边滤波相关推荐
- 【python】opencv双边滤波
对于磨皮这种复杂的图像处理,用scipy这种科学计算包显然会比较复杂,故而使用神器opencv pip install opencv-python 磨皮的本质就是将表面变得模糊,然而直接使用模糊会让轮 ...
- opencv 双边滤波算法(Bilateral Filters)原理及实现
双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单.非迭代.局部处理的特点.之所以能够达到保边去噪的滤波效 ...
- OpenCV双边滤波bilateralFilter去除脸部雀斑
<OpenCV系列教程> <深度学习-如何提高数据集质量> 源码下载45-BilateralFilter.py 先展示一下效果: 通过多次调大,sigmaColor和sigma ...
- OpenCV 双边滤波
def bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None) src:源图像,需要为8位或者浮点型单通道 ...
- OpenCV实现双边滤波
双边滤波的数学原理在其他博客中很容易找到,再此不在赘述.仅仅记录一下自己对这个滤波器功能的一些总结. 个人觉得这个滤波器十分优美和简洁,其特点: 双边滤波同时考虑了空间(像素距离)和像素值层面的因素. ...
- c语言双边滤波算法,浅析bilateral filter双边滤波器的理解
图像去噪的方法很多,如中值滤波,高斯滤波,维纳滤波等等.但这些降噪方法容易模糊图片的边缘细节,对于高频细节的保护效果并不明显.相比较而言,bilateral filter双边滤波器可以很好的边缘保护, ...
- 双边滤波(Bilateral filter)
双边滤波器(Bilateral filter)是一种可以保边去噪的滤波器.可以滤除图像数据中的噪声,且还会保留住图像的边缘.纹理等(因噪声是高频信号,边缘.纹理也是高频信息,高斯滤波会在滤除噪声的同时 ...
- 【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
邻域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积禅城右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用的邻 ...
- 双边滤波--OpenCV实现
双边滤波器的定义双边滤波,Bilateral filter.是一种可以保边去噪的滤波器.之所以可以达到此去噪效果,是因为滤波器是由两个函数构成.一个函数是由几何空间距离决定滤波器系数.另一个由像素差值 ...
- 【OpenCV 例程200篇】60. 非线性滤波—联合双边滤波
[OpenCV 例程200篇]60. 非线性滤波-联合双边滤波(Joint bilateral filter) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白 ...
最新文章
- Nova Conductor 与 Versioned Object Model 机制
- qt tableWidget 表格控件使用
- 编译php,ldap问题
- 《Oracle高性能自动化运维》一一2.3 Library Cache
- 数据结构与算法之-----图(搜索算法)
- hosts ip 指向ip_不同网段共享打印机?不同IP段怎么共享打印机?
- ueditor 编辑器增加css样式_Web入侵之利用编辑器漏洞入侵
- mysql主节点1593从节点正常_keepalived+双主架构
- 关于mpvue 切换页面数据没清空
- SpringMVC中的九大组件
- 数字信号处理概览与框图
- EPLAN2.9程序安装及注意事项
- flutter 语音转文字(科大讯飞)
- 按钮按下时立体感效果
- 超过1M的网络动图添加到微信表情包
- 【饭谈】面试官:速斩此子,切不可引狼入室
- 电商直播增加人气,留人技巧有哪些
- 3d卷积神经网络应用,神经网络仿真软件
- DFS(深搜)算法解析
- c语言程序设计P320,《C程序设计》作业内容
热门文章
- 屏幕使用时间 不能申请延长_屏幕时间限制什么都不教我们的孩子
- maven项目 骨架搭建
- GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...
- 推荐一款超级下载利器工具,突破网盘的下载限制
- 2022网易笑招4.21笔试题
- OVS 内核CT实现
- 给iframe添加loading状态
- 利用 OpenCC 工具进行文字的简繁转换
- python语言是什么语言-python是一门什么样的语言?
- 什么是drop-in item renderer