android中应用OpenCV之图像边缘检查评定,边缘检验原理attilax总计

 

此时此刻可比炎暑的图像识别手艺,如车牌号识别、身份ID识别、人脸识别等,都布满选用到了图像边缘检测,明天自己所介绍的正是OpenCV边缘检查实验,完毕边缘检测有多个步骤:滤波->巩固->检验,opencv中有七个常用的边缘检验算子函数:canny、sobel和laplace。
依赖一张原图:

图片 1

myname.png

 

canny算子

 

Canny边缘检查实验算子是一种多级检查实验算法,Canny的目的是找到二个最优的边缘检查测量检验算法,算法能够尽量多地方统一标准识出图像中的实际边缘,标志出的边缘要与实际图像中的实际边缘尽也许临近,图像中的边缘只好标记叁回,何况恐怕存在的图像噪声不应标记为边缘。Canny算法步骤:降噪->寻找图片的亮梯度->在图像中跟踪边缘。任何边缘检查实验算法都不容许在未经管理的原有数据上很好地管理,所以率先步是对原来数据与高斯平滑模板作卷积,获得的图像与原有图像相比较有个别一线的歪曲(blurred)。那样,单独的三个像素噪声在经过高斯平滑的图像上变得差十分少从不影响。图像中的边缘也许会针对分化的可行性,所以Canny算法使用4个mask检查实验水平、垂直以及对角线方向的边缘。原始图像与各类mask所作的卷积都存款和储蓄起来。对于每个点我们都标记在那几个点上的最大值以及变化的边缘的趋向。那样大家就从原始图像生成了图像中种种点亮度梯度图以及亮度梯度的动向。较高的亮度梯度相比有希望是边缘,不过尚未三个适宜的值来限制多大的亮度梯度是边缘多大又不是,所以Canny使用了落后阈值。滞后阈值必要多少个阈值——高阈值与低阈值。要是图像中的主要边缘都是连连的曲线,那样大家即可追踪给定曲线中模糊的一些,并且制止将未有组成曲线的噪音像素当成边缘。所以大家从一个极大的阈值最初,那将标记出我们比较确信的实际边缘,使用前面导出的取向消息,我们从那么些真的的边缘开端在图像中追踪整个的边缘。在追踪的时候,大家选用二个不大的阈值,那样就可以跟踪曲线的模糊部分结束大家回到源点。一旦那几个历程做到,我们就得到了一个二值图像,各种点表示是还是不是是一个边缘点。
一个获取亚像素精度边缘的革新达成是在梯度方向检验二阶方向导数的过零点:

图片 2

此处写图片描述

它在梯度方向的三阶方向导数满意符号条件:

图片 3

此处写图片描述

图片 4

那边写图片描述

意味着用高斯核平滑原始图像获得的尺度空间表示
L总结获得的偏导数。用这种办法取得的边缘片断是连连曲线,这样就无需其它的边缘追踪立异。滞后阈值也能够用于亚像素边缘检查实验。
格罗宁根大学学生的Canny算子达成边缘检查实验的三个web项目

 

  /**
   * 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总计

图片 5

 

此地写图片描述

1. 边缘检查测量试验的概念1

Sobel算子

1.1.
边缘检测的用途1

它是一个离散微分算子,近似于是贰个划算图像强度梯度的函数。在图像中的每一个点,Sobel-费尔德man算子的结果是对应的梯度向量大概这一个向量的范数。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. 罗Berts边缘检验算子2

sobel算子.png

3.2. rewitt边缘检查测试算子2

laplacian算子
在opencv中laplacian算子通过二阶导数来检查实验边缘,由于图疑似2D的,所以需求在多少个维度上行使导数。Opencv中央银行使laplacian总计图像的梯度,然后里面有调用了Sobel算子。
laplacian算子定义:

3.3. sobel边缘检查实验算子(较为常用)2

图片 11

4. Canny边缘检查评定(最常用)2

那边写图片描述

4.1.
参谋资料4

/**
       * 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];
    }

 

图片 12

 

此处写图片描述

1. 边缘检查实验的概念

边缘检查评定是图像管理与Computer视觉中极为首要的一种深入分析图像的点子,至少在自身做图像剖析与识别时,边缘是自己最欢快的图像特点。边缘检验的目标便是找到图像中亮度变化能够的像素点构成的集合,表现出来往往是大概。假设图像中边缘能够标准的度量和永世,那么,就象征实际的物体可以被固化和度量,满含实体的面积、物体的直径、物体的样子等就能够被衡量。在对实际世界的图像采集中,有下边4种情景会显未来图像中时产生一个边缘。

1. 深度的不一而再(物体处在差异的物平面上);

2. 表面方向的不一而再(如正方体的例外的七个面);

3. 实体质地不相同(那样会促成光的反射全面不一致);

4. 情景中光照不一样(如被树萌投向的本土

 

 

本小说作品版权所属:微笑面临,请关怀自个儿的CSDN博客:博客地址

1.1. 边缘质量评定的用处

 

边缘能够标准的度量和一定,那么,就代表实际的实体能够被定位和度量,包括实体的面积、物体的直径、物体的模样等就会被衡量

 

2. 边缘检查实验方法分类

· 基于梯度的主意

· Roberts,
Sobel, Prewitt

· 带方向的边缘检查评定

· Prewitt, Kirsch, Robinson

· 基于数十次求导的艺术

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

· 多级边缘检测

· Canny算法

 

 

3. 边缘检查测试的着力格局

3.1. 罗Berts边缘检查测验算子

一九六一年,Roberts建议了这种找寻边缘的算子。罗伯特s边缘算子是一个2×2的模版,接纳的是对角方向相邻的多个像素之差。从图像管理的实效来看,边缘定位较准,对噪音敏感。在罗Berts检查测量试验算子中

3.2. rewitt边缘检查评定算子

Prewitt利用附近邻域8个点的灰度值来打量中央的梯度,它的梯度总括公式如下

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

比起Prewitt算子,Sobel也是用附近8个像向来推断大旨像素的梯度,但是Sobel算子认为临近中央像素的点应该予以更加高的权重,所以Sobel算子把与主导像素4邻接的像素的权重设置为2或-2

百度搜索边缘检查实验,canny和sobel出来。。

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

canny边缘检查实验实际上是一种一阶微分算子检验算法,但为何那边拿出的话呢,因为它大致是边缘检查测验算子中特别常用的一种,也是私人商品房认为今后最雅观的边缘检查测量试验算子。Canny建议了边缘检查评定算子优劣评判的三条标准:

· 高的检查实验率。边缘检查测量试验算子应该只对边缘进行响应,检测算子不漏检任何边缘,也不应该将非边缘标识为边缘。

· 正确定位。检查实验到的边缘与事实上面缘之间的相距要尽量的小。

· 鲜明的响应。对每一条边缘唯有二遍响应,只获得二个点。

Canny边缘检验之所以能够是因为它在一阶微分算子的基础上,扩充了非最大值抑制和双阈值两项改善。利用非非常的大值抑制不仅可以够使得地防止多响应边缘,并且还足以加强边缘的定位精度;利用双阈值能够使得削减边缘的漏检率。

 

Canny边缘检查评定算法是一九九零年有John F. Canny开拓出来一种基于图像梯度总计的边缘

检验算法,同有时间Canny本人对计量图像边缘提取学科的升高也是做出了大多的进献。尽

管于今已经重重年过去,不过该算法仍旧是图像边缘检验方法杰出算法之一

 

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

1. 去噪声;

2. 乘除梯度与方向角;

3. 非最大值抑制;

4. 滑坡阈值化;

其间前两步非常粗大略,先用三个高斯滤波器对图像实行滤波,然后用Sobel水平和竖直检查实验子与图像卷积,来计算梯度和方向角。

二:Canny边缘检查评定算法

经文的Canny边缘检验算法平日都是从高斯模糊起来,到基于双阈值完结边缘连接完成

。不过在事实上工程应用中,考虑到输入图像都以彩色图像,最终边缘连接之后的图像要

二值化输出呈现,所以完全的Canny边缘检查测量试验算法落成步骤如下:

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

2.      对图像举行高斯模糊 去噪  3.      总括图像梯度,根据梯度总括图像边缘幅值与角度

4.      非最大时限信号压制管理(边缘细化)

5.      双阈值边缘连接管理

6.      二值化图像输出结果

 

 

高斯模糊的指标关键为了全体下落图像噪声,指标是为着更规范计量图像梯度及边缘

总结图像X方向与Y方向梯度,根据梯度总括图像边缘幅值与角度大小 计算图像梯度能够采取算子有罗布ot算子、Sobel算子、Prewitt算子等

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

简称:: EmirAttilax Akbar 埃Mill 阿提拉克斯 Ake巴

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

埃Mill 阿提拉克斯 Ake巴 本 马哈茂德 本 阿提拉 本 Solomon 本Adam 阿尔 拉帕努伊   

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

职务任职资格:uke总局o2o监护人,举世网格化项目创办者,uke宗教与文化融入事务部市长,Uke部落首席大酋长,uke制度与根本会议委员会省长,uke保卫安全部首席大队长,uke制度检查委员会副组织带头人,白牛科学技术cto ,uke波利尼西亚区大区连锁监护人,克尔Glenn群岛区连锁总管,Ryan群岛区连锁总管,uke汤加王国区域理事。布维岛和南George亚和南桑威奇群岛大区连锁理事

 

转发请表明来源:attilax的专栏   http://www.cnblogs.com/attilax/

–Atiend

 

 

相关文章

admin

网站地图xml地图