16. 边缘检测算子-sobel、canny、Laplacian等

论坛 期权论坛     
选择匿名的用户   2021-5-30 02:23   49   0
<p style="text-indent:33px;">边缘检测是<span style="color:#f33b45;">图像处理和计算机视觉</span>中,尤其是<span style="color:#f33b45;">特征提取</span>中的一个研究领域。图像边缘检测大幅度的减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。边缘检测,就是找到原始图像中画面出现<span style="color:#f33b45;">跳变</span>的地方。这里的跳变,可以理解为相邻像素的像素值出现了较大的变化,而梯度方向为灰度最大变化率的方向(求导解决)。</p>
<p>  在实际的图像分割中,往往只用到一阶和二阶导数,虽然原理上,可以用更高阶的导数,但是因为噪声的影响,在纯粹二阶的导数操作中就会出现对噪声的敏感现象,三阶以上的导数信息往往失去了应用价值。二阶导数还可以说明灰度突变的类型。在某些情况下,如灰度变化均匀的图像,只利用一阶导数可能找不到边界,此时二阶导数就能提供很有用的信息。二阶导数对噪声也比较敏感,解决的方法是先对图像进行平滑滤波,消除部分噪声,再进行边缘检测。不过,利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少,有利于后继的处理和识别工作。</p>
<p style="text-indent:33px;">边缘检测算子可分为以下几种:</p>
<ol><li style="text-indent:0px;">一阶微分算子:Roberts交叉梯度算子 、Prewitt算子、Sobel算子、Scharr算子。</li><li style="text-indent:0px;">二阶微分算子:Laplacian算子、 LOG算子</li><li style="text-indent:0px;">非微分边缘检测算子:canny算子。</li></ol>
<p style="text-indent:33px;">下面主要将canny算子和sobel算子的原理,其他算子只写出了实现函数.</p>
<h1 style="text-indent:0px;">1. sobel算子</h1>
<h2 style="margin-left:0cm;">1.1 <span style="color:#4d4d4d;">概念</span><span style="color:#4d4d4d;">:</span></h2>
<p style="text-indent:33px;"><span style="color:#4d4d4d;">索贝尔算子(</span><span style="color:#4d4d4d;">Sobeloperator</span><span style="color:#4d4d4d;">)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。</span></p>
<h2 style="margin-left:0cm;"><span style="color:#4d4d4d;">1.2 </span><span style="color:#4d4d4d;">原理</span><span style="color:#4d4d4d;">:</span></h2>
<p style="text-indent:33px;">Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘.Sobel算子的俩个梯度矩阵Gx和Gy, Gx 用来计算横向的梯度, Gy 用来计算纵向的梯度。</p>
<p style="text-align:center;"><img alt="" height="514" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-6eccfa28a68433a7197b81ac699bee32.png" width="805"></p>
<p style="text-indent:33px;">具体公式如下:</p>
<p style="text-align:center;"><img alt="" height="400" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-153ed22885e19c5f5089b834891878ff.png" width="812"></p>
<p style="text-indent:33px;">原图中的作用点像素值通过卷积之后为:</p>
<p style="text-align:center;"><img alt="" height="84" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-e26918b9abe4d6ebfb47a9907d365ddf.png" width="340"></p>
<p style="text-indent:33px;">可以化简成(为了提升效率):</p>
<p style="text-align:center;"><img alt="" height="60" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3958a5c2b1500da554895f50bfebbce9.png" width="318"></p>
<p style="text-indent:33px;">如果梯度G大于阈值,这认为(x, y)是边缘点.</p>
<p style="text-indent:33px;">Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素;当对精度要求不是很高时,是一种较为常用的边缘检测方法。</p>
<h2 style="margin-left:0cm;">1.3  优缺点:</h2>
<p style="text-indent:33px;">优点:计算简单,速度很快;</p>
<p style="text-indent:33px;">缺点:计算方向单一,对复杂纹理的情况显得乏力;直接用阈值来判断边缘点欠合理解释,会造成较多的噪声点误判。</p>
<h2 style="text-indent:0px;">1.4 实现函数- <span style="color:#f33b45;">cv2.sobel()</span></h2>
<ul><li style="text-indent:0px;">参数如下:cv2.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType]]]])</li><li style="text-indent:0px;">参数说明:</li><li>src:输入图像</li><li>ddepth: 输出图像的深度(可以理解为数据类型),是指存储每个像素值所用的位数,-1
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP