图像的梯度特征算子

来源:互联网 发布:mysql主从原理 编辑:程序博客网 时间:2024/05/20 09:47

索贝尔算子Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。

 

Sobel卷积因子为:

 

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,GxGy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:

 

 

具体计算如下:

Gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)

      +(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)

      +(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

= [f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]

 

Gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)

      +0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)

      +(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

= [f(x-1,y-1) + 2f(x,y-1) + f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]

 

其中f(a,b), 表示图像(a,b)点的灰度值;

 

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

 

通常,为了提高效率 使用不开平方的近似值:

 

如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

 

然后可用以下公式计算梯度方向:

 

 

 

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。
  

 

普利维特算子(Prewitt operate) 

sobel边缘检测外 还有Prewitt算子, 它的卷积因子如下:

 

其他计算 sobel差不多;

Prewitt算子利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘。对噪声具有平滑作用,定位精度不够高。

 

罗伯茨交叉边缘检测(Roberts Cross operator

卷积因子如下:

 

灰度公式为:

 

近似公式为:

 

具体计算如下:

G(x,y)=abs(f(x,y)-f(x+1,y+1))+abs(f(x,y+1)-f(x+1,y))

 

灰度方向 计算公式为:

 

 

Roberts算子采用对角线方向相邻两像素之差近似梯度幅值检测边缘。检测水平和垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感。








一、学习心得: 
学习图像处理的过程中,刚开始遇到图像梯度和一些算子的概念,这两者到底是什么关系,又有什么不同,一直困扰着我。后来在看到图像分割这一模块后才恍然大悟,其实图像的梯度可以用一阶导数和二阶偏导数来求解。但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样,对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的,而是根据数学中求导理论推导出来的。下面就逐一分析各梯度算子的推导过程。 
二、算子推导过程 
1、知识引入: 
在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率,根据导数的定义有: 
这里写图片描述

在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数,根据定义有: 
这里写图片描述

2、梯度和Roberts算子: 
对于图像来说,是一个二维的离散型数集,通过推广二维连续型求函数偏导的方法,来求得图像的偏导数,即在(x,y)处的最大变化率,也就是这里的梯度: 
这里写图片描述 
梯度是一个矢量,则(x,y)处的梯度表示为:这里写图片描述 
其大小为:这里写图片描述 
因为平方和平方根需要大量的计算开销,所以使用绝对值来近似梯度幅值: 
这里写图片描述 
方向与α(x,y)正交:这里写图片描述 
其对应的模板为:这里写图片描述

上面是图像的垂直和水平梯度,但我们有时候也需要对角线方向的梯度,定义如下: 
这里写图片描述 
对应模板为:这里写图片描述

     上述模板就是Roberts交叉梯度算子。
  • 1
  • 2

2*2大小的模板在概念上很简单,但是他们对于用关于中心点对称的模板来计算边缘方向不是很有用,其最小模板大小为3*3。3*3模板考虑了中心点对段数据的性质,并携带有关于边缘方向的更多信息。

3、Prewitt和Sobel算子: 
在3*3模板中:这里写图片描述

我如下定义水平、垂直和两对角线方向的梯度: 
这里写图片描述 
该定义下的算子称之为Prewitt算子: 
这里写图片描述

Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。 
计算公式为:这里写图片描述 
Sobel算子:这里写图片描述

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

4、Lapacian算子: 
一阶导数:这里写图片描述

二阶导数:这里写图片描述

我们感兴趣的是关于点x的二阶导数,故将上式中的变量减1后,得到: 
这里写图片描述

在图像处理中通过拉普拉斯模板求二阶导数,其定义如下: 
这里写图片描述 
对应模板为: 
这里写图片描述 
模板中心位置的数字是-8而不是-4,是因为要使这些系数之和为0,当遇到恒定湖对区域时,模板响应应将0。

在用lapacian算子图像进行卷积运算时,当响应的绝对值超过指定阈值时,那么该点就是被检测出来的孤立点,具体输出如下: 
这里写图片描述


阅读全文
0 0