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

Sobel卷积因子为:

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:

具体计算如下:

Gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)

+(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)

+(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

= [f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]

Gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)

+0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)

+(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

= [f(x-1,y-1) + 2f(x,y-1) + f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]

其中f(a,b),表示图像(a,b)点的灰度值;

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

通常,为了提高效率使用不开平方的近似值:

如果梯度G大于某一阀值则认为该点(x,y)为边缘点。

然后可用以下公式计算梯度方向:

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

附带知识:

普利维特算子(Prewitt operate):

除sobel边缘检测外还有Prewitt算子,它的卷积因子如下:

其他计算和sobel差不多;

Prewitt算子利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘。对噪声具有平滑作用,定位精度不够高。

罗伯茨交叉边缘检测(Roberts Cross operator)

卷积因子如下:

灰度公式为:

近似公式为:

具体计算如下:

G(x,y)=abs(f(x,y)-f(x+1,y+1))+abs(f(x,y+1)-f(x+1,y))

灰度方向计算公式为:

Roberts算子采用对角线方向相邻两像素之差近似梯度幅值检测边缘。检测水平和垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感

其他边缘检测技术:

参考文章:

sobel 边缘检测 c语言,Sobel边缘检测算法(转载)(示例代码)相关推荐

  1. python算法实现源码_python 实现A_算法的示例代码

    python 实现A_算法的示例代码 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  python 实现A_算法的示例代码.txt ] (友情提示:右键点上行txt ...

  2. python 代码排布_python实现经典排序算法的示例代码

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想. 冒泡排序 内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后 ...

  3. 动图图解C语言选择排序算法,含代码分析

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  4. c语言选择排序法程序设计,C语言选择排序算法及实例代码

    选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直 ...

  5. c语言选择排序详解及代码,C语言选择排序算法及实例代码

    选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直 ...

  6. 分水岭算法 c语言实现,分水岭算法MATLAB编程代码解析

    close all; %% %Step 1: 彩***像->灰度图像 rgb = imread('pears.png'); I = rgb2gray(rgb); figure;subplot(1 ...

  7. python语言实现冒泡算法(附代码)

    冒泡算法的基本原理就是让大的数冒泡冒到列表的最后,最大的排在最后一位,第二大的排到最后第二位,以此类推,直到整个列表遍历完整.具体的代码如下所示: num_list = [5,8,3,7,2,1,0, ...

  8. C语言八大排序算法【详细 代码+图文】

    这里写目录标题 1.冒泡排序 1.1 冒泡排序的思想 1.2 冒泡排序的实现 2.选择排序 2.1 选择排序的思想 2.2 选择排序的实现 3.直接插入排序 3.1 直接插入排序的思想 3.2 直接插 ...

  9. C语言经典排序算法的完整代码

    排序 1.插入排序 1.1直接插入排序 int insertSort(int array[],int n){int i , j;int tempNum;for(i = 1; i < n;i++) ...

  10. 三位数最大公约数c语言,C语言求最小公倍数和最大公约数三种算法(经典)(示例代码)...

    把以前写的一些经验总结汇个总,方便给未来的学弟学妹们做个参考! --------------------------永远爱你们的:Sakura 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们 ...

最新文章

  1. oracle如何给表上锁,【ORACLE】Oracle中发生表加锁、死锁的原因,查看,与解决方法...
  2. Linux kernel 学习笔记(1) --分段分页保护机制
  3. cnblogs_504 Gateway Time-out
  4. windows功能_这 12 个好用 Windows 软件,让你也能用上 macOS 的独占功能
  5. kmeans中的k的含义_硬质合金中P、M、K、N、S、H六大字母含义详解
  6. redis 通过aof日志恢复_Redis从入门到精通(四、Redis的持久化和数据备份与恢复)
  7. pthread_attr_t 线程属性(一)
  8. redis php 使用实例
  9. html中文字怎么自动排版,CSS网页布局中文字排版九大技巧
  10. 使用pandas计算环比、同比
  11. 如何使计算机用户具有管理权限,如何把电脑普通用户权限提升超级管理员账户...
  12. 水星无线wan服务器无反应,怎么解决水星路由器WAN口获取不到IP地址
  13. 关闭idea任务栏小图标
  14. 火线精英正在维护服务器吗,火线精英1月20日23:00更新维护公告
  15. Windows安装证书
  16. 数据结构算法【考研】
  17. WinRAR 6.0 sc 去广告版
  18. JS高级笔记:CommonJs与ESModule的区别
  19. matlab中 hold on 与 hold off,figure作用
  20. Django 项目试炼blog(10) --补充 滑动验证码

热门文章

  1. Linux下批量tiff转pdf
  2. 用计算机弹极乐净土谱,极乐净土计算器谱子
  3. 纬地道路纵断面设计教程_如何高效算量?市政道路从识图算量到施工工艺,一篇全搞定!...
  4. 微PE制作U盘启动盘教程
  5. [Qualcomm][MSM8937] MSM89XX平台上加载modem固件失败
  6. oracle怎么启动oem,Oracle 启动OEM
  7. 漏洞挖掘之通达OA2017任意文件上传(漏洞已失效)
  8. 基于SRIO总线的高速通信
  9. 很有意思的HDB3编解码--C++实现
  10. SDIO接口(3)——SDIO总线接口