数字图像处理-边缘检测
-
梯度介绍
来自 第七节 方向导数与梯度 http://netedu.xauat.edu.cn/jpkc/netedu/jpkc/gdsx/homepage/5jxsd/51/513/5308/530807.htm
如何直观形象的理解方向导数与梯度以及它们之间的关系? – 马同学的回答 – 知乎 https://www.zhihu.com/question/36301367/answer/156102040
首先介绍边缘检测中用到的高等数学原理—梯度。介绍梯度,离不开方向导数。
- 方向导数
顾名思义,方向导数就是某个方向上的导数。
什么是方向:
函数 在这个方向上的图像:
我们知道:
函数 的 点在这个方向上也是有切线的,其切线的斜率就是方向导数:
- 梯度
梯度:是一个矢量,它的方向上的方向导数最大,它的大小正好是此最大方向导数。
梯度的数学定义
简单总结下:
- 方向导数是各个方向上的导数
- 偏导数连续才有梯度存在
- 梯度的方向是方向导数中取到最大值的方向,梯度的值是方向导数的最大值
2. 边缘检测
《经典边缘检测算子比较》 张丽 南京信息工程大学
梯度与Roberts、Prewitt、Sobel、Lapacian算子 – CSDN博客 http://blog.csdn.net/swj110119/article/details/51777422
图像的边缘是图像最基本的特征之一。所谓边缘(或边沿)是指周围像素灰度有跳跃性变化或“屋顶”变化的那些像素的集合。边缘是图像局部强度变化最明显的地方,它主要存在于目标与目标、目标与背景、区域与区域之间,因此它是图像分割依赖的重要特征。
从本质上说,图像边缘是图像局部特性不连续性(灰度突变、颜色突变、纹理结构突变等)的反应,它标志着一个区域的终结和另一个区域的开始。
边缘检测是所有基于边界分割的图像分析方法的第一步。
检测出的边缘并不等同于实际目标的真实边缘。由于图像数据时二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等因素的影响,使得有边缘的地方不一定能被检测出来,而检测出的边缘也不一定代表实际边缘。
图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检测出来,通常用一阶或两阶导数来检测边缘。一阶导数认为最大值对应边缘位置,而二阶导数则以过零点对应边缘位置。
图像的梯度可以用一阶导数和二阶偏导数来求解。但图像是离散的,对一幅图像的求导相当于对一个面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的,而是根据数学中求导理论推导出来的。
- Roberts算子
梯度的模为
在图像处理中,实际我们用和来表示两个偏导数
故,梯度的模可以表示为:
因为平方和平方根需要大量的计算开销,所以使用绝对值来近似梯度幅值:
一般我们常用对角线方向的像元计算梯度
- Prewitt和Sobel算子
在3*3模板中:
定义水平、垂直和两对角线方向的梯度:
该定义下的算子称之为Prewitt算子:
Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。
计算公式为:
Sobel算子:
上述所有算子都是通过求一阶导数来计算梯度的,用于线的检测,在图像处理中,通常用于边缘检测。在图像处理过程中,除了检测线,有时候也需要检测特殊点,这就需要用二阶导数进行检测。