canny边缘检测算(suan)法(canny边缘检测算法流程)
在本章中,我们(men)将学习
Canny边缘检测(ce)的概念OpenCV函数: cv.Canny()100理论Canny Edge Detection是一种流行的边缘检测(ce)算法。它由John F. Canny发明
这是一个多阶段算法,我(wo)们将经历每个阶段。
降噪
由于边(bian)缘检测容易受到图像中噪(zao)声的影响,因此第一(yi)步是使用5x5高斯滤波器(qi)消除图像中的噪声。我们已(yi)经在前面的章节中看到了(le)这一点。
查找图像的(de)强度梯度
然后使用Sobel核(he)在水平和垂直方向上对平滑的图像(xiang)进行滤波,以在水平方向(Gx)和垂直方向(Gy)上获得一(yi)阶导数。从这两张图片中,我(wo)们可以找到每个像(xiang)素的边缘渐变和方向,如下(xia)所示:
渐变方向始终垂直于边(bian)缘。将其舍入为代表垂直,水平(ping)和两个对角线方向的四个角度之一(yi)。
非极大值抑制
在获得梯度大小和(he)方向后,将对图像进行全面扫(sao)描,以去除可能不构(gou)成边缘的所有不需要的像(xiang)素。为此,在每个像素处,检查像素是否是其在梯度方向上附(fu)近的局部最大值。查看下(xia)面的图片:
点A在边缘(垂直方向)上。渐变(bian)方向垂直于边缘。点B和C在梯度方(fang)向上。因此,将A点(dian)与B点和C点进行检查,看(kan)是否形成局部最大值。如果是(shi)这样,则考虑将其用于下一阶段,否(fou)则将其抑制(置为零(ling))。 简而言之,你得到的结果是带有“细边”的二进制图像。
磁滞阈值
该阶段确定哪些边缘(yuan)全部是真正的边缘,哪些不(bu)是。为此,我们需要两个(ge)阈值minVal和maxVal。强度梯度大于maxVal的任何边缘必定是边缘,而小于(yu)minVal的那些边缘必定是非边缘(yuan),因此将其丢弃。介于这两个阈(yu)值之间的对象根据其连通性被分类为(wei)边缘或非边缘。如果将它们连接到“边缘”像素,则将它(ta)们视为边缘的一部分。否则,它(ta)们也将被丢弃。见下图:
边缘(yuan)A在maxVal之上,因此被视为“确定边缘”。尽管边C低于maxVal,但它连接到边A,因此(ci)也被视为有效边,我们得到了完(wan)整的曲线。但是(shi)边缘B尽管在minVal之上并(bing)且与边缘C处于同(tong)一区域,但是它没有连接到任何(he)“确保边缘”,因此被丢弃。因(yin)此,非常重要的一点是我(wo)们必须相应地选择minVal和maxVal以获得正确的结果。
在边缘(yuan)为长线的假设下,该阶段还消除了小(xiao)像素噪声。
因此,我们最终得到的是图(tu)像中的强边缘。
OpenCV中(zhong)的Canny Edge检测OpenCV将以上所有内容(rong)放在单个函数cv.Canny()中(zhong)。我们将看到如何使用它(ta)。第一个参数是我们的输入图像。第二(er)个和第三个参数分别是(shi)我们的minVal和maxVal。第三个参数是perture_size。它是用于查找图像渐变的Sobel内核的大小(xiao)。默认情况下为3。最后(hou)一个参数是L2gradient,它指定用于查找梯度幅度的方(fang)程式。如果为True,则使com用上面提到的(de)更精确的公式,否则使用以下函数:$Edge_Gradient ; (G) = |Gx| + |Gy|$。默认情况下,它为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()附加资源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.练习编写一个小应(ying)用程序以找到Canny边缘(yuan)检测,该检测的阈值可以(yi)使用两个跟踪栏进行(xing)更改。这样,您可以了解(jie)阈值的影响。
本文地址:http://www.fd17.com/tech/37667.html