Bilateral Filters(双边滤波算法)的超简单原理,学不会你打我。
摘要:
双边滤波(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(双边滤波算法)的超简单原理,学不会你打我。相关推荐
- Bilateral Filtering(双边滤波)算法研究
1. 简介 图像平滑是一个重要的操作,而且有多种成熟的算法.这里主要简单介绍一下Bilateral方法(双边滤波),这主要是由于前段时间做了SSAO,需要用bilateral blur 算法进行降噪. ...
- java 滤波算法_双边滤波算法
1.原理 高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息. 高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的 ...
- Bilateral Filters(双边滤波算法)原理及实现(一)
双边滤波算法原理 双边滤波是一种非线性滤波器,它可以达到保持边缘.降噪平滑的效果.和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高 ...
- 图像处理:双边滤波算法
今天主要是回顾一下双边滤波,我曾经在这篇--图像处理:推导五种滤波算法中推导过它,其中包含了我自己写的草稿图. 目录 双边滤波算法原理 (1)空间域核 (2)值域核 理解双边滤波 空域权重编辑和值域 ...
- c语言双边滤波算法,快速双边滤波 附完整C代码
很早之前写过<双边滤波算法的简易实现bilateralFilter>. 当时学习参考的代码来自cuda的样例. 相关代码可以参阅: https://github.com/johng12/c ...
- 零起点学算法03——超简单模仿算术题
零起点学算法03--超简单模仿算术题 Description 计算机计算能力很强哦. 让计算机帮你算其实也很容易,不过要学好计算机语言哦. 下面请看一个例子:要求计算机计算1+2的值并输出. 这 ...
- python:实现Bilateral Filter双边滤波器算法(附完整源码)
python:实现Bilateral Filter双边滤波器算法 import math import sys import cv2 import numpy as np def vec_gaussi ...
- opencv 双边滤波算法(Bilateral Filters)原理及实现
双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单.非迭代.局部处理的特点.之所以能够达到保边去噪的滤波效 ...
- c语言双边滤波算法,浅析bilateral filter双边滤波器的理解
图像去噪的方法很多,如中值滤波,高斯滤波,维纳滤波等等.但这些降噪方法容易模糊图片的边缘细节,对于高频细节的保护效果并不明显.相比较而言,bilateral filter双边滤波器可以很好的边缘保护, ...
最新文章
- openGL学习笔记(1)——常用方法原型解释
- Android权限处理,Android校招面试指南
- TI-BLE协议栈的GATT
- 简介Linux磁盘管理与文件系统
- Scala入门到精通——第十八节 隐式转换与隐式参数(一)
- Gartner 组织世界BI大会,PowerBI 与 Tableau 同台竞技
- linux 加入ad 用ssh,使用samba验证AD用户,允许AD用户登录到linux
- 动态规划应用--双11购物凑单
- Linux学习Vim使用及账号用户管理
- Git---命令行语法
- 大数据之-Hadoop3.x_MapReduce_WordCount编写_Driver---大数据之hadoop3.x工作笔记0091
- oracle 删除xml记录,Oracle之xml的增删改查操作
- java 打印日志乱码
- selenium 实现循环点击_webdriver处理循环点击
- HTML MarkDown编辑器实现
- 海康人脸认证设备对接
- c语言程序设计万年历要求功能如下: 1,查询某年某月某日是星期几,c语言万年历...
- ie10不适用计算机,无发安装KB2731771,提示此更新不适用于您的计算机。无法安装ie10,不知道是否跟这个更新无 - Microsoft Community...
- TCR历史论文多久能发表?
- 从C端市场延伸至B端业务拓展,流利说深耕行业英语价值几何?