图像边缘检测算法Canny、Prewitt和sobel

参考:https://blog.csdn.net/chaolei3/article/details/79809703

边缘检测

边缘检测的任务就是找到具有阶跃变化或者屋顶变化的像素点的集合
边缘其实就是图像上灰度级变化很快的点的集合
检测图像中的一些像素点,它们周围的像素点的灰度发生了急剧的变化。可以用来标注图像中不同物体的边界
边缘是图像中的重要的结构性特征边缘往往存在于目标和背景之间,因此它可以作为图像分割的重要依据
在边缘检测中,它提取的是图像中不连续部分的特征,将闭合的边缘提取出来便可以作为一个区域
区域划分相比,边缘检测不需要逐个的对像素进行比较,比较适合大图像的处理.
图像以矩阵的形式存储的,对一幅图像的求导相当于对一个平面、曲面求导。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积。

边缘检测通过取得图像像素值的变化,求导得到

拉普拉斯提取边缘属于使用二阶导提取边缘,而sobel,prewitt,Roberts,差分法都是属于一阶导数求边缘。
(1)一阶导数通常会产生较粗的边缘。
(2)二阶导数对精细细节,如细线、孤立点和噪声有较强的响应。
(3)二阶导数在灰度斜坡和灰度台阶过渡处会产生双边沿响应。
(4)二阶导数的符号可以确定边缘的过渡是从亮到暗还是从暗到亮。
(5)二阶导数对细节更敏感。
一般的,提取边缘之前最好先做下图像平滑处理,因为导数对噪声比较敏感
在使用拉普拉斯算子提取边缘之前,先使用高斯平滑图像,这一过程就是Laplacian-Gauss(LOG)算子

Roberts算子

利用两个二维矩阵的卷积核,一个斜对角为1,-1;另一个斜对角都是0;对图像进行卷积操作,得到像素值之间的一阶梯度变化。如下图
图像边缘检测算法Canny、Prewitt和sobel_第1张图片

Prewitt算子

和Roberts算子更大的不同和是变成3*3的卷积核,以及增加了垂直和水平方向上的一阶梯度
图像边缘检测算法Canny、Prewitt和sobel_第2张图片

Sobel算子

Sobel算子在Prewitt算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,如下图中的中心的绝对值较大
图像边缘检测算法Canny、Prewitt和sobel_第3张图片

Canny算子

参考:https://zhuanlan.zhihu.com/p/42122107,https://blog.csdn.net/weixin_40647819/article/details/91411424
相比Sobel、Prewitt等算子,Canny算法更为优异。Sobel、Prewitt等算子有如下缺点:
1.没有充分利用边缘的梯度方向。
2.最后得到的二值图,只是简单地利用单阈值进行处理,结果会受阈值影响较大
Canny算法基于这两点做了改进,提出了:
1,基于边缘梯度方向的非极大值抑制。non_max_supression
2,双阈值的滞后阈值处理。,如下图所示

图像边缘检测算法Canny、Prewitt和sobel_第4张图片
canny步骤:
1、高斯滤波:简单的说就是一个高斯矩阵乘以每一个像素点及其邻域,取其带权重的平均值作为最后的灰度值。
2、计算梯度幅度和方向梯度方向一般离散为一下几种:
量化化情况可总结为:
图像边缘检测算法Canny、Prewitt和sobel_第5张图片
3,对像素进行非极大值抑制:在每一点上,领域中心 x 与沿着其对应的梯度方向的两个像素相比,若中心像素为最大值,则保留,否则中心置0,这样可以抑制非极大值,保留局部梯度最大的点,以得到细化的边缘。
4,双阈值的设置设置两个阀值(threshold),分别为maxVal和minVal。其中大于maxVal的都被检测为边缘,而低于minval的都被检测为非边缘。对于中间的像素点,如果与确定为边缘的像素点邻接,则判定为边缘;否则为非边缘

你可能感兴趣的:(笔记)