sobel 边缘检测 c语言,Sobel边缘检测算法(转载)(示例代码)
索贝尔算子(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边缘检测算法(转载)(示例代码)相关推荐
- python算法实现源码_python 实现A_算法的示例代码
python 实现A_算法的示例代码 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: python 实现A_算法的示例代码.txt ] (友情提示:右键点上行txt ...
- python 代码排布_python实现经典排序算法的示例代码
以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想. 冒泡排序 内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后 ...
- 动图图解C语言选择排序算法,含代码分析
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- c语言选择排序法程序设计,C语言选择排序算法及实例代码
选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直 ...
- c语言选择排序详解及代码,C语言选择排序算法及实例代码
选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直 ...
- 分水岭算法 c语言实现,分水岭算法MATLAB编程代码解析
close all; %% %Step 1: 彩***像->灰度图像 rgb = imread('pears.png'); I = rgb2gray(rgb); figure;subplot(1 ...
- python语言实现冒泡算法(附代码)
冒泡算法的基本原理就是让大的数冒泡冒到列表的最后,最大的排在最后一位,第二大的排到最后第二位,以此类推,直到整个列表遍历完整.具体的代码如下所示: num_list = [5,8,3,7,2,1,0, ...
- C语言八大排序算法【详细 代码+图文】
这里写目录标题 1.冒泡排序 1.1 冒泡排序的思想 1.2 冒泡排序的实现 2.选择排序 2.1 选择排序的思想 2.2 选择排序的实现 3.直接插入排序 3.1 直接插入排序的思想 3.2 直接插 ...
- C语言经典排序算法的完整代码
排序 1.插入排序 1.1直接插入排序 int insertSort(int array[],int n){int i , j;int tempNum;for(i = 1; i < n;i++) ...
- 三位数最大公约数c语言,C语言求最小公倍数和最大公约数三种算法(经典)(示例代码)...
把以前写的一些经验总结汇个总,方便给未来的学弟学妹们做个参考! --------------------------永远爱你们的:Sakura 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们 ...
最新文章
- oracle如何给表上锁,【ORACLE】Oracle中发生表加锁、死锁的原因,查看,与解决方法...
- Linux kernel 学习笔记(1) --分段分页保护机制
- cnblogs_504 Gateway Time-out
- windows功能_这 12 个好用 Windows 软件,让你也能用上 macOS 的独占功能
- kmeans中的k的含义_硬质合金中P、M、K、N、S、H六大字母含义详解
- redis 通过aof日志恢复_Redis从入门到精通(四、Redis的持久化和数据备份与恢复)
- pthread_attr_t 线程属性(一)
- redis php 使用实例
- html中文字怎么自动排版,CSS网页布局中文字排版九大技巧
- 使用pandas计算环比、同比
- 如何使计算机用户具有管理权限,如何把电脑普通用户权限提升超级管理员账户...
- 水星无线wan服务器无反应,怎么解决水星路由器WAN口获取不到IP地址
- 关闭idea任务栏小图标
- 火线精英正在维护服务器吗,火线精英1月20日23:00更新维护公告
- Windows安装证书
- 数据结构算法【考研】
- WinRAR 6.0 sc 去广告版
- JS高级笔记:CommonJs与ESModule的区别
- matlab中 hold on 与 hold off,figure作用
- Django 项目试炼blog(10) --补充 滑动验证码
热门文章
- Linux下批量tiff转pdf
- 用计算机弹极乐净土谱,极乐净土计算器谱子
- 纬地道路纵断面设计教程_如何高效算量?市政道路从识图算量到施工工艺,一篇全搞定!...
- 微PE制作U盘启动盘教程
- [Qualcomm][MSM8937] MSM89XX平台上加载modem固件失败
- oracle怎么启动oem,Oracle 启动OEM
- 漏洞挖掘之通达OA2017任意文件上传(漏洞已失效)
- 基于SRIO总线的高速通信
- 很有意思的HDB3编解码--C++实现
- SDIO接口(3)——SDIO总线接口