Opencv2.4学习::边缘检测(1)边缘检测基础

边缘检测

1、Sobel

2、

3、

4、


边缘检测概念


 梯度算子概念

但是,图像是离散的数字量,因此梯度一般为像素点与相邻像素点的差值,而方向则与选定的相邻像素点位置有关。

 下引用参考博客的叙述:https://blog.csdn.net/qq_18815817/article/details/78625845

对于数字图像而言,相当于对二维离散函数求梯度,如下:

G(x,y) = dx(i,j) + dy(i,j);

dx(i,j)  = I(i+1,j) - I(i,j);

扫描二维码关注公众号,回复: 3300914 查看本文章

dy(i,j)  = I(i,j+1) - I(i,j);

数字图像中,更多的使用差分来近似导数,最简单的梯度近似表达式如下:

梯度的方向是函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像(we can get the gradient image through computing the gradient of each pixel in the image)

图像梯度和算子之间是什么关系?为什么求图像的梯度要用到算子?

图像的梯度可以用一阶导数和二阶偏导数来求解。但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样,对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的,而是根据数学中求导理论推导出来的。 

常见还有Sobel,Prewitt等算子。以Roberts算子为例的X,Y的梯度计算演示如下图:

这里写图片描述

通过求一阶导数来计算梯度的,用于线的检测,在图像处理中,通常用于边缘检测。在图像处理过程中,除了检测线,有时候也需要检测特殊点,这就需要用二阶导数进行检测。 


 几种边缘检测算法比较:

(摘自:https://blog.csdn.net/qq_20823641/article/details/52102589

  • Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。
  • Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素。
  • Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多。
  • Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。
  • Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中 

 非极大值抑制:

猜你喜欢

转载自blog.csdn.net/dieju8330/article/details/82789186