精华内容
下载资源
问答
  • canny边缘检测算法

    2018-03-12 23:11:32
    canny边缘检测算法 绝对可编译 MATLAB
  • canny边缘检测算法Canny edge detector is a multi-step algorithm to detect the edges for any input image. It involves below mentioned steps to be followed while detecting edges of an image. Canny边缘...

    canny边缘检测算法

    Canny edge detector is a multi-step algorithm to detect the edges for any input image. It involves below mentioned steps to be followed while detecting edges of an image.

    Canny边缘检测器是一种多步算法,可检测任何输入图像的边缘。 它涉及检测图像边缘时要遵循的下述步骤。

    1. Removal of noise in input image using Gausian filter.

    1.使用高斯滤波器消除输入图像中的噪声。

    2. Computing the derivative of Gausian filter in order to calculate the gradient of image pixels to obtain magnitude along x and y dimension.

    2.计算高斯滤波器的导数,以便计算图像像素的梯度以获得沿x和y维度的幅度。

    3. Considering a group of neighbours for any curve in direction perpendicular to given edge supress the non-max edge contributor pixel points.

    3.考虑在垂直于给定边缘的方向上的任何曲线的一组邻居抑制非最大边缘贡献者像素点。

    4. Lastly use the Hysteresis Thresholding method to preserve the pixels higher than gradient magnitude and neglect the ones lower than the low threshold value.

    4.最后,使用滞后阈值方法来保留高于梯度幅度的像素,而忽略低于低阈值的像素。

    Before deep diving into the steps below are the three conclusions that J.K Canny who derived the algorithm :

    在深入研究以下步骤之前,请先得出算法的JK Canny的三个结论:

    - Good Detection : The optimal detector must eliminate the possibility of getting false positives and false negatives.

    - 良好的检测:最佳检测器必须消除出现假阳性和假阴性的可能性。

    - Good Localisation : The detected edges must be as close to true edges.

    - 良好的本地化:检测到的边缘必须尽可能接近真实边缘。

    - Single Response Constraint : The detector must return one point only for each edge point.

    - 单一响应约束:检测器必须仅对每个边缘点返回一个点。

    Steps to followed during Canny Algorithm:

    Canny算法期间要遵循的步骤:

    Noise Removal or Image Smoothing:

    去噪或图像平滑:

    During the noise presence the pixel may not be close to being similar to its neigbouring pixels. This might result in obtaining improper or inappropriate detection of edges . In order to avoid the same we use the Gausian filter which is convolved with the image and removes the noise which prevents from getting the desired edges in output images.

    在噪声存在期间,像素可能与其附近像素不太接近。 这可能导致获得不正确或不合适的边缘检测。 为了避免同样的情况,我们使用了高斯滤波器,该滤波器与图像进行卷积,并去除了噪声,从而阻止了在输出图像中获得所需的边缘。

    In the below example we are convolving gausian filter or kernel g(x,y) with image I. Here we wish to make sure that any given pixel must be alike its neighbouring pixels in output and so we use the matrix [1 1 1] in order to maintain the similarity between pixels and remove the noise.

    在下面的示例中,我们将高斯滤波器或核g(x,y)与图像I卷积在一起。在这里,我们希望确保任何给定的像素在输出中都必须与其相邻像素相似,因此我们使用矩阵[1 1 1]为了保持像素之间的相似度并消除噪点。

    Image for post

    g(x,y)= Gausian Distribution

    g(x,y)=高斯分布

    I = input image

    I =输入图像

    Derivative :

    导数:

    Calculate the derivative of filter w.r.t X and Y dimensions and convolve it with I to give the gradient magnitude along the dimensions. Also the direction of image can be calculated using the tangent of angle between the two dimensions.

    计算滤波器X和Y尺寸的导数,并将其与I卷积,以得出沿尺寸的梯度幅度。 同样,可以使用两个维度之间的角度切线来计算图像方向。

    Image for post

    The above convolution results in gradient vector which has magnitude and direction.

    上述卷积导致具有大小和方向的梯度矢量。

    Image for post

    Below is an example of Gausian Derivatives which finally contribute to edges in output images.

    下面是高斯导数的一个示例,它们最终有助于输出图像中的边缘。

    Image for post

    Non Max Suppression

    非最大抑制

    Along an edge it is generally observed that the presence of few points make the visibility of edge more clearer. So we can neglect those edge points which don’t contribute more towards feature visibility. In order to achieve the same we use the Non Maximum Supression method . Here we mark the points on the curve of edge where the magnitude is largest . This can be obtained by looking for a maximum along a slice normal to the curve.

    通常沿着边缘观察到很少的点会使边缘的可见性更加清晰。 因此,我们可以忽略那些对特征可见性没有更多贡献的边缘点。 为了达到相同的目的,我们使用非最大压缩方法。 在这里,我们在边缘曲线上标记幅度最大的点。 这可以通过沿着垂直于曲线的切片寻找最大值来获得。

    Consider the edge in below figure which has 3 edge points. Assume point (x,y) as point having largest gradient of edge. Check for the edge points in direction perpendicular to the edge and verify if their gradient is less than (x,y) . If the values are less than (x,y) gradient then we can suppress those non maxima points along the curve .

    考虑下图中的边缘,该边缘具有3个边缘点。 假设点(x,y)为边缘的最大倾斜点。 检查垂直于边缘方向的边缘点,并验证它们的坡度是否小于(x,y)。 如果值小于(x,y)梯度,则我们可以抑制沿曲线的那些非最大值点。

    Image for post
    Image for post

    Hysteresis Thresholding :

    磁滞阈值:

    Image for post

    If the gradient at a pixel is :

    如果一个像素处的渐变为:

    - Above “High” declare it as a ‘edge pixel’.

    -在“高”上方,将其声明为“边缘像素”。

    - Below “Low” declare it as a ‘non-edge pixel’.

    -在“低”以下将其声明为“非边缘像素”。

    - Between “low” and “high”

    -在“低”和“高”之间

    • Consider its neighbours iteratively then declare it an “edge pixel” if its connected to an “edge pixel” or via pixels between “low” and “high”.

      反复考虑其邻居,然后将其声明为“边缘像素”(如果其连接到“边缘像素”或通过“低”与“高”之间的像素连接)。

    Thanks for reading !!

    谢谢阅读 !!

    Source Reference of Dr Mubarak Shah youtube videos.

    Mubarak Shah博士youtube视频的来源参考。

    翻译自: https://medium.com/analytics-vidhya/what-is-canny-edge-detection-algorithm-95defef75492

    canny边缘检测算法

    展开全文
  • Canny边缘检测算法

    千次阅读 2019-09-26 14:10:15
    大部分边缘检测算法都是上个世纪的,OpenCV的使用的算法是Canny边缘检测算法,大概是1986年提出了,似乎说明边缘检测算法的研究已经到达了瓶颈期。跟人眼系统相比,边缘检测算法仍然逊色不少。 Canny边缘检测算法是...

    提取图片的边缘信息是底层数字图像处理的基本任务之一。边缘信息对进一步提取高层语义信息有很大的影响。大部分边缘检测算法都是上个世纪的,OpenCV的使用的算法是Canny边缘检测算法,大概是1986年提出了,似乎说明边缘检测算法的研究已经到达了瓶颈期。跟人眼系统相比,边缘检测算法仍然逊色不少。

    Canny边缘检测算法是比较出色的算法,它包含以下四个步骤:

    1. 高斯滤波

    滤波的主要目的是降噪,一般的图像处理算法都需要先进行降噪。而高斯滤波主要使图像变得平滑(模糊),同时也有可能增大了边缘的宽度。

    高斯函数是一个类似与正态分布的中间大两边小的函数。

    对于一个位置(m,n)的像素点,其灰度值(这里只考虑二值图)为f(m,n)。

    那么经过高斯滤波后的灰度值将变为:

    [公式]

    简单说就是用一个高斯矩阵乘以每一个像素点及其邻域,取其带权重的平均值作为最后的灰度值。

    2. 计算梯度值和梯度方向

    边缘是什么?边缘就是灰度值变化较大的的像素点的集合。一道黑边一道白边中间就是边缘,它的灰度值变化是最大的,在图像中,用梯度来表示灰度值的变化程度和方向。

    它可以通过点乘一个sobel或其它算子得到不同方向的梯度值 [公式] , [公式] 。

    综合梯度通过以下公式计算梯度值和梯度方向:

    [公式]

    [公式]

    3. 过滤非最大值

    在高斯滤波过程中,边缘有可能被放大了。这个步骤使用一个规则来过滤不是边缘的点,使边缘的宽度尽可能为1个像素点:如果一个像素点属于边缘,那么这个像素点在梯度方向上的梯度值是最大的。否则不是边缘,将灰度值设为0。

    4. 使用上下阀值来检测边缘

    一般情况下,使用一个阀值来检测边缘,但是这样做未免太武断了。如果能够使用启发式的方法确定一个上阀值和下阀值,位于下阀值之上的都可以作为边缘,这样就可能提高准确度。

    它的步骤是这样的。

    它设置两个阀值(threshold),分别为maxVal和minVal。其中大于maxVal的都被检测为边缘,而低于minval的都被检测为非边缘。对于中间的像素点,如果与确定为边缘的像素点邻接,则判定为边缘;否则为非边缘。

    参考链接:

    1.canny edge detector tutorial

    2.canny edge detection

    3.fundamental of computer vision(p45-p48)

    4.edge detection

    展开全文
  • 边缘检测Rust中Canny边缘检测算法的实现。 许多计算机视觉应用程序的基础。 let source_image = ima边缘检测Rust中Canny边缘检测算法的实现。 许多计算机视觉应用程序的基础。 让source_image = image :: open(“ ...
  • Canny 边缘检测算法

    万次阅读 2018-10-13 18:44:12
    Canny边缘检测算法:其对受白噪声影响的阶跃型边缘是最优的。 目的: 返回一个二值图像,非零数值表示图像中边缘的存在,返回与边缘相关的尺度和方向信息 标准: 检测标准:不丢失重要的边缘,不应有虚假的...

    Canny:边缘检测算法:其对受白噪声影响的阶跃型边缘是最优的。

    目的:
    返回一个二值图像,非零数值表示图像中边缘的存在,返回与边缘相关的尺度和方向信息

    标准:
    检测标准:不丢失重要的边缘,不应有虚假的边缘

    定位标准:实际边缘与检测到的边缘位置之间的偏差最小

    单响应标准:将多个响应降低为单个边缘响应。这个标准可以解决受噪声影响的边缘问题,以及起到地址非平滑边缘检测算子的作用。

    步骤:
    A、用高斯滤波器对图像去噪

    B、计算像素的梯度

    C、在边缘检测的基础上使用非最大抑制NMS&是B步的辅助

    D、在检测到的边缘上使用双double阈值去除假阳性&又被称为滞后阈值化处理

    E、分析所有的边缘以及其之间的连接,以保留真正的边缘,并消除不明显的边缘。(一般这一步都会省略)

    步骤解释:

    B、计算梯度

    ①与正交微分滤波器(Prewitt)做卷积

    ②生成水平方向上导数图像H和垂直方向上的导数图像V

    在这里插入图片描述

    当幅度超过一个临界值时,需要使用非极大值抑制的方法,删除这些不需要的响应。

    C、非极大值抑制:搜索局部极大值,抑制非极大值。

    在这里插入图片描述

    <2>与每个角度相关的像素被分别处理。若垂直于梯度的相邻两个像素中的任何一个有较大数值,其幅度将被设置为0。

    意义:这样的话,边缘幅值分布极大值处的梯度可以保留,而那些远离极大值的梯度将被抑制。

    D双double阈值去除假阳性&滞后阈值化处理—基本属于收尾阶段

    为了防止出现给定阈值的漏检或者误检现象(幅值<阈值,但是有边缘/标记为边缘但是实际上不存在此边缘),给定两个阈值x1,x2,其中x1<x2,所有幅值超过x2的像素被标定为边缘—可以减少误检。所有幅值超过较小阈值x1的像素,并且与一条已经存在的边缘相连接的像素也被标定为边缘—可以减少漏检

    import cv2
    import numpy as np
    
    v2.imread("img.jpg", 0) 
    cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300)) 
    cv2.imshow("canny", cv2.imread("canny.jpg"))
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    结果为:
    在这里插入图片描述

    展开全文
  • Canny边缘检测算法由计算机科学家JohnF.Canny 于1986年提出的。其不仅提供了算法,还带来了一套边缘检测的理论,分阶段的解释如何实现边缘检测。Canny 检测算法包含下面几个阶段:1.灰度化2.高斯模糊3.计算图片梯度...
  • Canny边缘检测算法原理及其VC实现详解Canny边缘检测算法原理及其VC实现详解
  • 本文件包为canny边缘检测算法代码,matlab编写,用于检测图像边缘。
  • 一种自适应的Canny边缘检测算法
  • Canny边缘检测算法解析

    千次阅读 2018-07-15 09:20:49
    最近在做边缘检测方面的一些工作,在网络上也找了很多有用的资料,感谢那些积极分享知识的先辈们,自己在理解Canny边缘检测算法的过程中也走了一些弯路。就此写下此文,作为后记,也希望此篇文章可以帮助那些在理解...

    前言

    最近在做边缘检测方面的一些工作,在网络上也找了很多有用的资料,感谢那些积极分享知识的先辈们,自己在理解Canny边缘检测算法的过程中也走了一些弯路。就此写下此文,作为后记,也希望此篇文章可以帮助那些在理解Canny算法的道路上暂入迷途的童鞋。废话少说,上干货。

    Canny边缘检测算法的发展历史

    Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出,就此拉开了Canny边缘检测算法的序幕。

    Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括:

    1) 以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。

    2) 检测到的边缘应精确定位在真实边缘的中心。

    3) 图像中给定的边缘应只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。

    为了满足这些要求,Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述,它可以由高斯函数的一阶导数来近似。

    在目前常用的边缘检测方法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流行的算法之一。

    Canny边缘检测算法的处理流程

    Canny边缘检测算法可以分为以下5个步骤:

    1) 使用高斯滤波器,以平滑图像,滤除噪声。

    2) 计算图像中每个像素点的梯度强度和方向。

    3) 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

    4) 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

    5) 通过抑制孤立的弱边缘最终完成边缘检测。

    下面详细介绍每一步的实现思路。

    1 高斯平滑滤波

    为了尽可能减少噪声对边缘检测结果的影响,所以必须滤除噪声以防止由噪声引起的错误检测。为了平滑图像,使用高斯滤波器与图像进行卷积,该步骤将平滑图像,以减少边缘检测器上明显的噪声影响。大小为(2k+1)x(2k+1)的高斯滤波器核的生成方程式由下式给出:

    这里写图片描述

    下面是一个sigma = 1.4,尺寸为3x3的高斯卷积核的例子(需要注意归一化):

    这里写图片描述

    若图像中一个3x3的窗口为A,要滤波的像素点为e,则经过高斯滤波之后,像素点e的亮度值为:

    这里写图片描述

    其中*为卷积符号,sum表示矩阵中所有元素相加求和。

    重要的是需要理解,高斯卷积核大小的选择将影响Canny检测器的性能。尺寸越大,检测器对噪声的敏感度越低,但是边缘检测的定位误差也将略有增加。一般5x5是一个比较不错的trade off。

    2 计算梯度强度和方向

    图像中的边缘可以指向各个方向,因此Canny算法使用四个算子来检测图像中的水平、垂直和对角边缘。边缘检测的算子(如Roberts,Prewitt,Sobel等)返回水平Gx和垂直Gy方向的一阶导数值,由此便可以确定像素点的梯度G和方向theta 。

    这里写图片描述

    其中G为梯度强度, theta表示梯度方向,arctan为反正切函数。下面以Sobel算子为例讲述如何计算梯度强度和方向。
    x和y方向的Sobel算子分别为:

    这里写图片描述

    其中Sx表示x方向的Sobel算子,用于检测y方向的边缘; Sy表示y方向的Sobel算子,用于检测x方向的边缘(边缘方向和梯度方向垂直)。在直角坐标系中,Sobel算子的方向如下图所示。

    这里写图片描述

    若图像中一个3x3的窗口为A,要计算梯度的像素点为e,则和Sobel算子进行卷积之后,像素点e在x和y方向的梯度值分别为:

    这里写图片描述

    其中*为卷积符号,sum表示矩阵中所有元素相加求和。根据公式(3-2)便可以计算出像素点e的梯度和方向。

    3.非极大值抑制

    非极大值抑制是一种边缘稀疏技术,非极大值抑制的作用在于“瘦”边。对图像进行梯度计算后,仅仅基于梯度值提取的边缘仍然很模糊。对于标准3,对边缘有且应当只有一个准确的响应。而非极大值抑制则可以帮助将局部最大值之外的所有梯度值抑制为0,对梯度图像中每个像素进行非极大值抑制的算法是:

    1) 将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。

    2) 如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,否则该像素点将被抑制。

    通常为了更加精确的计算,在跨越梯度方向的两个相邻像素之间使用线性插值来得到要比较的像素梯度,现举例如下:

    这里写图片描述

    如图3-2所示,将梯度分为8个方向,分别为E、NE、N、NW、W、SW、S、SE,其中0代表0°~45°,1代表45°~90°,2代表-90°~-45°,3代表-45°~0°。像素点P的梯度方向为theta,则像素点P1和P2的梯度线性插值为:

    这里写图片描述

    因此非极大值抑制的伪代码描写如下:

    这里写图片描述

    需要注意的是,如何标志方向并不重要,重要的是梯度方向的计算要和梯度算子的选取保持一致。

    4.双阈值检测

    在施加非极大值抑制之后,剩余的像素可以更准确地表示图像中的实际边缘。然而,仍然存在由于噪声和颜色变化引起的一些边缘像素。为了解决这些杂散响应,必须用弱梯度值过滤边缘像素,并保留具有高梯度值的边缘像素,可以通过选择高低阈值来实现。如果边缘像素的梯度值高于高阈值,则将其标记为强边缘像素;如果边缘像素的梯度值小于高阈值并且大于低阈值,则将其标记为弱边缘像素;如果边缘像素的梯度值小于低阈值,则会被抑制。阈值的选择取决于给定输入图像的内容。

    双阈值检测的伪代码描写如下:

    这里写图片描述

    5.抑制孤立低阈值点

    到目前为止,被划分为强边缘的像素点已经被确定为边缘,因为它们是从图像中的真实边缘中提取出来的。然而,对于弱边缘像素,将会有一些争论,因为这些像素可以从真实边缘提取也可以是因噪声或颜色变化引起的。为了获得准确的结果,应该抑制由后者引起的弱边缘。通常,由真实边缘引起的弱边缘像素将连接到强边缘像素,而噪声响应未连接。为了跟踪边缘连接,通过查看弱边缘像素及其8个邻域像素,只要其中一个为强边缘像素,则该弱边缘点就可以保留为真实的边缘。

    抑制孤立边缘点的伪代码描述如下:

    这里写图片描述

    通过以上5个步骤即可完成基于Canny算法的边缘提取,图5-1是该算法的检测效果图,希望对大家有所帮助。

    展开全文
  • 主要介绍了python Canny边缘检测算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • canny 边缘检测算法

    2018-07-26 23:53:42
    此文为链接索引 1.解释得简单清楚的 ... 2.解释得更详细的 https://baike.baidu.com/item/canny%E7%AE%97%E6%B3%95/8439208?fr=aladdin 3.用公式吓人的 https://www.cnblogs.com/tech...
  • 为提高图像边缘检测的准确性和鲁棒性,提出一种基于鲁棒主成分分析(RPCA)的Canny边缘检测算法。该算法对图像进行RPCA分解得到图像的主成分和稀疏成分,利用Canny算子对主成分进行边缘检测,从而实现对图像的边缘检测...
  • Canny边缘检测算法以Canny的名字命名,被很多人推崇为当今最优的边缘检测的算法。 其中,Canny 的目标是找到一个最优的边缘检测算法,让我们看一下最优边缘检测的三个主要评价标准: 好的检测- 算法能够尽可能多地...
  • Canny 边缘检测算法-python实现

    千次阅读 2019-08-22 15:22:53
    Canny 边缘检测算法由计算机科学家 John F. Canny 于 1986 年提出的。其不仅提供了算法,还带来了一套边缘检测的理论,分阶段的解释如何实现边缘检测。本文章是Canny 边缘检测算法的python实现
  • Canny边缘检测算法细谈

    千次阅读 2018-04-13 09:17:12
    参考:https://www.cnblogs.com/techyan1990/p/7291771.html 1.Canny边缘检测算法的发展历史Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出,就此拉开了Canny...
  • 图像中部分低强度边缘在梯度幅值特性上与噪声点十分相似,因此,传统Canny边缘检测算法在采用基于梯度幅值的双阈值法检测和连接边缘时,尽管抑制了噪声,但同时也损坏了部分低强度边缘。针对这一问题,提出了一种...
  • Canny边缘检测算法背景 求边缘幅度的算法: 一阶导数:sobel、Roberts、prewitt等算子 二阶导数:Laplacian、Canny算子 Canny算子效果比其他的都要好,但是实现起来有点麻烦 Canny边缘检测算法的优势: Canny是目前...
  • Canny边缘检测算法(基于OpenCV的Java实现) 绪论 最近在学习ORB的过程中又仔细学习了Canny,故写下此篇笔记,以作总结。 Canny边缘检测算法的发展历史 Canny边缘检测于1986年由JOHN CANNY首次在论文《A ...
  • 目录1、简介2、Canny边缘检测算法主要步骤2.1 图像平滑2.2 计算梯度及其方向2.3 非极大值抑制2.3.1 插值法2.3.2 简化方法2.4 双阈值检测3、Opencv实例 1、简介 Canny边缘检是Canny在1986年提出来的,目前仍是图像...
  • Canny 边缘检测算法.pdf

    2019-06-10 10:29:48
    Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论(Computational theory of edge detection)解释这项技术如何工作。 通常情况下边缘检测的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,822
精华内容 728
关键字:

canny边缘检测算法