【数字图像处理】Bilateral Filters
【数字图像处理】Bilateral Filters
简单介绍
双边滤波是一种非线性的可以模糊图像并且能保留一定的边缘信息的技术。
它能够将图像分解成不同的尺度,而不会在修改后产生光晕(haloes),这使得它在计算摄影应用中无处不在(ubiquitous),例如调色,风格转换,重调光照,去噪(tone mapping, style transfer, relighting, and denoising)。
双边滤波的成功主要有以下一些:
- 它的公式很简单:每个像素被它的邻居的加权平均值代替。这方面很重要,因为很容易获得关于其行为的直观理解,从而适应特定于应用程序的需求并实现它。
- 它只依赖于两个参数,这两个参数表示要保留的特征的大小和对比度。
- 它可以以非迭代的方式使用。这使得参数很容易设置,因为它们的影响不是通过多次迭代累积的。
- 由于高效的数值策略,以及,甚至在图形硬件可用的情况下,它可以以交互速度在大的图像上进行计算。
具体表达
双边滤波和一般的高斯滤波(卷积)有着密切的关联。
Gaussian Convolution

- \(I_p\)表示图像在像素位置p上的值,对于灰度图,则表示单个数值
- \(F[I]\)表示图像\(I\)经过滤波器\(F\)处理后的输出
- \(S\)表示所有可能的图像位置集合,将其命名为spatial domain
- \(R\)表示所有可能的像素值集合,将其命名为range domain
- \(\sum_{p \in S}\)表示对于所有的使用p索引的图像像素进行加和
- \(| \cdot |\)表示绝对值
- \(|| \cdot ||\)表示L2范数,这里使用\(||p-q||\)表示对应于位置p和q的两个像素之间的欧氏距离
- \(\sigma\)表示邻域范围

Bilateral Filtering
双边滤波以一种类似于高斯卷积的方法定义为邻近像素的加权平均。不同的是,双边滤波考虑了邻居的值的差异,在平滑的时候可以保留边缘信息。
双边滤波的关键想法在于,对于一个影响其他像素的像素,它应该不只出现在相近的位置,也应该有着相似的值。
双边滤波的一个重要特征是权值相乘:如果任一权值接近于零,则不发生平滑作用。以大的空间高斯分布与小的范围高斯分布相结合的算法为例,尽管空间范围很大,但只能实现有限的平滑效果。范围权重会强制保留轮廓。

- \(\sigma_s\)和\(\sigma_r\)表示对于图像\(I\)的滤波的量(也就是滤波器范围)
- \(G_{\sigma_s}\)表示空间高斯加权,以降低远处像素的影响
- \(G_{\sigma_r}\)表示范围高斯加权,以降低像素q在亮度值与像素p差异较大的时候,造成的影响

相关链接
- Bilateral Filtering: Theory and Applications:http://people.csail.mit.edu/sparis/publi/2009/fntcgv/Paris_09_Bilateral_filtering.pdf
- A Gentle Introduction to Bilateral Filtering and its Applications:http://people.csail.mit.edu/sparis/bf_course/
【数字图像处理】Bilateral Filters的更多相关文章
- python数字图像处理(1):环境安装与配置
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
- 初始----python数字图像处理--:环境安装与配置
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
- 基于小波变换的数字图像处理(MATLAB源代码)
基于小波变换的数字图像处理(MATLAB源代码) clear all; close all; clc;M=256;%原图像长度N=64; %水印长度[filename1,pathname]=uiget ...
- 数字图像处理作业使用OpenCV - 使用笔记
数字图像处理作业的输入图像全部都是灰度图像,所以汇总一下自己遇到的问题答案. OCV的图像容器是Mat<typename>,可以用imread(filename)读取图像,filename ...
- python数字图像处理(17):边缘与轮廓
在前面的python数字图像处理(10):图像简单滤波 中,我们已经讲解了很多算子用来检测边缘,其中用得最多的canny算子边缘检测. 本篇我们讲解一些其它方法来检测轮廓. 1.查找轮廓(find_c ...
- 数字图像处理之sobel边缘检测
在前两部文章介绍了几种边缘检测算法,和位图的内存结构.如果对前两篇文章已经理解透彻 了,那么本文将带你进入数字图像处理的世界. 本文通过C代码实现基本的sobel边缘检测,包括8个方向和垂直方向: 代 ...
- 《数字图像处理原理与实践(MATLAB版)》一书之代码Part6
本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part6,辑录该书第281至第374页之代码,供有须要读者下载研究使用.代码运行结果请參见原书配图,建议下载代码前阅读下 ...
- 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2
本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...
- 《数字图像处理原理与实践(MATLAB文本)》书代码Part7
这篇文章是<数字图像处理原理与实践(MATLAB文本)>一本书的代码系列Part7(由于调整先前宣布订单,请读者注意分页程序,而不仅仅是基于标题数的一系列文章),第一本书特色186经225 ...
随机推荐
- 树形结构根据最后一位的id匹配整个路径
function recursionTreeId(_arr, _id) { _arr.forEach(item => { if (item.id === _id) { optionArr.uns ...
- 数组 slice方法和splice方法的区别
一.slice() 方法 slice()方法可以从已有的数组中返回选定的元素. 语法: arrayObject.slice(start,end) 参数: start:(截取开始位置的索引,包含开始索引 ...
- node.js实现web解析dns
var http = require('http'), //服务器创建 dns = require('dns'), //DNS查询,主要负责解析当前DNS域名,返回DNS服务器IP地址 fs = re ...
- 实体字符转换,同样变量密码加盐MD5后生成的加密字符串不同解决办法 (原)
我是首次登录系统自动生成一个密码,格式大概是: abcd1234& 这种格式 , 比如加密规则就是一个 MD5() 然后,首次账号密码登录,输入密码 abcd1234&,一直提示 ...
- JS框架_(JQuery.js)点赞按钮动画
百度云盘 传送门 密码: 0ihy 点赞按钮动画效果: (点击一次随机生成一颗小爱心,作为点赞动画~) <!doctype html> <html lang="en&quo ...
- 扫描工具-Nikto
靶机 192.168.1.101 攻击机 192.168.1.102 尝试ping命令 第一个工具 作用 Httrack --->(把目标的网站复制过来) 这样可以减少与目标系统的交互 mkdi ...
- mybatis 中的 update 返回值
摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库 ...
- 使用 sed 命令查找和替换文件中的字符串的 16 个示例
当你在使用文本文件时,很可能需要查找和替换文件中的字符串.sed 命令主要用于替换一个文件中的文本.在 Linux 中这可以通过使用 sed 命令和 awk 命令来完成. 在本教程中,我们将告诉你使用 ...
- java导入导出下载Excel,xls文件(带下拉框)
/** * 导入excel文件 * 2014-7-23 * @return */ @RequiresPermissions("plug:product:caiwu:upload") ...
- leetcode 166分数到小数
手动排除特殊情况: 对于一般情况,使用位运算和加减法来计算除法,使用sign记录结果符号:(这部分为leetcode 29题的答案) 使用hashmap来记录循环体出现的开始位置(如果有的话),使用f ...