16 OpenCV之Soble算子

本文介绍了Sobel算子在图像边缘提取中的应用,它是一种结合高斯平滑和微分求导的一阶微分算子。通过在水平和垂直方向上求导,计算图像的近似梯度。OpenCV提供了Sobel和Scharr函数来实现这一过程,后者在3x3内核下提供更精确的结果。处理流程包括高斯模糊、转换为灰度图像、计算一阶导数、取绝对值和图像合成。文章还给出了相关API的详细说明和示例。
摘要由CSDN通过智能技术生成

一、卷积应用-图像边缘提取

  • 图像的高频分量一般出现在像素值显著改变的地方,而高频分量的出现就容易勾画出图像的轮廓。在高等数学中我们知道函数变化剧烈其所对应的导数值越大(极大值),所以表示图像像素值改变最大的一个方法就是求出图像的导数。其梯度值剧烈的改变预示着图像中内容发生显著变化。
  • 假设我们有一张一维图像,图中灰度值的“跃升”表示边缘的存在,通过对函数进行一阶微分我们可以更加清晰的看到边缘“跃升”的存在,即在其一阶微分中最大值代表其所对应的像素值变化剧烈。我们可以推测对于图像边缘的检测可以通过定位梯度值大于邻域的像素的方法找到(或者推广到大于一个阈值即可认为是图像边缘)
    在这里插入图片描述

二、Soble算子

Sobel算子是一个离散微分算子(discrete differentiation operator),它用来计算图像灰度函数的近似梯度并结合了高斯平滑和微分求导,又被称为一阶微分算子、求导算子。

  • 1、在两个方向求导
    • 水平变化:将I与一个奇数大小的内核Gx进行卷积,比如当内核大小为3时,Gx计算结果为
      在这里插入图片描述
    • 垂直变化:将I与一个奇数大小的内核Gy进行卷积,比如当内核大小为3时,Gy的计算结果为:
      在这里插入图片描述
  • 2、在图像的每一点结合以上两个结果求出近似梯度:
    在这里插入图片描述
    有时也用如下更简单的代替:
    在这里插入图片描述
  • 注:当内核大小为3时,Sobel内核可能产生比较明显的误差,毕竟Sobel算子只是求取了导数的近似值,为了解决这一问题,opencv提供了Scharr函数,但该函数仅作用于大小为3的内核,该函数的运算与Sobel函数一样快,但结果更加精确,其内核如下:
    在这里插入图片描述

三、相关API

  • Soble
void cv::Sobel  ( InputArray  src,  
  OutputArray  dst,  
  int  ddepth,  
  int  dx,  
  int  dy,  
  int  ksize = 3,  
  double  scale = 1,  
  double  delta = 0,  
  int  borderType = BORDER_DEFAULT  
 ) 

InputArray src: 输入图像
OutputArray dst: 输出图像
int ddepth: 输出图像深度,与输入图像深度对应关系如下表所示:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值