图像处理及机器视觉应用中的Sobel算子,是以它的提出者Irwin Sobel名字命名的。该算子没有在任何期刊或会议上正式发表过,当时仅在Stanford大学人工智能项目组的一个非正式的博士生讨论组会上与Gary Feldman(当时的一个在读研究生,也是Sobel的朋友)共同提出。Irwin Sobel还曾专门撰文申明,建议把Sobel算子的命名改成“Sobel-Feldman”算子[1-2]。

Sobel算子考虑了水平、垂直和2个对角共计4个方向对的梯度加权求和,是一个3×3各向异性的梯度算子。另外,大部分教科书停留在对算子的直观解释上,一般描述为隔行或隔列的差分运算,然后做中心像素位置的2倍加权。实际上,并不是现行教科书上描述的简单的隔行/列的差分运算,中心像素位置也并未参与运算(N8(p)邻域,非3×3邻域)。

Sobel算子具有严格的数学基础,主要关键点在于:

1)笛卡尔网格(Cartesian grid);

2)前向差分(Forward-difference);

3)距离反比的4方向对梯度加权;

4)城市距离(City-block distance)。

定义一个给定邻域方向梯度矢量g的幅度为

|g| = <像素灰度差分>/<相邻像素的距离>

Sobel采用的像素距离是一种城市距离(city-block),而并非通常的欧式距离。因此,对角方向相邻像素之间的距离值为2。

矢量'g'的方向可以通过中心像素“z5” 相关邻域的单位矢量给出,这里的邻域是对称出现的,即四个方向对: (z1, z9) ,(z2, z8), (z3, z7), (z6, z4)。沿着4个方向对上求其梯度矢量和,可以给出当前像素(z5)的平均梯度估计,则有

G = (z3-z7)/4 * [1, 1]+ (z1-z9)/4 * [-1, 1]+ (z2-z8)/2 * [0, 1]+ (z6-z4)/2 * [1, 0]

式中, 4个单位向量 [1, 1],[-1, 1],[0, 1], [1, 0] 控制差分的方向,系数1/4, 1/2为距离反比权重。

上式展开后,有

G = [(z3- z7- z1+ z9)/4 + (z6-z4)/2, (z3- z7+ z1- z9)/4 + (z2-z8)/2]

注意,上述公式里并没有求平方根。如果要求数字上的精确度,上式需要除以4得到平均梯度值。然而,一些典型的运算都是针对数值较小的整数的定点运算,除法会丢失低阶的重要字节, 更方便的是把向量乘于4,而不是除于4,以保留低阶字节。因此,计算出的估计值比平均梯度在数值上扩大了16倍。

这样,计算公式变为:

G' = 4*G

= [z3 - z7- z1+ z9 + 2*( z6 - z4),  z3 - z7 + z1- z9 + 2*( z2-z8)]

= [z3 + 2*z6 + z9 - z1 - 2*z4-z7,  z1 + 2*z2 + z3 - z7 - 2*z8 - z9]

按x-y方向,可分别写成:

G'x = (z3 + 2*z6 + z9) - (z1 + 2*z4 + z7)

G'y = (z1 + 2*z2 + z3) - (z7 + 2*z8 + z9)

以上式子,就与我们教科书上的表达式完全一致了,也很容易得出如图1所示的两方向Sobel算子模板。在邻域像素距离模型上,如果改用欧式距离,就不难得到Frei和Chen(1991)提出的边缘检测器了[3]。

另外,教科书上的一些经典滤波器,其实也都有它的计算模型,而不是人为的随意构建,如高斯(Gaussian)滤波器,拉普拉斯(Laplacian)滤波器,LoG滤波器等。

Sobel算子的数学基础相关推荐

  1. CV2 Sobel算子实现方法研究

    CV2 Sobel算子 一.Sobel算子 二.Sobel算子生成 1. Sobel算子的数学基础(大部分内容来源于第一个链接) (1)像素距离的3种数学描述 (2)笛卡尔网格与梯度加权 2. 其他S ...

  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. 灰度图像--图像增强 Robert算子、Sobel算子

    灰度图像--图像增强 Robert算子.Sobel算子         目录(?)[+] 开篇废话 图像梯度介绍 Robert算子 Sobel算子 代码 结果 总结 学习DIP第36天 转载请标明本文 ...

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

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

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

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

最新文章

  1. Ubuntu下安装Stanford CoreNLP
  2. 用 PHP 和 MySQL 保存和输出图片
  3. 服务器推送信息到客户端,服务器如何发送消息到客户端
  4. 逆变式x线装置有利于计算机控制吗,爱爱医资源射医学技术模拟试卷相关专业知要点分析.doc...
  5. js函数中的参数的个数
  6. java如何写线程外部类_廖雪峰Java读书笔记(六)--多线程(或称并发)
  7. “家乡好物直播”走进“水果第一县”,人大教授变身“好物推荐官”
  8. bind()的实现(持续更新中)
  9. Android Studio connot resolve symbol XXX 无法解析的符号
  10. java基础篇(二) ----- java面向对象的三大特性之继承
  11. 智驾小车|如何给树莓派系统接入摄像头模块
  12. recv函数linux,linux 下调用recv函数,死循环在recv函数里面,什么原因?
  13. Linux丢包故障的解决与思路
  14. word如何在任意页开始添加页码
  15. 手机怎样和宽带连接无线路由器设置路由器连接服务器,手机设置路由器步骤_用手机怎么设置路由器?-192路由网...
  16. 截图软件:TechSmith SnagIt V10.0.0.788英文原版+有效激活码
  17. 安装了MyIM,试验后感觉还不错
  18. 沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第七章 GTP的IP核配置
  19. Java JDK安装及环境变量配置(windows)
  20. 量子计算机基本信息单位,单粒子的量子态可作为存储最基本单位

热门文章

  1. 嵌入式cmp指令的判断标志位_嵌入式开发的基础知识
  2. selenium自动获取王者荣耀英雄海报并保存到本地
  3. 谈谈百度的短视与无奈
  4. Java安装 jdk环境配置
  5. “醒醒吧,世界上有技术驱动型公司!”
  6. Java8.0 新特性二之Stream
  7. Datawhale-Pandas中文教程[9]
  8. 一个asp.net OOM问题
  9. Java 保姆级教程——3.添加地图,地图根据人物移动
  10. web课程设计网页规划与设计 基于HTML+CSS美食网站设计与实现(6个页面)