图像分割·基于边缘检测

一、图像边缘检测

    基本思路:基于边缘检测的图像分割方法的基本思路是先确定图像中的边缘像素,然后再把这些像素连接在一起就构成所需的区域边界。

    图像边缘:图像边缘,即表示图像中一个区域的终结和另一个区域的开始,图像中相邻区域之间的像素集合构成了图像的边缘。所以,图像边缘可以理解为图像灰度发生空间突变的像素的集合。图像边缘有两个要素,即:方向和幅度。沿着边缘走向的像素值变化比较平缓;而沿着垂直于边缘的走向,像素值则变化得比较大。因此,根据这一变化特点,通常会采用一阶和二阶导数来描述和检测边缘。

    综上,图像中的边缘检测可以通过对灰度值求导数来确定,而导数可以通过微分算子计算来实现。在数字图像处理中,通常是利用差分计算来近似代替微分运算。


这里写图片描述
图1:图像边缘类型及导数曲线规律示例

    梯度幅值计算

    设 f(x,y) 为连续图像函数, Gx Gy 分别为 x 方向和 y 方向的梯度,且在点 (x,y) 处的梯度可以表示为一个矢量,梯度定义如下:

G(f(x,y))=[f(x,y)x f(x,y)y]T

    对应欧式距离梯度幅值:

|G(x,y)|=G2x+G2y

    对应棋盘距离梯度幅值:

|G4(x,y)|=|Gx|+|Gy|

    对应街区距离梯度幅值:

|G8(x,y)|=max{|Gx|+|Gy|}

这里写图片描述

    
    梯度矢量幅角表示的梯度方向是函数 f(x,y) 增加最快的方向:

ϕ(x,y)=arctan(Gx/Gy)

二、微分算子

    常用的一阶微分算子有Roberts、Prewitt、Sobel等算子,常用的二阶微分算子有Laplace和Kirsh等算子。在实际处理操作中常用模板矩阵与图像像素值矩阵卷积来实现微分运算。

    由于垂直边缘的方向上的像素点和噪声都是灰度不连续点,所以变换到频域时,在频域均为高频分量,直接采用微分运算不可避免地会受到噪声的很大影响。 因此,微分算子只适用于图像噪声比较少的简单图像。针对此问题,LoG算子(Laplace of Gaussian)和Canny算子采取的方法是,先对图像进行平滑滤波,然后再用微分算子与图像进行卷积操作,这样处理会得到比较好的边缘检测结果。其中,LoG算子是采用Laplacian算子计算高斯函数的二阶导数,Canny算子是高斯函数的一阶导数,两种算子在抑制噪声和检测边缘之间取得了比较好的平衡。

    

1. Roberts算子

    Robert算子是一种利用局部差分算子检测边缘的算子,对具有陡峭的低噪声图像处理的效果较好。其定义如下:

G[f(x,y)]={[f(x+1,y+1)f(x,y)]2+[f(x+1,y)f(x,y+1)]2}12

    上述公式计算量较大,在实际操作中通常采用绝对差算法近似代替上述公式:

G[f(x,y)]|f(x+1,y)f(x,y)|+|f(x,y+1)f(x,y)|

G[f(x,y)]|f(x+1,y+1)f(x,y)|+|f(x,y+1)f(x+1,y)|

    
    Roberts算子卷积核:

[1001] [0110]

    Roberts算子概念简单,算法计算复杂度较低,对低噪声图像操作可以得到不错的效果,但是在稍复杂图像上则难以胜任。

    

2. Sobel算子

    Sobel算子有两个矩阵算子,也称卷积核,分别计算 x 方向和 y 方向上的方向梯度,两个核分别与图像进行卷积计算,一个对水平方向上的边缘敏感,一个对垂直方向上的边缘敏感。Sobel算子定义如下:

S=(d2x+d2y)12

dx=[f(x1,y1)+2f(x,y1)+f(x+1,y1)][f(x1,y+1)+2f(x,y+1)+f(x+1,y+1)]

dy=[f(x+1,y1)+2f(x+1,y)+f(x+1,y+1)][f(x1,y1)+2f(x1,y)+f(x1,y+1)]

    
    用模板表示 dx dy 如下:

101202101 121000121

    Sobel算子结构简洁,能较好地抑制噪声。

    

3. Prewitt算子

    Prewitt算子和Sobel算子类似,也有两个卷积核,区别在于卷积核中心系数的权值不同。Prewitt算子定义:
Sp=(d2x+d2y)12
卷积核表示为:

101101101 111000111

    Prewitt算子实现起来比Sobel算子更为简单,也可以一定程度上抑制噪声。

    

4. LoG算子

    LoG(Laplace of Gaussian),即拉普拉斯高斯算子。拉普拉斯算子是对二维函数求二阶导数的算子 (f(x,y)2/x2+f(x,y)2/y2) ,拉普拉斯高斯算子则是对二维高斯函数求二阶导数的算子。
    二维高斯函数:

G(x,y)=ex2+y22σ2

    LoG算子:

ΔG(x,y)=[x2+y22σ2σ4]ex2+y22σ2

    LoG卷积核:

010141010 111181111

    LoG算子可以根据需要进行“调整”以便在期望的尺寸上起作用(比如下面的5x5的卷积核),可使得大的算子可用于检测模糊边缘,小的算子则可以用于检测锐度集中的精细细节。

00100012101216210121000100 24442408044824844080424442

5x5卷积核

    LoG算子的特点:
    1. 图像与高斯滤波器进行卷积,既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除。
    2. 在边缘检测时则仅考虑那些具有局部梯度最大值的点为边缘点,用拉普拉斯算子将边缘点转换成零交叉点,通过零交叉点的检测来实现边缘检测。
    3. 缺点是在过滤噪声的同时使得原有的边缘一定程度上被平滑了。

    

5. Canny算子

    Canny算子检测边缘点的方法基本思想是寻找图像梯度的局部最大值。
    评价一个边缘检测算子的,一般考虑如下三个指标:
    1. 低失误概率:在尽可能把所有边缘检测到的同时,减少将非边缘误判为边缘;
    2. 高位置精度:检测出的边缘是真正的边界,检测到的边缘位置足够精确;
    3. 检测得到的边界是单像素宽。
    针对这三个指标,Canny在设计检测算子时提出了边缘检测算子的三个准则:
    1. 信噪比准则;
    2. 定义精度准则;
    3. 单边缘响应准则。

    遵循这三个准则,Canny算子设计实现的步骤如下:
    (1)首先用高斯滤波模板进行卷积以平滑图像;
    (2)利用微分算子,计算梯度的幅值和方向;
    (3)对梯度幅值进行非极大值抑制。即遍历图像,若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大,那么这个像素值置为0,即不是边缘;
    (4)使用双阈值算法检测和连接边缘。即使用累计直方图计算两个阈值,凡是大于高阈值的一定是边缘;凡是小于低阈值的一定不是边缘。如果检测结果大于低阈值但又小于高阈值,那就要看这个像素的邻接像素中有没有超过高阈值的边缘像素,如果有,则该像素就是边缘,否则就不是边缘。
    边缘连接:上述方法仅得到处在边缘上的像素点。噪声和不均匀的照明而产生的边缘间断的影响,使得经过边缘检测后得到的边缘像素点很少能完整地描绘实际的一条边缘。可以在使用边缘检测算法后,紧接着使用连接方法将边缘像素组合成有意义的边缘。

    

猜你喜欢

转载自blog.csdn.net/u010189457/article/details/78391288
今日推荐