Sobel算子的数学基础
图像处理及机器视觉应用中的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算子的数学基础相关推荐
- CV2 Sobel算子实现方法研究
CV2 Sobel算子 一.Sobel算子 二.Sobel算子生成 1. Sobel算子的数学基础(大部分内容来源于第一个链接) (1)像素距离的3种数学描述 (2)笛卡尔网格与梯度加权 2. 其他S ...
- OpenCV(十五)边缘检测1 -- Sobel算子(一阶微分算子,X、Y方向边缘检测)
目录 一.边缘检测基础理论 1.作用: 2.分类 1.基于搜索 2.基于零穿越 3.算子比较 二.Sobel算子基础理论 1.作用 2.原理及推导 3.更详细推导 4.Sobel函数 二.实战 1.对 ...
- Sobel算子及cvSobel
转自:http://blog.sina.com.cn/s/blog_4bdbec750100mufo.html 由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法. 首先,我们来开一下计算 ...
- 【OpenCV 4开发详解】Sobel算子
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 计算机视觉开源库OpenCV梯度之Sobel算子
Sobel算子是像素图像边缘检测中最重要的算子之一,在机器学习.数字媒体.计算机视觉等信息科技领域起着举足轻重的作用.在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值.在图 ...
- sobel算子原理以及运用
Sobel边缘检测算法: 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量 Sobel卷积因子为: ...
- 灰度图像--图像增强 Robert算子、Sobel算子
灰度图像--图像增强 Robert算子.Sobel算子 目录(?)[+] 开篇废话 图像梯度介绍 Robert算子 Sobel算子 代码 结果 总结 学习DIP第36天 转载请标明本文 ...
- OpenCV-Python教程(6)(7)(8): Sobel算子 Laplacian算子 Canny边缘检测
OpenCV-Python教程(6.Sobel算子) 本篇文章介绍如何用OpenCV-Python来使用Sobel算子. 提示: 转载请详细注明原作者及出处,谢谢! 本文介绍使用OpenCV-Pyth ...
- OpenCV图像处理使用笔记(八)——Sobel算子
前言 前面博客讲了矩阵之间的卷积操作,在图像处理中,使用一些标准的模板的卷积核与原图像进行运算,可以改变像素强度,从而影响周围其他像素的强度,常用于图像模糊.锐化及边缘检测等. Sobel算子 1.S ...
最新文章
- Ubuntu下安装Stanford CoreNLP
- 用 PHP 和 MySQL 保存和输出图片
- 服务器推送信息到客户端,服务器如何发送消息到客户端
- 逆变式x线装置有利于计算机控制吗,爱爱医资源射医学技术模拟试卷相关专业知要点分析.doc...
- js函数中的参数的个数
- java如何写线程外部类_廖雪峰Java读书笔记(六)--多线程(或称并发)
- “家乡好物直播”走进“水果第一县”,人大教授变身“好物推荐官”
- bind()的实现(持续更新中)
- Android Studio connot resolve symbol XXX 无法解析的符号
- java基础篇(二) ----- java面向对象的三大特性之继承
- 智驾小车|如何给树莓派系统接入摄像头模块
- recv函数linux,linux 下调用recv函数,死循环在recv函数里面,什么原因?
- Linux丢包故障的解决与思路
- word如何在任意页开始添加页码
- 手机怎样和宽带连接无线路由器设置路由器连接服务器,手机设置路由器步骤_用手机怎么设置路由器?-192路由网...
- 截图软件:TechSmith SnagIt V10.0.0.788英文原版+有效激活码
- 安装了MyIM,试验后感觉还不错
- 沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第七章 GTP的IP核配置
- Java JDK安装及环境变量配置(windows)
- 量子计算机基本信息单位,单粒子的量子态可作为存储最基本单位
热门文章
- 嵌入式cmp指令的判断标志位_嵌入式开发的基础知识
- selenium自动获取王者荣耀英雄海报并保存到本地
- 谈谈百度的短视与无奈
- Java安装 jdk环境配置
- “醒醒吧,世界上有技术驱动型公司!”
- Java8.0 新特性二之Stream
- Datawhale-Pandas中文教程[9]
- 一个asp.net OOM问题
- Java 保姆级教程——3.添加地图,地图根据人物移动
- web课程设计网页规划与设计 基于HTML+CSS美食网站设计与实现(6个页面)