【数字图像处理】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 ...
随机推荐
- hdu4352 XHXJ's LIS[数位DP套状压DP+LIS$O(nlogn)$]
统计$[L,R]$内LIS长度为$k$的数的个数,$Q \le 10000,L,R < 2^{63}-1,k \le 10$. 首先肯定是数位DP.然后考虑怎么做这个dp.如果把$k$记录到状态 ...
- python算数、逻辑运算,位运算
算术运算符 对变量和数组进行算术运算. 算术运算符:+,-,*,/,% +:将连个或者多个数值相加 -:将两个数值相减 *:将两个数值相乘 /:将两个数值相除 %:取相除的余数 赋值运算符 将右边的值 ...
- qt5--字符串格式拼接
QString str=QString("x坐标为:%1 y坐标为:%2").arg(i).arg(j);
- C# 常用方法—— 32位MD5加密
其他常用方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html /// <summary> /// 32位MD5加密(小写) /// ...
- windows10禁止系统更新
- viewport的相关知识点
主要说一些viewport的基本原理以及使用 ㈠概念 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的 ...
- SpringBoot项目中,AOP的使用
Springboot中自带依赖 1.创建一个SellerAuthorizeAspect类,打上标签@Aspect和@Component @Aspect @Component @Slf4j public ...
- python环境下安装opencv库的方法
注意:安装opencv之前需要先安装numpy,matplotlib等 一.安装方法 方法一.在线安装 1.先安装opencv-python pip install opencv-python --u ...
- [CF666E]Forensic Examination:后缀自动机+线段树合并
分析 用到了两个小套路: 使用线段树合并维护广义后缀自动机的\(right\)集合. 查询\(S[L,R]\)在\(T\)中的出现次数:给\(T\)建SAM,在上面跑\(S\),跑到\(R\)的时候先 ...
- springBoot 整合 mybatis 项目实战
二.springBoot 整合 mybatis 项目实战 前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...