canny边(bian)缘检测算法(canny边缘检测算法流程)
在本章中,我们将学习
Canny边缘检测的概念OpenCV函数: cv.Canny()100理论Canny Edge Detection是一(yi)种流行的边缘检测算法。它由John F. Canny发明
这是一个多(duo)阶段算法,我们将经历每个阶段(duan)。
降噪
由于边缘检测容(rong)易受到图像中噪声的影响,因此第(di)一步是使用5x5高斯滤波器消除图像中的噪声(sheng)。我们已经在前面(mian)的章节中看到了这一点。
查找图像的强(qiang)度梯度
然后使用Sobel核在水平和垂直(zhi)方向上对平滑的(de)图像进行滤波,以在(zai)水平方向(Gx)和垂直方(fang)向(Gy)上获得一阶导数。从这两张(zhang)图片中,我们可以找到每个像素的边缘(yuan)渐变和方向,如下所示:
渐变方向始终垂直于边缘。将其舍入为(wei)代表垂直,水平和两个对角线方向的(de)四个角度之一。
非极大(da)值抑制
在(zai)获得梯度大小和方向后,将对图像进行全面扫描,以去(qu)除可能不构成边缘的所有不需要的(de)像素。为此,在每个像素(su)处,检查像素是否是其在梯度方向上(shang)附近的局部最大值(zhi)。查看下面的图片:
点A在边缘(垂直方(fang)向)上。渐变方(fang)向垂直于边缘。点B和C在(zai)梯度方向上。因此,将A点与B点和C点(dian)进行检查,看是否形成局部最大值。如(ru)果是这样,则考(kao)虑将其用于下一阶段,否则将其抑(yi)制(置为零)。 简而(er)言之,你得到的结果是带有“细边”的二进制图像。
磁滞阈值
该阶段确定哪些边缘全(quan)部是真正的边缘(yuan),哪些不是。为(wei)此,我们需要两个阈值minVal和maxVal。强度梯度大于maxVal的任何边缘必定(ding)是边缘,而小于minVal的那些边缘必定是非边缘(yuan),因此将其丢弃。介于(yu)这两个阈值之间(jian)的对象根据其连通性(xing)被分类为边缘或非边缘(yuan)。如果将它们连接到“边缘”像素,则将它(ta)们视为边缘的一部(bu)分。否则,它们也(ye)将被丢弃。见下图(tu):
边缘A在maxVal之上,因此被视(shi)为“确定边缘”。尽管边(bian)C低于maxVal,但它连(lian)接到边A,因此也被视为有效边(bian),我们得到了完整的曲线。但是边缘B尽管在minVal之上并且与边缘C处于同一区域,但是它没有连接到任何“确保边缘”,因此被丢弃(qi)。因此,非常重要的一(yi)点是我们必须相应地选(xuan)择minVal和maxVal以获得正确的结果。
在边缘为长线的假设下,该(gai)阶段还消除了小像素(su)噪声。
因(yin)此,我们最终得到的是(shi)图像中的强边缘。
OpenCV中的Canny Edge检(jian)测OpenCV将以上所有内容(rong)放在单个函数cv.Canny()中(zhong)。我们将看到如(ru)何使用它。第一个(ge)参数是我们的输入图像。第(di)二个和第三个参数分别(bie)是我们的minVal和maxVal。第三个参数是perture_size。它是用于查(cha)找图像渐变的Sobel内核的大小。默认情况下为3。最后(hou)一个参数是L2gradient,它指定用于查(cha)找梯度幅度的方程式。如果为True,则(ze)使com用上面提到的更精确的(de)公式,否则使用以下函数:$Edge_Gradient ; (G) = |Gx| + |Gy|$。默认情况下(xia),它为False。
import numpy as npimport cv2 as cvfrom matplotlib import pyplot as pltimg = cv.imread('messi5.jpg',0)edges = cv.Canny(img,100,200)plt.subplot(121),plt.imshow(img,cmap = 'gray')plt.title('Original Image'), plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(edges,cmap = 'gray')plt.title('Edge Image'), plt.xticks([]), plt.yticks([])plt.show()附加资源(yuan)Canny edge detector at Wikipedia:http://en.wikipedia.org/wiki/CannyedgedetectorCanny Edge Detection Tutorial:http://dasl.unlv.edu/daslDrexel/alumni/bGreen/www.pages.drexel.edu/weg22/cantut.html by Bill Green, 2002.练习编写一个小应用程序以找到Canny边缘检测,该检测的阈值可(ke)以使用两个跟踪栏进行更改。这样(yang),您可以了解阈值的影(ying)响。
本文地址:http://www.51spjx.com/tech-detail/t239199.html