您好、欢迎来到现金彩票网!
当前位置:至尊彩票 > 幅度分割 >

OpenCV图像处理篇之边缘检测算子

发布时间:2019-08-02 01:07 来源:未知 编辑:admin

  灰度或结构等信息的突变位置是图像的边缘,图像的边缘有幅度和方向属性,沿边缘方向像素变化缓慢,垂直边缘方向像素变化剧烈。因此,边缘上的变化能通过梯度计算出来。

  Gx对于x方向的梯度,Gy对应y方向的梯度,向量的幅值本来是mag(f) = (Gx2+Gy2)1/2,为简化计算,一般用mag(f)=Gx+Gy近似,幅值同时包含了x而后y方向的梯度信息。梯度的方向为α=arctan(Gx/Gy)。

  由于图像的数字离散特性,所以梯度微分运算用差分代替,并且用小的空域模板和图像进行卷积近似计算梯度,由于模板的不同,因此衍生处多种梯度算子:Roberts算子、Sobel算子和Prewitt算子。

  平滑模板都有一个特点,即模板内所有平滑值的和为0,因此梯度计算的步骤是:

  用mag(f)=Gx+Gy近似近似计算(x,y)点处的梯度值G(x,y)

  模板中心移动一个像素点,计算下一像素点的梯度值(这一平移求和的过程实质就是卷积运算)

  计算完所有的像素点处的梯度值后,选择一个阈值T,如果(x,y)处的G(x,y)T,则认为该点是边缘点

  上面的一阶导数算子,是各向异性的,因此分x方向和y方向的梯度值,而高斯拉普拉斯算子是对图像求二阶导数,边缘对应二阶导数的过零点。

  由上式可知,xy进行互换的结果是一样的,所以拉普拉斯算子没有x方向和y方向的区分,拉普拉斯算子对应图像中的差分运算是:

  相对于一阶导数,高斯拉普拉斯算子(Laplacian of Gaussian, LOG算子)由于求二阶导数,很容易将点噪声判别为边界,因此常在使用LOG算子前先用高斯平滑滤波器去除正态分布的噪声,二维高斯分布为:

  其中σ为高斯分布标准差,决定高斯滤波器的宽度,用该函数对图像平滑滤波,可以减少椒盐噪声对LOG算子的影响。

  Canny算子力图在抗噪声干扰与精度之间寻求最佳方案,Canny算子有相关的复杂理论,其基本的步骤是:

  使用非最大化抑制方法确定当前像素点是否比邻域像素点更可能属于边缘的像素,以得到细化的边缘 其实现是:将当前像素位置的梯度值与其梯度方向上相邻的的梯度方向的梯度值进行比较,如果周围存在梯度值大于当前像素的梯度值,则不认为查找到的当前像素点为边缘点。举例来说,Gx方向的3个梯度值依次为[2 4 3],则在Gx梯度方向上4所在像素点就是边缘点,如果把改成[2 4 1]就不是边缘点。如果用全向的梯度方向作为非最大抑制的判断依据,则要求G(x,y)所有4邻域的或8邻域的梯度值才被认为是边缘点。

  使用双阈值[T1,T2]法检测边缘的起点和终点,这样能形成连接的边缘。T2T1,T2用来找到没条线用来在这条线段两端延伸寻找边缘的断裂处,并连接这些边缘。

  经过之前的基础准备,感觉只要知道什么时候该用什么OpenCV函数,其它的一切都变得简单起来了。于是感觉学着去探索OpenCV的源码对自己的受益会更大,就从这里开始吧。

  ksize表示卷积核的大小,之前理论分析中取的是3x3的模板,对应到if( ksize == 3 ),order变量确定对x梯度方向的卷积模板进行赋值还是y梯度方向的卷积进行赋值,因此,当且仅当Sobel函数的输入实参中dx=1时才计算Gx方向的梯度,dy=1时才计算dy方向的梯度。OpenCV没有给出Prewiit算子的源码,但可以自己通过修改替换getDerivKernels函数实现Prewiit的功能。

  C++版本的Canny算子实际就是调用原来C版本中的函数,只是进行了下封装而已,在cvCanny函数中我看到这么几行代码:

  Canny就是调用Sobel算子计算x方向的梯度Gx和y方向的梯度Gy。计算梯度角度和非最大化抑制的代码有些长,

  这其中貌似用到了栈对邻域梯度信息进行保存,以上详细的实现没做太多的分析,但流程就摆在那里了。请注意,OpenCV中的Canny实现包含了Canny算子的3个步骤,唯独没有第一步中的高斯平滑滤波,因此调用前得先使用高斯平滑滤波。

  Canny算子的源码也很简单,只不过使用了GaussianBlur进行高斯平滑,

  请注意,上面的Sobel和LOG算子代码都没有在计算结果后使用阈值判断是否属于边界,而直接显示了边缘信息。

  Sobel边缘检测结果:右上为x梯度结果,左下为y梯度结果,右下为G(x,y)梯度结果

  3种边缘检測算子灰度或结构等信息的突变位置是图像的边缘,图像的边缘有幅度和方向属性。沿边缘方向像素变化缓慢,垂直边缘方向像素变化剧烈。因此,边缘上的变化能通过梯度计算出来。一阶导数的梯度算子对于二维的...博文来自:weixin_34268610的博客

  1.Sobel算子前面我们已经介绍了图像的卷积操作,而一个最重要的卷积运算就是对导数的计算,假设我们需要检测图像中的边缘部分,如下图所示:前面我们介绍图像的高频和低频分量的时候说到,图像的高频分量一般...博文来自:烟雨博客

  【OpenCV入门指南】第三篇Canny边缘检测   图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。   Canny边缘检...博文来自:MoreWindows Blog

  目录1车牌提取过程 1.1车辆图像获取 1.2车牌定位 1.3车牌字符分割 2车牌提取 2.1灰度化 2.2Candy边缘检测 2.3形态学(膨胀腐蚀)处理 2.4轮廓处理 2.5自适应...博文来自:Nine days

  题目的意思是:给N个小孩派发糖果,每个小孩都有一个相应的权重,有两个要求:1.每个小孩至少一个;2.权重较大的小孩得到的比相邻的小孩多。思路是把相邻这个概念拆分成左边和右边进行两次循环比较。先进行左边...博文来自:lyh_xd

  关于换脸的什么背景什么的,我也就不提了,直接说一下换脸所需要的步骤吧,在这里我用的是opencv和之前我用的CLM框架,CLM还是进行人脸关键点检测,利用opencv进行脸部替换和颜色风格统一。接下来...博文来自:wi162yyxq的博客

  OpenCV图像处理入门学习教程系列,上一篇第三篇:基于SIFT特征和SURF特征的微旋转图像拼接与融合生成全景图像的比较LoG边缘检测算子LoG边缘检测算子是DavidCourtnayMarr和El...博文来自:primetong的博客

  一、sobel算法简介  索贝尔算子(Sobeloperator)主要用作边缘检测,它是一离散性差分算子,它结合了高斯平滑和微分求导,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将...博文来自:Chenyukuai6625的博客

  【OpenCV入门指南】第四篇图像的二值化  在上一篇《【OpenCV入门指南】第三篇Canny边缘检测》中介绍了使用Canny算子对图像进行边缘检测。与边缘检测相比,轮廓检测有时能更好的反映图像的内...博文来自:MoreWindows Blog

  用opencv测量角度 但是有很多角度不能测量出来 用atan函数 坐标都是正确的 但是输出的角度不完整 例如我旋转线度都是基本正常的 但是70开始就立刻跳到44了 然后30几论坛

  转载自:我们可以使用正切操作将角度转变为斜率,那么怎样利...博文来自:客亦知夫水与月乎?

  Roberts算子,又称罗伯茨算子,是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子。他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感...博文来自:tony2278的专栏

  图像的边缘检测,是根据灰度的突变或者说不连续来检测,对于其中的算子有一阶导数和二价导数,这里先说基础的三种方法。     一梯度     首先介绍下梯度,梯度并非是一个数值,梯度严格意义上是一个向量,...博文来自:小木匠的博客

  第八节:边缘检测边缘检测:边缘检测指的是灰度值发生急剧变化的位置,边缘检测的目的是制作一个线图,在不会损害理解图像内容的情况下,有大大减少了图像的数据量,提供了对图像数据的合适概述。一:Roberts...博文来自:shawroad的博客

  收入囊中差分在边缘检测的角色Sobel算子OpenCVsobel函数OpenCVScharr函数prewitt算子Roberts算子葵花宝典差分在边缘检测到底有什么用呢?先看下面的图片作为人,我们可以...博文来自:abcd1992719g的专栏

  Laplace算子目标使用OpenCV函数cv::Laplacian来实现Laplace运算符的离散模拟。理论在上一个教程中,我们学习了如何使用Sobel操作符。这是基于以下事实:在边缘区域中,像素强...博文来自:君子性非异

  首先要了解一下梯度的概念,在高等数学中,对于连续的二维函数f(x,y),其点在(x,y)处的梯度是一个二维列向量V = [f对x偏导数 f对y偏导数]’那么梯度的幅值就是               ...博文来自:的博客

  拉普拉斯算子是最简单的各向同性二阶微分算子,具有旋转不变性。根据函数微分特性,该像素点值的二阶微分为零的点为边缘点。这样就实现了边缘检测。利用拉普拉斯算子作边缘检测前最好先对图像作一个高斯滤波(高斯滤...博文来自:清溪算法君老号

  1前言传统的低功耗MCU设计都是以8位MCU为主,因为8位内核逻辑门数相对较少,运行或泄露电流低,售价也相对低廉。但是,许多新兴的应用都需要比8位内核更大的处理效率。近年智能生活的抬头、物联网的建立,...博文来自:xiahouzuoxin

  在很多地方都看到要用高斯核函数做卷积,自己也查阅了些卷积的资料,看的感觉还是很茫然,哪位大神可以深入浅出的讲解下卷积的功能和使用方法,感激不尽!在线等。。。论坛

  关于卷积的理论这里就不啰嗦了。最近初步学习图像图例,使用java写点个对图像进项卷积操作的代码,实验的过程中感觉颇为惊奇,原来觉得高深的图像的锐化、浮雕、边缘检测等技术,原来用简单的卷积就可以轻松实现...博文来自:阳光玻璃杯

  基本步骤彩色图像转换为灰度图像高斯滤波,滤除噪声点计算图像梯度,根据梯度计算边缘幅值与角度非极大值抑制双阈值边缘连接处理二值化图像输出结果参考链接:博文来自:limengjuhanxin的专栏

  (1)索贝尔滤波器(Sobelfilter)是一种边检测器,它使用3×3内核来检测水平边和垂直边。Sobel算子有两个,一个是检测水平边缘的;另一个是检测垂直边缘的。在Opencv-python中,水...博文来自:机器之我心的博客

  在图像处理中我们时常需要将物体分割出来,或者区分前后景,等等。在这些问题中,边缘似乎是不可避免的问题,如何取一个你认为对的“边缘”是至关重要的。综上提出了“如何取边缘”的问题。那么,首先为了解题,我们...博文来自:coco的博客

  博客用于知识记录和学习交流,欢迎大家互动学习。作者:JackGao16CSDN文章链接:邮箱:、罗伯特Robert变换的原理奇葩算子Robert,说...博文来自:JackGao的博客

  网上搜的好多Roberts算法的代码,发现都不能用,于是就自己敲了一下,效果还行...博文来自:s12244315的博客

  一、学习心得:学习图像处理的过程中,刚开始遇到图像梯度和一些算子的概念,这两者到底是什么关系,又有什么不同,一直困扰着我。后来在看到图像分割这一模块后才恍然大悟,其实图像的梯度可以用一阶导数和二阶偏导...博文来自:Just Do It

  边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括:深度上的不连续、表面方向不连续、物质属性变化和...博文来自:never give up的博客

http://steveouch.com/fudufenge/652.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有