边缘检测的用1率先想起一下边缘检测的一般步骤。在opencv中laplacian算子通过二阶导数来检测边缘。

 

率先回顾一下边缘检测的一般步骤:

眼下可比炎热的图像识别技术,如车牌号识别、身份证识别、人脸识别等,都泛应用到了图像边缘检测,今天自己所介绍的饶是OpenCV边缘检测,实现边缘检测出三单步骤:滤波->增强->检测,opencv中起三独常因此的边缘检测算子函数:canny、sobel和laplace。
附上一张原图:

图片 1

myname.png

 

边缘检测算法一般含如下四单步骤:

canny算子

 

  1.滤波(去噪)

Canny边缘检测算子是一模一样种多级检测算法,Canny的靶子是找到一个极其精良的边缘检测算法,算法能够尽可能多地标识出图像被的其实边缘,标识出之边缘要与实际图像遭到之实际上边缘尽可能接近,图像中的边缘只能标识一不善,并且可能有的图像噪声不承诺标识也边缘。Canny算法步骤:降噪->寻找图片的亮梯度->在图像中跟踪边缘。任何边缘检测算法都不容许于未经处理的原本数据及特别好地处理,所以首先步是针对性原来数据与高斯平滑模板作卷积,得到的图像及原本图像相比略轻微的歪曲(blurred)。这样,单独的一个像素噪声在经高斯平滑的图像上更换得几乎没有影响。图像中的边缘可能会见针对不同之大势,所以Canny算法使用4单mask检测水平、垂直以及针对性角线方向的边缘。原始图像及每个mask所发的卷积都存储起来。对于每个点我们都标识在是点及之无比可怜价值和变化的边缘之趋向。这样我们便打原图像生成了图像被每个点亮度梯度图和亮度梯度的大势。较高的亮度梯度比较有或是边缘,但是并未一个当的价来限制多非常之亮度梯度是边缘多可怜并且无是,所以Canny使用了落后阈值。滞后阈值需要少个阈值——高阈值与没有阈值。假设图像中之显要边缘都是接连的曲线,这样咱们虽可跟给定曲线中模糊的部分,并且避免以从未做曲线之噪声像素当成边缘。所以我们由一个较充分之阈值开始,这将标识出我们较确信的真实性边缘,使用前导出的动向信息,我们打这些真正的边缘开始以图像遭到跟踪整个的边缘。在跟的上,我们用一个较小之阈值,这样就是可跟踪曲线的歪曲部分截至我们回来起点。一旦这个进程一气呵成,我们虽取了一个二值图像,每个点表示是否是一个边缘点。
一个赢得亚像素精度边缘的改善实现是于梯度方向检测二阶方向导数的过零点:

图片 2

此间描绘图片描述

她于梯度方向的老三号方向导数满足符号条件:

图片 3

这边描绘图片描述

图片 4

此间描绘图片描述

表示用高斯核平滑原始图像得到的尺度空间表示
L计算得到的偏导数。用这种艺术赢得的边缘片断是连曲线,这样就非欲另外的边缘跟踪改进。滞后阈值也足以用于亚像素边缘检测。
格罗宁根大学生的Canny算子实现边缘检测的一个web项目

 

  2.提高(一般是透过测算梯度幅值)

  /**
   * canny算子 三通道
   * 第一个参数,输入图像,需为单通道8位图像。
   * 第二个参数,输出的边缘图,需要和源图片有一样的尺寸和类型。
   * 第三个参数,第一个滞后性阈值。
   * 第四个参数,第二个滞后性阈值。
   * 第五个参数,表示孔径大小,其有默认值3。
   * 第六个参数,计算图像梯度幅值的标识,有默认值false。
   * 需要注意的是,这个函数阈值1和阈值2两者的小者用于边缘连接,
   * 而大者用来控制强边缘的初始段,推荐的高低阈值比在2:1到3:1之间
   */
CV_EXPORTS_W void Canny( InputArray dx, InputArray dy,
                         OutputArray edges,
                         double threshold1, double threshold2,
                         bool L2gradient = false );

 Mat img(h,w,CV_8UC4,pixels);
    Mat outImg;
    cvtColor(img,outImg,COLOR_BGR2BGR);
    //滤波
     blur(outImg,outImg,Size(3,3));
//    //Canny算子边缘检测
    Canny(outImg,outImg,3,9);
    Mat out;
    out = Scalar::all(0);
    img.copyTo(out,outImg);
    uchar *ptr = img.ptr(0);
    uchar *outPtr = outImg.ptr(0);
    for (int i = 0; i < w * h; ++i) {
        ptr[4*i+0] = outPtr[3*i+0];
        ptr[4*i+1] = outPtr[3*i+1];
        ptr[4*i+2] = outPtr[3*i+2];
    }

Atitit
边缘检测原理attilax总结

  3.检测(在图像中产生众多碰的梯度幅值会比较深,而这些点连无还是边缘,所以当用某种方式来确定边缘点,比如最简便的边缘检测判据:梯度幅值阈值)

图片 5

 

  4.稳住(有的利用场合要求确定边缘位置,可以以子像素水平上去估计,指出边缘的岗位与可行性)

此处描绘图片描述

1. 边缘检测的概念1

 

Sobel算子

1.1.
边缘检测的用途1

边缘检测方法比较常用的有基于各种算子的措施,有根据一阶导数的各种算子(Roberts、Sobel、Prewitt等),还有基于二阶导数的拉普拉斯算子等。

她是一个离散微分算子,近似于是一个计量图像强度梯度的函数。在图像遭到之每个点,Sobel-Feldman算子的结果是对应的梯度向量或者是向量的范数。Sobel算子基于将图像和水准及直方向直达之略之不过分别的整数值的滤波器进行卷积,因此当算达相对较节约时间。另一方面,它产生的梯度相对较粗,特别是于图像被的累变化。
运算符使用以及原始图像卷积的星星点点单3×3内查处来计量导数的临近似值-
一个用以水平变动,另一个用于直。如果我们以A定义也来图像,则G x和G
y分别是富含水平以及垂直微分近似的有数幅图像,计算结果如下(
*此表示二维信号处理卷积操作):

图片 6

这边描绘图片描述

出于Sobel核可以讲为平均值和微分核的乘积,所以她们得以就此平滑的办法来计算梯度。例如,G
x可以描绘成:

图片 7

此处描绘图片描述

该X坐标在此地为定义也于右侧方向多,并y坐标被定义也为下方向多。在图像中之每个点,可以以获取的梯度近似值结合起来,得到梯度的轻重:

图片 8

QQ20180204-233542@2x.png

使这些信息,我们呢足以测算产生梯度的来头:

图片 9

QQ20180204-233551@2x.png

譬如,对于当右侧较亮的垂直边缘,θ是0。

2.
边缘检测方法分类1

其中同样阶导数一般找梯度极大值。

 /**
     * sobel算子 单通道
     * 第一个参数,输入图像
     * 第二个参数,目标图像
     * 第三个参数,输出图像的深度
            使用CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F
            使用CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F
            使用CV_32F, 取ddepth =-1/CV_32F/CV_64F
            使用CV_64F, 取ddepth = -1/CV_64F
     * 第四个参数,x 方向上的差分阶数。
     * 第五个参数,y方向上的差分阶数。
     * 第六个参数,核的大小;必须取1,3,5或7。
     * 第七个参数,计算导数值时可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的。
     * 第八个参数,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。
     * 第九个参数,边界模式,默认值为BORDER_DEFAULT。
     * 一般情况下,都是用ksize x ksize内核来计算导数的。
     * 然而,有一种特殊情况——当ksize为1时,往往会使用3 x 1或者1 x 3的内核。
     * 且这种情况下,并没有进行高斯平滑操作。
     */
CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth,
                         int dx, int dy, int ksize = 3,
                         double scale = 1, double delta = 0,
                         int borderType = BORDER_DEFAULT );

  Mat img(h,w,CV_8UC4,pixels);
   Mat outImg;
  cvtColor(img,outImg,COLOR_BGR2GRAY);//单通道
   Mat outimgX,outimgY,outXY;
    //x方向sobel梯度
    Sobel(outImg,outimgX,CV_8U,1,0);
    //y方向sobel梯度
    Sobel(outImg,outimgY,CV_8U,0,1);
    //合并梯度
    addWeighted(outimgX,0.5,outimgY,0.5,0,outXY);
    uchar *ptr = img.ptr(0);
    uchar *outPtr = outXY.ptr(0);
    for (int i = 0; i < w * h; ++i) {
        ptr[4*i+0] = outPtr[i];
        ptr[4*i+1] = outPtr[i];
        ptr[4*i+2] = outPtr[i];
    }

3. 边缘检测的基本方式2

二阶导数找了零点(需要忽略无意义之了零点(即均匀零区))。

图片 10

3.1. Roberts边缘检测算子2

正文主要概述一下边缘检测中比起代表性的之Canny和LoG算法。

sobel算子.png

3.2. rewitt边缘检测算子2

里Canny基于同一阶导数,而LoG算法基于二阶导数。

laplacian算子
以opencv中laplacian算子通过二阶导数来检测边缘,由于图像是2D底,所以用在少个维度上运用导数。Opencv中使laplacian计算图像的梯度,然后中间发生调用了Sobel算子。
laplacian算子定义:

3.3. sobel边缘检测算子(较为常用)2

 

图片 11

4. Canny边缘检测(最常用)2

Canny边缘检测器

这边描绘图片描述

4.1.
参考资料4

Canny边缘检测的算法步骤:

/**
       * laplacian函数
       * 第一个参数,输入图像,需为单通道8位图像。
       * 第二个参数,输出的边缘图,需要和源图片有一样的尺寸和通道数。
       * 第三个参数,目标图像的深度。
       *  IPL_DEPTH_8U - 无符号8位整型              0--255
       *  IPL_DEPTH_8S - 有符号8位整型                   -128--127
       *  IPL_DEPTH_16U - 无符号16位整型                0--65535
       *  IPL_DEPTH_16S - 有符号16位整型                -32768--32767
       *  IPL_DEPTH_32S - 有符号32位整型                00.0--1.0
       *  IPL_DEPTH_64F - 双精度浮点数                  0.0--1.0
       * 第四个参数,用于计算二阶导数的滤波器的孔径尺寸,大小必须为正奇数,且有默认值1。
       * 第五个参数,计算拉普拉斯值的时候可选的比例因子,有默认值1。放大或者缩小因子。
       * 第六个参数,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。
       * 第七个参数,边界模式,默认值为BORDER_DEFAULT。
       */
CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,
 int ksize = 1, double scale = 1, double delta = 0,int borderType = BORDER_DEFAULT );

    Mat img(h,w,CV_8UC4,pixels);
    Mat outImg;
    cvtColor(img,outImg,COLOR_BGR2GRAY);//单通道
     Laplacian(outImg,outImg,CV_8U);
      uchar *ptr = img.ptr(0);
    uchar *outPtr = outXY.ptr(0);
    for (int i = 0; i < w * h; ++i) {
        ptr[4*i+0] = outPtr[i];
        ptr[4*i+1] = outPtr[i];
        ptr[4*i+2] = outPtr[i];
    }

 

  1.用高斯滤波器平滑图像(不同条件之Canny检测子由高斯的不等标准各异来代表)

图片 12

 

  2.用一阶偏导有限差分计算梯度幅值和可行性(梯度方向为边缘法向)

这边描绘图片描述

1. 边缘检测的概念

边缘检测是图像处理以及电脑视觉中多重要之均等种分析图像的点子,至少在自家开图像分析和识别时,边缘是自我无比欣赏的图像特点。边缘检测的目的就是是找到图像被亮度变化急剧的像素点构成的集合,表现出往往是大概。如果图像中边缘能够规范的测量与稳定,那么,就表示实际的物体能够为一定与测量,包括物体的面积、物体的直径、物体的状等就是能于测。在针对切实世界之图像采集中,有下4种植情景会显现于图像中时形成一个边缘。

1. 深度的莫连续(物体处在不同之物平面上);

2. 外表方向的非连续(如刚刚方体的不等之蝇头只面);

3. 体材料不一(这样见面招致光之反射系数不同);

4. 情景被光照不同(如给树萌投向的地面

 

 

  3.对准梯度幅值进行非极大值抑制(Non-Maxima
Suppression, NMS)

本文章著作版权所属:微笑面对,请关注自身的CSDN博客:博客地址

1.1. 边缘检测的用处

 

边缘能够准确的测和固定,那么,就象征实际的物体能够给固化以及测量,包括物体的面积、物体的直径、物体的貌等就会叫测

 

  4.所以双阈值算法检测与连续边缘

2. 边缘检测方法分类

· 基于梯度的主意

· Roberts,
Sobel, Prewitt

· 带方向的边缘检测

· Prewitt, Kirsch, Robinson

· 基于数求导的方

· 拉普拉斯算子,(高斯拉普拉斯)LoG,(高斯差分)DoG

· 多级边缘检测

· Canny算法

 

 

  其中非极大值抑制细化了幅值图像中之屋脊带,只保留幅值局部变化最为可怜之触发。

3. 边缘检测的骨干办法

  双阈值算法:用有限只阈值得到两独阈值图像,然后拿大阈值的图像遭到的边缘连接成轮廓,连接时至轮廓的端点时,在低阈值图像及探寻得接连的边缘。不断采撷,直到有的间隙连接起来了却。

3.1. Roberts边缘检测算子

1963年,Roberts提出了这种寻找边缘的算子。Roberts边缘算子是一个2×2之沙盘,采用的凡本着竞赛方向相邻之星星点点单如从的差。从图像处理的实际效果来拘禁,边缘定位于准,对噪音敏感。在Roberts检测算子中

 

3.2. rewitt边缘检测算子

Prewitt利用周围邻域8单点之灰度值来打量中心的梯度,它的梯度计算公式如下

LoG边缘检测算法

3.3. sobel边缘检测算子(较为常用)

比较从Prewitt算子,Sobel也是用周围8独像从估计中心像从的梯度,但是Sobel算子认为靠近中心像从的触及当给重胜似之权重,所以Sobel算子把同中心像素4邻接的像素的权重设置也2还是-2

百度搜索边缘检测,canny和sobel出来。。

LoG边缘检测算法步骤:

4. Canny边缘检测(最常用)

canny边缘检测实际上是如出一辙栽同等品级微分算子检测算法,但为何这里将出以来也,因为它几乎是边缘检测算子中不过常用的一样栽,也是个人觉得现在极端美好之边缘检测算子。Canny提出了边缘检测算子优劣评判的老三长条标准:

· 高的检测率。边缘检测算子应该一味针对边缘进行响应,检测算子不漏检任何边缘,也无应拿未边缘标记为边缘。

· 精确定位。检测到的边缘与事实上边缘之间的离开要硬着头皮的多少。

· 明确的应。对每一样长达边缘就出同等涂鸦响应,只抱一个碰。

Canny边缘检测之所以美是因它们以同一路微分算子的基础及,增加了无最充分价值抑制和双阈值两项改善。利用非极大值抑制不仅可有效地遏制多响应边缘,而且还好增进边缘的定位精度;利用双阈值可以中削减边缘的漏检率。

 

Canny边缘检测算法大凡1986年发John F. Canny开发出来一种植基于图像梯度计算的边缘

检测算法,同时Canny本人对计量图像边缘提取学科的上进吗是做出了多之献。尽

管至今已经多年过去,但是该算法仍然是图像边缘检测方法经典算法有

 

Canny边缘检测关键细分四步进行:

1. 去噪声;

2. 计算梯度与方向角;

3. 非最充分价值抑制;

4. 后退阈值化;

个中前面少步很简单,先用一个高斯滤波器对图像进行滤波,然后据此Sobel水平及竖直检测子与图像卷积,来算梯度和方向角。

老二:Canny边缘检测算法

经的Canny边缘检测算法通常都是自高斯歪曲起来,到因对阈值实现边缘连接完毕

。但是在实际上工程采用中,考虑到输入图像都是彩色图像,最终边缘连接之后的图像而

二值化输出显示,所以整的Canny边缘检测算法实现步骤如下:

1.      彩色图像转换为灰度图像

2.      对图像进行高斯歪曲 去噪  3.      计算图像梯度,根据梯度计算图像边缘幅值与角度

4.      非最特别信号压制处理(边缘细化)

5.      双阈值边缘连接处理

6.      二值化图像输出结果

 

 

高斯模糊的目的根本为完整低落图像噪声,目的是为着重新标准测算图像梯度及边缘

算算图像X方向以及Y方向梯度,根据梯度计算图像边缘幅值与角度大小 计算图像梯度可以挑选算子有Robot算子、Sobel算子、Prewitt算子等

  1.平滑:高斯滤波器

4.1. 参考资料

 

边缘检测 – 凌风探梅的专辑 – 博客频道 – CSDN.NET.html

图像边缘检测技能同理论发展脉络梳理大放送

  • 凌风探梅的专栏 – 博客频道 – CSDN.NET.html

 

作者:: 绰号:老哇的爪子claw of
Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王”Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red
cloak

简称:: Emir
Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir
Attilax Akbar bin
Mahmud bin  attila
bin Solomon bin
adam Al Rapanui 

埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当 阿尔 拉帕努伊   

常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

职称:uke总部o2o负责人,全球网格化项目创始人,uke宗教与学识融为一体事务部部长,Uke部落首席大酋长,uke制度暨根本会议委员会委员长,uke保安部首席大队长,uke制度检查委员会可会长,奶牛科技cto ,uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛跟南乔治亚跟南桑威奇群岛大区连锁负责人

 

转载请注明来源:attilax的专辑   http://www.cnblogs.com/attilax/

–Atiend

 

 

  2.增强:Laplacian算子计算二阶导

  3.检测:二阶导零交叉点并对准应于一阶导数的可比充分峰值

  4.稳:线性内插

据悉卷积的求导法则,先卷积后求导和预求导后卷积是相当的,所以可以拿第1、2步合并为同步,先对高斯滤波器做拉普拉斯换,得到墨西哥草帽算子,然后又就此这算子与图像做卷积。

是算子还有一个得力之好像:使用有限单具有显著例外之标准差的高斯平滑掩模的异(DoG,
difference of Gaussians)。

相关文章