点击此处返回总目录

这节介绍Sobel算子的函数及使用。

1. Sobel函数介绍

1.1 参数ddepth

ddepth指 处理结果图像深度。通常情况下,可以将该参数的值设置为-1, 让处理结果与原始图像保持一致。

但是在处理的时候,我们不采用通常的情况,也就是不写为-1。为什么呢?

如图,在计算图中黑色块位置的左右边界的Sobel算子的时候,左边界A处右边 - 左边 = -255,右边界B处 右边 - 左边 = 255。

针对-255(左边界A),因为图像像素值为0-255,所以要对-255进行处理。

一般有两种处理结果:

(1)处理为0。处理为0之后就变成黑色了,如右边上图所示,就看不出来了。因此这种方法只能计算出右边界。

(2)取绝对值变成255。如右边下图所示,可以看到左右边界。我们一般采用这种方式。

在垂直方向上是同样的道理:

如果将-255处理为0,那只能得到下边界的值,得不到上边界的值。

基于上面的考虑,ddepth就不要写成-1了(-1就是指使用np.uint8,当出现负数的时候np.uint8会将负数处理为0),而是使用cv2.CV_64F,这样就能够保留-255了。

还有一个问题,既然保留了负数的值,还要变成绝对值才行。我们再使用下面的函数将负数的值变成256色位图。

后面两个参数我们不用,只用第一个就行了。

1.2 参数dx、dy

如果要计算x轴方向的边界,则dx = 1, dy = 0

如果要计算y轴方向的边界,则dx = 0, dy = 1

实际上,计算x方向的梯度,使用的是下面的卷积核:

计算y轴方向的梯度,使用的是下面的卷积核:

以上是分别计算x和y方向的梯度,但我们在计算sobel算子的时候,要用到x和y的梯度。有两种方式来计算:

第一种方式,设为1,1。这种方式不太严谨,我们更多的是使用第二种方式。

第二种方式,分别计算,然后相加dst = dx + dy。当然为了使得像素值不超过255,一般加一个系数。比如,dst = dx * 0.5 + dy * 0.5。

当然,我们不需要自己加,opencv提供了一个函数addWeighted()。

具体的计算就是:

比如:

1.3 参数kernel

核我们一般不用,不用就表示是3。如果用的话,可以设成一个奇数。

3的意思就是3行3列的卷积核。

2. Sobel函数的使用

例1:使用默认值-1,只能得到右边界

1,0表示计算x轴方向的梯度。-1表示使用np.uint8类型,这样就会把负数处理为0,从而导致左边界显示不出来。

结果:

例2:不使用默认值了,但是还是不行

结果:

不使用默认值-1了,但是结果还是只有右边界。要想出现左边界,怎么办呢?还要取绝对值。

例3:正确的得到水平边界的方法

结果:

这样左右边界就都有了。

例4:正确地得到垂直边界的方法

同理,可以求垂直方向上的梯度。

结果:

例5:正确地计算sobel算子

结果:

可以看到,把边界都计算出来了。

例6:

我们再来对比一下,两种方式计算sobel算子有什么不同。

结果:

我们可以看到最后的结果,使用方式一,不能很好的提取边界信息。

注意:我们使用别的图像,使用方式一也能得到边界,但是得到的边界不完整,这样就会导致错误,比如:

9.2 sobel算子及其函数使用相关推荐

  1. opencv学习笔记16:梯度运算之scharr算子及其函数使用

    前文介绍了sobel算子 opencv学习笔记14:sobel算子及其函数使用 scharr算子理论 系数和sobel不一样,其他一样. scharr函数使用 dst=cv2.Scharr(src,d ...

  2. OpenCV(十五)边缘检测1 -- Sobel算子(一阶微分算子,X、Y方向边缘检测)

    目录 一.边缘检测基础理论 1.作用: 2.分类 1.基于搜索 2.基于零穿越 3.算子比较 二.Sobel算子基础理论 1.作用 2.原理及推导 3.更详细推导 4.Sobel函数 二.实战 1.对 ...

  3. Sobel算子及cvSobel

    转自:http://blog.sina.com.cn/s/blog_4bdbec750100mufo.html 由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法. 首先,我们来开一下计算 ...

  4. 【OpenCV 4开发详解】Sobel算子

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  5. 计算机视觉开源库OpenCV梯度之Sobel算子

    Sobel算子是像素图像边缘检测中最重要的算子之一,在机器学习.数字媒体.计算机视觉等信息科技领域起着举足轻重的作用.在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值.在图 ...

  6. sobel算子原理以及运用

    Sobel边缘检测算法: 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量 Sobel卷积因子为: ...

  7. OpenCV-Python教程(6)(7)(8): Sobel算子 Laplacian算子 Canny边缘检测

    OpenCV-Python教程(6.Sobel算子) 本篇文章介绍如何用OpenCV-Python来使用Sobel算子. 提示: 转载请详细注明原作者及出处,谢谢! 本文介绍使用OpenCV-Pyth ...

  8. OpenCV图像处理使用笔记(八)——Sobel算子

    前言 前面博客讲了矩阵之间的卷积操作,在图像处理中,使用一些标准的模板的卷积核与原图像进行运算,可以改变像素强度,从而影响周围其他像素的强度,常用于图像模糊.锐化及边缘检测等. Sobel算子 1.S ...

  9. sobel算子_OpenCV 学习:4 Sobel算子

    1 背景介绍 图像底层的处理对象,比如图像的噪点.边缘.直线.圆.特征点等为目的.那么本章主要解决的问题是如何提取图形中的边缘?是我们关心中的重点.那么,其数学原理是一阶离散差分的形式.故我们知道把一 ...

最新文章

  1. cv2 orb 图像拼接_OpenCV 实现多张图像拼接
  2. Newlife.Net QA
  3. javaScript获取url中的参数
  4. 初识-Android之智能短信项目相关技术整理
  5. POJ2481-Cows【树状数组】
  6. Objects.requireNonNull 方法说明
  7. C++引用和指针区别
  8. 【前沿方案】华为自动驾驶网络解决方案.pdf(附80页pdf下载链接)
  9. 【笔记】Java 信任所有SSL证书(解决PKIX path building failed问题)
  10. 树线段hdu 4508 美素数(线段树)
  11. 【15年浙江省赛 C ZOJ 3871】Convex Hull【极角排序】
  12. laravel 下载使用
  13. linux安装2870无线网卡,告诉你Ubuntu 12.04下RT5370无线网卡驱动安装的方法及命令
  14. 10年涨7倍!纵观南京房价变迁史,看哭多少买房人!
  15. 转:有关Forth语言
  16. BUUCTF:[XMAN2018排位赛]通行证
  17. 微信分享中将链接图标替换成自定义图片的实例
  18. 帮我写一份情书给在一起200天的女朋友,要求1000字
  19. java中flush函数作用_Java语言中flush()函数作用及使用方法详解
  20. 灰狼优化算法(GWO)附代码

热门文章

  1. tomcat安装教程及问题解析
  2. C++ 结构体定义和使用
  3. 数据结构常用的结构体定义
  4. windows编程之TextOut与DrawText
  5. 关于strcmp函数的用法
  6. 一度智信:电商店铺销量不够?必须提高店铺权重
  7. Prometheus核心概念:你是如何在项目中使用Summary类型的Metric的?
  8. Linux中的文件传输
  9. 修改浏览器默认的滚动条样式
  10. 华大智造科创板上市:募资36亿市值413亿 汪健再敲钟