数字图像处理-边缘检测

  1. 梯度介绍

来自 第七节 方向导数与梯度 http://netedu.xauat.edu.cn/jpkc/netedu/jpkc/gdsx/homepage/5jxsd/51/513/5308/530807.htm    

            如何直观形象的理解方向导数与梯度以及它们之间的关系? - 马同学的回答 - 知乎 https://www.zhihu.com/question/36301367/answer/156102040

   首先介绍边缘检测中用到的高等数学原理---梯度。介绍梯度,离不开方向导数。

  •    方向导数

   顾名思义,方向导数就是某个方向上的导数。

   什么是方向:

                     

   函数f(x,y) 在这个方向上的图像:

                     

   我们知道:

                  

   函数f(x,y)A 点在这个方向上也是有切线的,其切线的斜率就是方向导数:

                 

  • 梯度

   梯度:是一个矢量,它的方向上的方向导数最大,它的大小正好是此最大方向导数。

   梯度的数学定义

    

简单总结下:

  • 方向导数是各个方向上的导数
  • 偏导数连续才有梯度存在
  • 梯度的方向是方向导数中取到最大值的方向,梯度的值是方向导数的最大值

 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算子:这里写图片描述

上述所有算子都是通过求一阶导数来计算梯度的,用于线的检测,在图像处理中,通常用于边缘检测。在图像处理过程中,除了检测线,有时候也需要检测特殊点,这就需要用二阶导数进行检测。

原文地址:https://www.cnblogs.com/laumians-notes/p/8310361.html