摘要:
双边滤波(Bilateral Filters)是非常常用的一种滤波,它可以达到保持边缘、降噪平滑的效果。和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高斯分布。最重要的是,双边滤波的权重不仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程度、颜色强度,深度距离等)。

一:如何判断边缘?
在开始之前,我们先讨论一下如何判断边缘。一般而言,区分图像是否为边缘部分的方法如下:
1:在图像的边缘部分,像素值的变化较为剧烈。
2:在图像的非边缘区域,像素值的变换较为平坦。
通过以上两点,我们可以总结出,想要保留图像边缘,必须引入一个能够衡量图像像素变换剧烈程度的变量。

二:双边滤波算法原理
霍金曾经说过,如果一本书里面有一个公式,那么这本书的销量将会失去上万个读者。本文将出现好几个公式,按这样会有失去许多个读者,但是不出现公式是不可能的,作者将尽力解释公式的含义,希望看官看过后觉得有用就点一个订阅。话不多说,咱们开门见山。
首先看双边滤波的公式:

其中:
先看到这两个公式不要慌,慢慢听我说公式中的符号是什么意思。我们先做一些准备。
我们选择一个的框,随便放在一张图中。像我这样选择一个5×5的框放在10像素×10像素的图上面。分别沿水平方向和竖直向下方向建立坐标轴,水平的叫X轴,竖直向下的叫Y轴。图中一个一个小方框代表一个像素值,这些像素值都有了一个坐标。咱们举一个例子:在这个5×5的框中,像素为165的这个点坐标为(0,0),像素为156的这个点的坐标为(1,0),像素为56的这个点坐标为(0,1),像素为0的这个点的坐标为(1,1),诸如此类。
好了,现在我们做了一些准备工作,接下来解释符号含义就方便了许多。q是输入的像素点,它代表上图中5×5的方框中其中的一个像素点。我们先不管累加符号∑和q∈S这个符号,接下来需要一点数学基础,GσsGσ_sGσs​是为空间域核,GσrGσ_rGσr​是图像像素域核。
这是两个二维高斯函数,二维高斯函数的公式为(我在网上找的一张图,带了水印,不过无关紧要):
不过这里我们对二维高斯函数进行了一些小的改动,让他们更加符合我们的要求,这里给出GσsGσ_sGσs​和GσrGσ_rGσr​的公式,:
其中:


q代表输入像素点,m与n是输入像素的横坐标与纵坐标,p是方框中心像素点,i与j是方框中心像素的坐标,I(m,n)代表输入像素的值,I(i,j)代表方框中心像素的值,σsσ_sσs​与σrσ_rσr​是我们自己设定的值。比如:q代表输入像素,在我们的方框中,我们选择像素值为156的点为输入像素,那么它的坐标为(1,0),m=1,n=0,I(1,0)=156。方框中心的点的坐标为(2,2),那么i=2,j=2,I(2,2)=146。
ps:这个图片太大了,等我学会插入公式后再来修改一下) 代表输出的像素值,也就是我们在方框中心点要更新的像素值。我们现在举一个例子来说明。
①首先遍历整个5×5的小框,第一个遍历到的点是165,它的坐标是(0,0),像素值是165,
那么中心点与该点的空间域计算结果为:

②再计算中心点与该点的像素域结果:

当 σsσ_sσs​与 σrσ_rσr​ 分别为5和20时,Gσs = 0.8521,Gσr = 0.6368。
③我们将σsσ_sσs​与 σrσ_rσr​ 和第一个像素值(ps:第一个像素值是165)相乘,这三个数相乘得到第一个结果。还记得累加符号∑和q∈S符号吗?其中S指的就是5×5的这个框,它的意思就是从第一个像素开始遍历,按照①②的步骤,求得每一个在5×5方框中的像素的空间域和像素域的结果,并且将像素值和空间域计算结果和像素域结果相乘,最后将这些结果相加起来,得到滤波算法公式的分子。

好了,我们解释完双边滤波算法的分子,接着解释分母。
当我们遍历整个5x5的方框,将方框内每个像素点都与中心点建立联系,求出它们的 Gσs 与 Gσr 的值,将 Gσs 与 Gσr 相乘即得到每个点对应的Wp,即Wp = Gσs × Gσr,将方框中25个像素点对应Wp进行累加,得到一个总的Wp,便是分母,我们在计算分子的时候可以顺便算出分母。我们再来捋一遍,在遍历结束后,用每个点的Wp乘上该点的像素值I(m, n),并求和,作为分子。将每个点的Wp相加,作为分母,两者相除,即得到需要的新输出图像的中心点(i,j)的像素值。也就是我们的滤波输出,我们将小框从左往右,从上往下不断移动,按照我们的算法不断更新方框中心的像素值,就得到了双边算法的输出。
好了,我讲完了,你听懂了吗?有问题可以留言,我会积极回答的。

Bilateral Filters(双边滤波算法)的超简单原理,学不会你打我。相关推荐

  1. Bilateral Filtering(双边滤波)算法研究

    1. 简介 图像平滑是一个重要的操作,而且有多种成熟的算法.这里主要简单介绍一下Bilateral方法(双边滤波),这主要是由于前段时间做了SSAO,需要用bilateral blur 算法进行降噪. ...

  2. java 滤波算法_双边滤波算法

    1.原理 高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息. 高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的 ...

  3. Bilateral Filters(双边滤波算法)原理及实现(一)

    双边滤波算法原理 双边滤波是一种非线性滤波器,它可以达到保持边缘.降噪平滑的效果.和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高 ...

  4. 图像处理:双边滤波算法

    今天主要是回顾一下双边滤波,我曾经在这篇--图像处理:推导五种滤波算法中推导过它,其中包含了我自己写的草稿图. 目录 双边滤波算法原理 (1)空间域核 (2)值域核 理解双边滤波 空域权重​编辑和值域 ...

  5. c语言双边滤波算法,快速双边滤波 附完整C代码

    很早之前写过<双边滤波算法的简易实现bilateralFilter>. 当时学习参考的代码来自cuda的样例. 相关代码可以参阅: https://github.com/johng12/c ...

  6. 零起点学算法03——超简单模仿算术题

    零起点学算法03--超简单模仿算术题 Description 计算机计算能力很强哦.  让计算机帮你算其实也很容易,不过要学好计算机语言哦.  下面请看一个例子:要求计算机计算1+2的值并输出.  这 ...

  7. python:实现Bilateral Filter双边滤波器算法(附完整源码)

    python:实现Bilateral Filter双边滤波器算法 import math import sys import cv2 import numpy as np def vec_gaussi ...

  8. opencv 双边滤波算法(Bilateral Filters)原理及实现

    双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单.非迭代.局部处理的特点.之所以能够达到保边去噪的滤波效 ...

  9. c语言双边滤波算法,浅析bilateral filter双边滤波器的理解

    图像去噪的方法很多,如中值滤波,高斯滤波,维纳滤波等等.但这些降噪方法容易模糊图片的边缘细节,对于高频细节的保护效果并不明显.相比较而言,bilateral filter双边滤波器可以很好的边缘保护, ...

最新文章

  1. openGL学习笔记(1)——常用方法原型解释
  2. Android权限处理,Android校招面试指南
  3. TI-BLE协议栈的GATT
  4. 简介Linux磁盘管理与文件系统
  5. Scala入门到精通——第十八节 隐式转换与隐式参数(一)
  6. Gartner 组织世界BI大会,PowerBI 与 Tableau 同台竞技
  7. linux 加入ad 用ssh,使用samba验证AD用户,允许AD用户登录到linux
  8. 动态规划应用--双11购物凑单
  9. Linux学习Vim使用及账号用户管理
  10. Git---命令行语法
  11. 大数据之-Hadoop3.x_MapReduce_WordCount编写_Driver---大数据之hadoop3.x工作笔记0091
  12. oracle 删除xml记录,Oracle之xml的增删改查操作
  13. java 打印日志乱码
  14. selenium 实现循环点击_webdriver处理循环点击
  15. HTML MarkDown编辑器实现
  16. 海康人脸认证设备对接
  17. c语言程序设计万年历要求功能如下: 1,查询某年某月某日是星期几,c语言万年历...
  18. ie10不适用计算机,无发安装KB2731771,提示此更新不适用于您的计算机。无法安装ie10,不知道是否跟这个更新无 - Microsoft Community...
  19. TCR历史论文多久能发表?
  20. 从C端市场延伸至B端业务拓展,流利说深耕行业英语价值几何?

热门文章

  1. php读取文件名称,php如何获取文件名
  2. SWOT基础与个人SWOT分析
  3. java运算符(java运算符优先级由高到低)
  4. 什么是框架常见的框架?
  5. 支付宝扫码支付(沙箱环境)
  6. MATLAB科研数据可视化方法
  7. Paragraph ended before \end was complete.
  8. APP推广渠道精华十大渠道方法
  9. 2022年自学Python的万能神器,超有用
  10. 解决MathType编写的公式在WPS中上浮的问题