边缘检测——sobel索伯算子 数学原理和应用
索伯算子(sobel operator)常用于边缘检测,在粗精度下,是最常用的边缘检测算子,以广泛应用几十年。sobel算子由两个3X3的卷积核构成,分别用于计算中心像素邻域的灰度加权差。分为垂直方向和水平方向的索伯滤波器Gx and
Gy。
sobel 算子的用途主要为:
边缘检测时: Gx用于检测纵向边缘, Gy用于检测横向边缘.
计算法线时: Gx用于计算法线的横向偏移, Gy用于计算法线的纵向偏移.
sobel算子应用时进行给定图像的卷积操作,卷积为计算图像大矩阵周围像素和滤波器矩阵对应位置元素的乘积, 然后把结果相加到一起, 最终得到的值就作为该像素的新值, 这样就完成了一次
卷积,之后继续移动卷积核,直到把大矩阵每个位置都运算完毕,因为相邻像素卷积结果一般具有相似输出,会产生大量冗余信息,一般为减少输出值会进行求取最大小值或者平均值的池化操作。
经sobel算子处理的图像(图像来源于网路,侵删)
值得注意的是,一般卷积操作会伴随卷积核的翻转,而sobel却不需要翻转,因为绕中心点旋转180°,并不影响结果。
sobel算子的卷积核的值是如何确定的呢?其实并不是经验数值,而是具有严格的数学推导,大部分教科书停留在对算子的直观解释上,一般描述为隔行或隔列的差分运算,然后做中心像素位置的2倍加权。实际上,并不是现行教科书上描述的简单的隔行/列的差分运算,中心像素位置也并未参与运算。目前流传的说法中以科学网 彭真明老师提出的曼哈顿距离表述的推导更为准确。
以下对这一过程进行简单推导:
对中心像素Z5求取多个方向的灰度差分,对于Z5的8个邻域,分为4个方向,即对角线和水平垂直4个方向对: (z1, z9) ,(z2, z8), (z3, z7), (z6, z4)。
定义一个给定邻域方向梯度矢量g的幅度为
|g| = <像素灰度差分>/<相邻像素的距离>
这里特别注意的是,距离为曼哈顿距离,而非欧氏距离(欧氏距离将推导出Frei和Chen(1991)提出的边缘检测器,见附图3)
由曼哈顿距离得出,相邻对角线像素的距离为2,水平与垂直距离为1,即在中心像素周围邻域像素的对角线距离为4,垂直水平距离为2,带入上述梯度矢量g计算公式求平均梯度矢量有:
G = {(z3-z7)/4 * [1, 1]+ (z1-z9)/4 * [-1, 1]+ (z2-z8)/2 * [0, 1]+ (z6-z4)/2 * [1, 0] }/4
式中, 4个单位向量 [1, 1],[-1, 1],[0, 1], [1, 0] 控制差分的方向.
上式展开后,有
G = [(z3- z7- z1+ z9)/4 + (z6-z4)/2, (z3- z7+ z1- z9)/4 + (z2-z8)/2] /4
为保留低位字节和加速运算,去除分母,即扩大16倍。
这样,计算公式变为:
G’ = 16*G
= [z3 - z7- z1+ z9 + 2*( z6 - z4), z3 - z7 + z1- z9 + 2*( z2-z8)]
= [z3 + 2z6 + z9 - z1 - 2z4-z7, z1 + 2z2 + z3 - z7 - 2z8 - z9]
按x-y方向,可分别写成:
G’x = (z3 + 2z6 + z9) - (z1 + 2z4 + z7)
G’y = (z1 + 2z2 + z3) - (z7 + 2z8 + z9)
由上式可得sobel垂直水平卷积核。
附图3:
参考:
http://blog.sciencenet.cn/blog-425437-1139187.html
https://baike.baidu.com/item/索伯算子/22735660?fr=aladdin
https://www.cnblogs.com/freeblues/p/5738987.html
https://www.zhihu.com/question/49376084
边缘检测——sobel索伯算子 数学原理和应用相关推荐
- 【opencv】19.图像边缘检测算子数学原理、像素一二阶导数的意义
1.像素一二阶导数的意义 下面导数是数学中的定义 一阶导数定义: { f ′ ( x ) = lim Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f ′ ( x ) = ...
- 索伯(Sobel)算子原理讲解和实现
文章结构 1. 简述Sobel算子 2. ndimage.Sobel 3. Sobel 算子自实现 4. Sobel算子的一些缺陷和替代方案 1. 简述Sobel算子 索伯算子主要用于边界检测,该算法 ...
- Halcon边缘检测Sobel、Laplace和Canny算子
提示:文章参考了网络上其他作者的文章,以及相关书籍,如有侵权,请联系作者. 文章目录 前言 一.像素级边缘提取 1.经典的边缘检测算子 2.边缘检测的一般流程 3.sobel_amp 算子 参考文献 ...
- 边缘检测Sobel、laplacian、canny算子
1.图像边缘检测 图像边缘检测对于分析图像中的内容.实现图像中物体的分割.定位等具有重要的作用.边缘检测大大减少了源图像的数据量,剔除了与目标不相干的信息,保留了图像重要的结构属性.常用的图像边缘检测 ...
- Python实现索伯尔算子
Python实现索伯尔算子 最近在学习Python,正好用sobel算子练练手,将就看看吧 先放原图 用Opencv中sobel算子做一下对比: # OpenCVori_img = cv.imread ...
- 边缘检测:Sobel、拉普拉斯算子
边缘 边缘(edge)是指图像局部强度变化最显著的部分.主要存在于目标与目标.目标与背景.区域与区域(包括不同色彩)之间,是图像分割.纹理特征和形状特征等图像分析的重要基础. 图像强度的显著变化可分为 ...
- [Python从零到壹] 五十八.图像增强及运算篇之图像锐化Sobel、Laplacian算子实现边缘检测
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
边缘 边缘(edge)是指图像局部强度变化最显著的部分.主要存在于目标与目标.目标与背景.区域与区域(包括不同色彩)之间,是图像分割.纹理特征和形状特征等图像分析的重要基础. 图像强度的显著变化可分为 ...
- Matlab图像边缘检测Roberts\Sobel\Prewitt\Canny算子
确定图像中的物体边界的一种方法是先检测每个像素和其直接淋雨的状态已决定该像素是否确实处于一个物体的边界上.具有这种特性的像素被标记为边缘点.当图像中各个像素的灰度级用来反映各像素要求的程度时,这种图像 ...
- java求sobel算子代码_边缘检测sobel算子
#1,个人理解 网上查了很多资料,都说sobel算子是用来检测边缘的,分别给了两个方向上的卷积核,然后说明做法,就说这就是sobel算子.对于我个人来说,还有很多不明白的地方,所以理清下思路. #2, ...
最新文章
- 「x is All You Need」,当学术论文开始标题党……
- AngularJS 2.0 学习记录(一)
- 面向对象VS面向过程
- docker 服务器重启 镜像丢失_将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定...
- html5 embed 不自动播放,html5自动播放与 iframe 你管videoautoplay=1不工作?_html5_开发99编程知识库...
- 智能安防系统如何防火、防盗、防煤气?
- 干掉Dubbo,换下Spring Cloud,这个架构有点厉害!
- 网络通信编程大作业--深度研究爬虫技术
- PostgreSQL 中文手册
- 沁恒MCU串口使用指南
- 彩球滑梯java_玩过这些手机游戏的人都老了 那些曾经风靡一时的手机游戏大盘点(二)...
- Widows下通过CMD创建磁盘
- TFT-LCD液晶显示器的工作原理
- 有50 只狗,找出其中病狗
- python编写代码求圆的面积_【Python】求圆的面积,书上的代码可执行却是0,不知道为什么...
- DIV自动填满剩余空间
- 中国主要湖泊水库面状矢量边界图层ArcGIS使用之二篇
- 论API hook——说360安全浏览器、金山网盾、瑞星、卡巴斯基、傲游浏览器等软件会互相冲突.
- SAP中文语言包安装配置
- 石油远程《机械设计》第三次在线作业
热门文章
- Android15_ListView分页
- 百度离线人脸识别sdk的使用
- Ontrack易恢复最新版EasyRecovery数据恢复软件功能
- cisco下模拟Linux防火墙,Cisco防火墙HA实例
- 服务器网卡驱动装好后本地连接显示,系统装好后网卡驱动也装好了,可是没有本地连接,怎么弄...
- linux下声卡配置文件,Linux设备配置之声卡配置
- idea生成WebService调用代码
- 嵌入式驱动工程师开发学习路线
- 化学实用计算机技能,实用化学化工计算机软件基础
- 十大经典排序算法(C语言实现)