边缘提取:什么是边缘?
图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以
看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相
差较大的灰度值。
边缘有正负之分,就像导数有正值也有负值一样:由暗到亮为正,由亮到暗为负
求边缘幅度的算法:sobel、Roberts、prewitt、Laplacian、Canny算子(其他博客搜索)
Canny算子效果比其他的都要好,但是实现起来有点麻烦
边缘检测主要是图象的灰度变化的度量、检测和定位
高频信号
&
低频信号
图像中的低频信号和高频信号也叫做低频分量和高频分量。
简单一点说,图像中的高频分量,指的是图像强度(亮度/灰度)变化剧烈的地方,也就
是边缘(轮廓);
图像中的低频分量,指的是图像强度(亮度/灰度)变换平缓的地方,也就是大片色块的
地方。
人眼对图像中的高频信号更为敏感。
1)滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,
因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波。
2)增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域
强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定。
3)检测:经过增强的图像,往往邻域中有很多点的梯度值比较大,而在特定的应用中,这些
点并不是我们要找的边缘点,所以应该采用某种方法来对这些点进行取舍。实际工程中,常用
的方法是通过阈值化方法来检测
关于边缘检测的基础来自于一个事实,
即在边缘部分,像素值出现”跳跃“或者较大的变化。
如果
在此边缘部分求取一阶导数,就会看到极值的出现。
而在一阶导数为极值的地方,二阶导数为0,基于这个原理,就可以进行边缘检测。
![](https://i-blog.csdnimg.cn/blog_migrate/f6865728ebd3f34c637589c8b1429fbc.png)
图像锐化
图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图
像变得清晰。
图像锐化是为了突出图像上的物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方
法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。
图像锐化通常使用拉普拉斯变换核函数:
![](https://i-blog.csdnimg.cn/blog_migrate/cbd55d031959e0257350e2e7737b8d4b.png)
图像平滑
图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频
成分的图像处理方法,目的是使图像亮度平缓渐变,减小突变梯度,改善图像质量
用Gx来卷积下面这张图的话,就会在中间黑白边界获得比较大的值
![](https://i-blog.csdnimg.cn/blog_migrate/116ea65ff47f42ac47b9f83c22be13f7.png)
Sobel
算子
Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪
声具有平滑作用,能很好的消除噪声的影响。
Sobel算子对于像素的位置的影响做了加权,因此与Prewitt算子相比效果更好。
Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向
及纵向的亮度差分近似值。实际使用中,常用如下两个模板来检测图像边缘:
![](https://i-blog.csdnimg.cn/blog_migrate/280ff3be14ba5c7da85382eb30555f57.png)
一个是横向的,一个是纵向的,分为连个维度来检测图片的边缘
缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,换言之就是Sobel算子并没有基于图像
灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不
能令人满意。
Prewitt
算子
Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达
到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向
模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
![](https://i-blog.csdnimg.cn/blog_migrate/212bcb5a6b057ca64b7266838fb0177b.png)
其原理与sobel算子一样。
边缘检测的原理
从上例中我们可以推论检测边缘可以通过定位梯度值大于邻域的相素的方法找到(或者推广到大
于一个阀值).
从以上分析中,我们推论二阶导数可以用来检测边缘 。
因为图像是 “2维”, 我们需要在两个方向求导
Canny
边缘检测算法
Canny是目前最优秀的边缘检测算法,其目标为找到一个最优的边缘,其最优边缘的定义为:
1、好的检测:算法能够尽可能的标出图像中的实际边缘
2、好的定位:标识出的边缘要与实际图像中的边缘尽可能接近
3、最小响应:图像中的边缘只能标记一次
canny实现步骤:
1. 对图像进行灰度化
2. 对图像进行高斯滤波:
根据待滤波的像素点及其邻域点的灰度值按照一定的参数规则进行加权平均。这样
可以有效滤去理想图像中叠加的高频噪声。
3. 检测图像中的水平、垂直和对角边缘(如Prewitt,Sobel算子等)。
4 对梯度幅值进行非极大值抑制
5 用双阈值算法检测和连接边缘
高斯平滑
高斯平滑水平和垂直方向呈现高斯分布,更突出了中心点在像素平滑后的权重,相比于均值滤波
而言,有着更好的平滑效果。
![](https://i-blog.csdnimg.cn/blog_migrate/d6b7d68f40b6f896bc4a3a10c0fad634.png)
重要的是需要理解,
高斯卷积核大小的选择将影响Canny检测器的性能:
尺寸越大,检测器对噪声的敏感度越低,但是边缘检测的定位误差也将略有增加。
一般5x5是一个
比较不错的trade off。
![](https://i-blog.csdnimg.cn/blog_migrate/c57e8484c24ce8738273c0e5b4be3575.png)