出处http://www.zhihu.com/question/24591127


按:今天看到这篇文章,有点感慨,散度这个概念我初次接触到至少应该是在1998年,时隔这么多年后看到这篇文章,真的

佩服作者的功底,不管怎么样,能那么形象的说出散度的意义,已经就知道作者不是一般的“人云亦云”型抄客,而是有真才实学的真知,转在这里权当是对自己的鞭策和学习。


----------------------------------------------------------------------------------割--------------------------------------------------------------------------


谢邀。回答两个问题:
1. 什么是散度?
2. 散度在图像处理中有何应用

1. 什么是散度
1.1 散度的定义
散度是作用在向量场上的一个算子。
用三维空间来举例,向量场就是在空间每一点处都对应一个特殊的三维向量的向量函数:
。比如海洋里,各点在单位时间单位体积中水的流量就是一个三维场,这个场也称为通量。

散度算子定义为:

它是一个标量函数(场),也就是说,在定义空间中每一点的散度是一个值。

1.2 散度的物理意义
用水流来解释,散度的物理意义可以叙述为:



  • 如果一点的散度大于0,那么在这一点有一个水龙头不断往外冒水(称为源点)
  • 如果一点的散度小于0,那么在这一点有一个下水道,总有一些水只进不出(称为汇点)
  • 如果一点的散度等于0,那么请放心,在这个点周围的小区域里,单位时间进来多少水就出去多少水。

1.3 数学推导
咱们来看看在一点的附近到底发生了什么。以这一点为中心,用一个边长分别为的平行于坐标轴的长方体盒子包围它,来详细分析长方体各表面水向外跑了多少。先看盒子在方向上的两个面:
第一个面是一个面积为的长方形,它的中心坐标是,这一点的通量是,用Taylor展开式可以近似为:,又因为这一长方形的外法线方向是,因此这一面在单位时间向外的流量就是二者相乘再乘以面积,由于法线的特殊形式,y、z分量自动消失了:

同理,在x负半轴上的那个面单位时间向外的流量是:

因此单位时间在x方向上的总的向外的流量是:

把三个坐标轴向外的流量加在一起,我们就得到了围绕点,体积为的长方体单位时间向外的流量是

从上面的推导立即可以得出结论:

  • 在一个区域中,单位时间向外的总流量就是把每一个小区域向外的流量加起来(内部相互抵消,最终只有区域边界上的值得以展现):


  • 平均到一个点上,单位时间向外流量的密度就是
  • 一个区域无论多复杂,只要不包含源点和汇点,其上散度的积分一定为0

1.4 散度与扩散
假设在空间中有一个浓度场,则在每一点都有一个浓度上升最快的方向,我们称其为梯度,它是一个向量场。浓度差带来的后果就是空间物质会发生运动,从高浓度向低浓度运动,其结果就是浓度中和,趋向平衡。这种运动可以用一个偏微分方程描述:

这个方程被形象地称为扩散方程,来源于物理上的连续性方程。等式右边一定是负散度,因为若一个点散度为正,说明它浓度大,扩散应该减少它的值,然而因为浓度对应的运动场是梯度的负值(高浓度向低浓度流动),因此恰好内外两个负号抵消了,最终右端就出现了貌似不科学的正散度结果,不要被迷惑住。散度算子内部的量可以是标量,也可以是矩阵,用于调节浓度差与扩散方向之间的关系。

为了更加直观地理解,咱先略去多余因子,这样方程就变成了:

等式右边被称为Laplace算子,一般用一个正三角来简写,你可以用二阶导数来理解它。在一小段时间间隔上,这个方程又可以离散化为:

直接含义就是:在每个小时间段内,如果一个点的二阶导数大于0,则把它的浓度增加一些,如果一个点二阶导数小于0,则把它的浓度降低一些。因为二阶导数大于0的点往往是下凹的点,是局部极小值,因此增加它可以让局部浓度变平滑;类似地,二阶导数小于0的点往往是上凸点,是局部极大值,要减少它才能更平滑。

当时间趋向于无穷大时,方程达到稳定,左端为0,那么我们就得到稳定值满足的条件:整个区域上散度为0。也可以理解为最终消灭了所有的源点和汇点,场变得光滑了。

2. 散度在图像去噪中的应用
在图像领域散度算子主要用在去噪中。假设一幅图像为,它的梯度算子是一个二维场,那么我们立即可以用散度算子构造一个扩散方程:

把这个扩散方程作用于图像就可以去噪了,上面已经解释了它的作用过程是比较图像上的每个点,如果一个点值比周围点低,就增加它,如果比周围点高,就减少它,实质就是平滑图像。但是由于它是各向同性的均匀扩散方程,导致图像上所有细节均匀模糊,去噪效果很糟糕。

Perona和Malik在90年代初发现,由于图像边缘往往处在梯度值较大的点处,如果扩散方程在梯度值较大的区域减速扩散,在梯度值较小的区域加速扩散,则可以在着重去噪的同时保护图像有用细节。他们修改后的扩散方程就是有名的P-M方程:


其中函数g是一个递减函数,保证随图像梯度模值增大函数值递减,起到只在图像平滑区域(小梯度点)猛烈扩散的作用。同时,这个方程还可以变形为在图像局部沿边缘方向和跨边缘方向上的两个一维扩散之和,好的算法能保证在沿着边缘方向扩散地多,跨边缘扩散地少,也就是保证c_2" src="http://zhihu.com/equation?tex=c_1%3Ec_2" eeimg="1" >,起到在去噪的同时保护边缘的作用。散度形式和方向导数形式的扩散方程是随后P-M方程改进的两个主要方向。

基于扩散方程的去噪方法的优点主要有:

  1. 结合微分几何和物理方程,比较高大上;
  2. 可以控制图像局部区域的扩散特性,对图像的控制力强;
  3. 易于推广到三维和更高维以及流形(比如地球表面)上,方程都不用变。
缺点主要有:

  1. 速度慢,因为是迭代算法;
  2. 扩散会导致边缘发生一定程度地移位;
  3. 理论难于往深发展。


最后请欣赏梵高的名画星空:

各向同性扩散方程对其进行均匀平滑的结果(啥都看不清了):
如果第一幅图是初始浓度,这一幅图就是一段时间后的中和了的浓度。最终,图像成为一张纯色画布,恰好是原始图像的均值。这一过程在数学上严格等价于对图像做方差不断增大的高斯卷积。

修改扩散系数后方向可控平滑的结果(只沿着边缘扩散,保护边缘):
明显可以看出,在平滑噪声(细小颜色杂质)的同时,大边缘得到了很好地保留。

注:原文关于函数g的叙述有错,感谢xiao huang的细心观察!
参考文献
1. R.P.Feynman et al. 费恩曼物理学讲义(第二卷).上海科学技术出版社, 2005.
2. 王大凯, 侯榆青,彭进业. 图像处理的偏微分方程方法. 科学出版社, 2008.
3. 王小龙,彭国华. 彩色图像的方向扩散去噪模型研究[J]. 计算机工程与应用, 2013, 49(22): 208-211.

(转)在图像处理中,散度 div 具体的作用是什么?的更多相关文章

  1. HTML中的div标签

    在网页制作过程过中,能够把一些独立的逻辑部分划分出来.放在一个<div>标签中,这个<div>标签的作用就相当于一个容器. 为了使逻辑更加清晰,我们能够为这一个独立的逻辑部分设 ...

  2. 转:css中overflow:hidden 不起作用了吗?

    css中overflow:hidden 不起作用了吗? 有同学遇到这样的问题,现象是给元素设置了overflow:hidden,但超出容器的部分并没有被隐藏,难道是设置的hidden失效了吗?其实看似 ...

  3. ul、li中的DIV垂直居中

    当li高度可动态改变时,li中的DIV始终保持垂直居中. 由于高度不固定,不能用margin或者padding解决. 最头疼的是vertical-align: middle;也莫名其妙的失效了. 最终 ...

  4. js进阶 14-1 jquery的ajax系列中的load方法的作用是什么

    js进阶 14-1 jquery的ajax系列中的load方法的作用是什么 一.总结 一句话总结:jQuery load()方法作用是从服务器加载数据,是一个简单但强大的AJAX方法. 1.load函 ...

  5. linux中test与[ ]指令的作用

    linux中test与[ ]指令的作用: 在Linux中,test和[ ]功能是一样的,类似于c语言中的( ).不过Linux的test和[ ]是指令.在和if或者while联用时要用空格分开.

  6. Flex中 Array 的IndexOf 的作用

    Flex中 Array 的IndexOf 的作用 1.说明    indexOf用于在索引中从小到大查找,假设查得到就返回索引值,查不到就返回-1: 2.实例 (1)设计源代码 <?xml ve ...

  7. java中instanceof和getClass()的作用

    初学者难免有点混淆java中instanceof和getClass()的作用,  下面就来一一讲解. 父类A: class A { } 子类B: class B extends A { }  构造对象 ...

  8. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  9. 母版页中ContentPlaceHolder 控件的作用

    文章转自  http://wenku.baidu.com/link?url=7sLN0ihgZQ1XfX47b_y8qbpIVjS5T75Q1xvaoyIQ6OiKIgvzyVyRccnU9e9fqo ...

随机推荐

  1. php中配置伪静态

    mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法 1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查 ...

  2. c#实体转化

    经常会遇到把一个实体转化成另一个实体这样的情况,实体的属性一个一个手写去转化不反对,但不是啥好的方法:可以使用反射写一个通用的实体转化类,针对任何实体转化,不用再去自己手写. public stati ...

  3. Python中的循环体

    一.循环 1.while语句: while 条件: 循环体 else: 当上面的条件不成立时才会执行 执行顺序:判断条件是否为真.如果为真,执行循环体,再次判断条件如果为假,执行else下代码块 2. ...

  4. 解决 Maven 项目中找不到 jdk 的 tools.jar 文件的办法(多数情况下适用)

    <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifact ...

  5. 五分钟急速搭建wordpress(博主亲测有效)

    第一步:下载WordPress安装包并解压 从此处下载WordPress压缩包并解压缩 http://wordpress.org/download/ 如果你想将WordPress上传至一个远程服务器, ...

  6. Android 实现朋友圈有图片和视频

    最近开发比较烦,这个作为我第一篇博客吧. 效果就是图上的样子. 首先是布局文件,没什么就是一个RecycleView <android.support.v7.widget.RecyclerVie ...

  7. ScrollView镶嵌listview显示不全的原因

    当ScrollView镶嵌listview会显示不全,通过查看ScrollView测量高度的源码,会发现ScrollView重写了父类viewGroup的measureChildWithMargins ...

  8. QtWebkits如何向QtWebEngine过渡

    QtWebkits如何向QtWebEngine过渡 1. 前言 很遗憾,QtWebkits在Qt5.6以上版本被淘汰了,对于这个接口良且和其他类例如QWebFrame完美结合的组件就这么没了,我只能表 ...

  9. Struts_ActionWildcard_通配符配置

    使用通配符,将配置量降到最低 不过,一定要遵守“约定由于配置”的原则 struts2.xml <?xml version="1.0" encoding="UTF-8 ...

  10. HTML5 data-* 自定义属性操作及其注意点

    在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-前缀加上自定义的属性名,命名可以用驼峰命名方式,但取值是必需全部使用小写(后面会说),使用这样的结构可以进行数 ...