Matlab图像处理(五)——图像边缘提取
上一讲小白为小伙伴们带来了如何使用自编函数和自带函数对图像进行滤波,去除图像的噪声。这次小白为大家带来滤波的新用处——边缘提取。
什么是图像边缘
所谓图像边缘(Edlge)是指图像局部特性的不连续性,例如,灰度级的突变,颜色的突变,纹理结构的突变等。边缘广泛存在于目标与目标、物体与背景、区域与区域(含不同色彩)之间,它是图像分割所依赖的重要特征。
小白今天主要介绍几种典型的图像灰度值突变的边缘检测方法,其原理也适用用于其他特性突变的边缘检测。图像的边缘通常与图像灰度的一阶导数的不连续性有关。图像灰度的不连续性可分为两类:阶跃不连续,即图像灰度在不连续处的两边的像素灰度有明显的差异。线条不连续,即图像灰度突然从一个值变化到另一个值,保持一个较小的行程又返回到原来的值。但是在实际中,阶跃和线条边缘图像是较少见的,由于空间分辨率(尺度空间)、图像传感器等原因会使阶跃边缘变成斜坡形边缘,线条边缘变成房顶形边缘。它们的灰度变化不是瞬间的而是跨越一定距离的。几种边缘类型,可以通过下面的图片有个更清晰的认识。
Sobel算子
在前面的关于图像滤波的讲解中,小白为大家介绍了sobel算子模板,但是没有讲解其具体作用。这次的讲解中,小白将为大家讲解什么是sobel算子。
sobel算子是一阶的梯度算子,也就是对信号求取一阶导数,对噪声具有平滑作用,提供较为精确的边缘方向信息,但是边缘定位精度不够高;但是该种方法比较简单,容易实现,也比较容易理解。
对一个连续函数求导是一件比较容易的事情,但是图像中的数据都是数字化之后的数据,是离散的,因此对于求导就需要使用差分方式:前面的像素灰度值减去后面像素的灰度值,并将结果大于一定阈值的设为边缘,否则就不是边缘。我们用数学公式表示就是:I(x,y)-I(x-n,y)。公式给出的是两个像素在同一行中,两个像素也可以在同一列中,而且方向也可以更改。
根据之前的模板来看的话,只有一个维度的求导可以用如下的模板表示:
可以用上面两个模板分别对原图像求取横着和竖着边缘,之后对两者求并集,便是图像整体的边缘。但是细心的小伙伴肯定会发现,模板之后两个元素,以哪个元素作为模板的中心呢?为了解决这个问题,研究者将其进行了扩展,变为以下的模板:
模板长度变为奇数便可以解决模板没有“中心”的问题。后续经过各种演化,最终变为前面几讲中提到的模板的样子。小伙伴在使用的过程中可以直接使用其模板就可以,而且Matlab也是带有sobel边缘提取的函数,不需要小伙伴自己编写复杂的程序。
常用的sobel边缘提取模板
Roberts算子
其实很多种算子都借鉴了sobel方法的思想,Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。我们直接给出Roberts算子的模板:
通过模板我们也能看出来,该算法是采用检测斜着方向的梯度变化来判定图像的边缘。
Canny算子