二十 open CV教程 边缘检测

1、常用边缘检测算法

边缘检测


一、边缘检测的理解

        边缘一般是指图像在某一局部强度剧烈变化的区域。强度变化一般有两种情况:
        阶跃变化:    像数值从低到高变化,图像从暗到亮

        山顶变化:由暗到亮再到暗,两边较暗,中心突出

        边缘检测实际上是找到两种强度变化的集合。

        既然边缘是灰度变化最剧烈的位置,最直观的想法就是求差分(相邻像素点的差值)。

        用差分的方法进行边缘检测必须使差分的方向和边缘的方向相垂直,这就需要对图像的不同方向分别进行差分运算,增加了运算量。一般可将边缘分为水平边缘、垂直边缘和对角线边缘。

        对于第一种情况:一阶差分的峰值为边缘点,二阶差分的零点为边缘点。

        对于第二种情况:一阶差分的零点为边缘点,二阶差分的峰值为边缘点。

二、常用边缘检测算子


        1、普通梯度算子:


        普通梯度算子也叫正交梯度算子,分别求像素点上方与像素点的梯度和像素点左边与像素点的梯度值。

[ 0    0           [0    1

−1   1]           0  -1]  

        2、Roberts算子:

        Roberts算子与普通梯度算子类似,都是取一阶的差分作为梯度,区别在于取值的位置:对角取值


        3、Prewitt算子:

         Prewitt结合了差分与邻域平均的思想,其卷积核如下
水平卷积核:   垂直卷积核


        4、Sobel算子:

        Sobel算子是在Prewitt算子的基础上加入了权值的思想,离像素点越近权值越高
        

        5、拉普拉斯算子:

        拉普拉斯变换是工程数学中常用的一种积分变换;拉普拉斯算子是n维欧几里得空间的一个二阶微分算子;


        6、LoG算子:

        Laplacian of Gaussian,就是高斯拉普拉斯算子,原理为对高斯分布公式进行二阶微分
高斯函数为:


        7、Canny算子:
               

Canny算子分为四步:图像降噪、计算图像梯度、非极大值抑制、阈值筛选

        1.图像降噪
        梯度算子本质上是描述图像灰度突出值的算子,所以受到噪声影响很大,因为噪声表现为突出的异常数据点,所以第一步需要降噪,一般使用高斯滤波降噪;

        2.计算图像梯度
        计算图像梯度能够得到图像的边缘,因为梯度是灰度变化明显的地方,而边缘也是灰度变化明显的地方。当然这一步只能得到可能的边缘。因为灰度变化的地方可能是边缘,也可能不是边缘。这一步就有了所有可能是边缘的集合。
在OpenCV中默认使用Sobel算子作为梯度算子。

        3.非极大值抑制
        通常灰度变化的地方都比较集中,将局部范围内的梯度方向上,灰度变化最大的保留下来,其它的不保留,这样可以剔除掉一大部分的点。将有多个像素宽的边缘变成一个单像素宽的边缘。这一步的主要目的为瘦边缘,需要结合梯度方向与梯度值来判断;

        将梯度分为8个方向,分别为E、NE、N、NW、W、SW、S、SE(这实际上也为像素点),
其中0代表0度到45度,1代表45度到90度,2代表-90度到-45度,3代表-45度到0度。

         

        4.阈值筛选
        通过非极大值抑制后,仍然有很多的可能边缘点,进一步的设置一个双阈值,即低阈值(low),高阈值(high)。灰度变化大于high的,设置为强边缘像素,低于low的,剔除。在low和high之间的设置为弱边缘。进一步判断,如果其领域内有强边缘像素,保留,如果没有,剔除。

OpenCV的函数有两种:
        第一种为输入两个不同的互相正交的梯度图:

        CV_EXPORTS_W void Canny( InputArray dx, InputArray dy,
                         OutputArray edges,
                         double threshold1, double threshold2,
                         bool L2gradient = false );

        InputArray dx:x方向的梯度算子,如sobel算子的x算子;
        InputArray dx:y方向的梯度算子,如sobel算子的y算子;
        double thresh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值