图像边缘检测——Sobel算子
计算这个向量的大小为:
通常为了提高效率,常近似表示为:
梯度的方向角为:
operator)是图像处理中的算子之一,主要用于边缘检测。在技术上,它是一离散型差分算子,用来运算图像亮度函数的梯度之近似值
。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。
具体计算如下:
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)点的灰度值。
再由Gx和Gy求出▽f,如果▽f大于某一阈值,则认为点(x,y)为边缘点。
4.实践效果
我在vs2013中使用opencv库中的cvSobel()函数对输入图像进行了边缘检测。效果如下:
原图:
因为Sobel算子适用于灰度化后的图像,所以还需将原图灰度化:
Gx、Gy可以检测到边的存在,以及从暗到亮,从亮到暗的变化。仅计算|Gx|,产生最强的响应是正交与X轴的边,即得到垂直边缘;仅计算|Gy|,产生最强的响应是正交于Y轴的边,即得到水平边缘。
仅作水平方向求导(Gx):
可以看到得到很多垂直边缘。
仅作垂直方向求导(Gy):
可以看到得到很多水平边缘。
利用Gx和Gy求出▽f,即梯度向量,以其大小|▽f|画出的图如下:
当然,因为边缘检测对图像噪声比较敏感,最好对原图用高斯滤波器进行平滑处理再进行灰度化。我这里没有做这一步。
由于是新浪博客,相关的代码贴不出来,不过也都是些简单的调用而已,查查opencv的API手册就知道如何使用了。
图像边缘检测——Sobel算子的更多相关文章
- 边缘检测sobel算子
sobel算子 - sophia_hxw - 博客园http://www.cnblogs.com/sophia-hxw/p/6088035.html #1,个人理解 网上查了很多资料,都说sobel算 ...
- python数字图像处理(三)边缘检测常用算子
在该文将介绍基本的几种应用于边缘检测的滤波器,首先我们读入saber用来做为示例的图像 #读入图像代码,在此之前应当引入必要的opencv matplotlib numpy saber = cv2.i ...
- 灰度图像--图像分割 Sobel算子
学习DIP第44天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不 ...
- 图像边缘检测——几种图像边缘检测算子的学习及python 实现
本文学习利用python学习边缘检测的滤波器,首先读入的图片代码如下: import cv2 from pylab import * saber = cv2.imread("construc ...
- [OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
http://blog.csdn.net/poem_qianmo/article/details/25560901 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...
- 学习 opencv---(11)OpenC 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器
本篇文章中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器——Canny算子,Sobel算子,Laplace算子以及Scharr滤波器.文章中包含了五个浅墨为大家准备的详细注释的博文配套源代码 ...
- opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测
opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测 这章讲了 sobel算子 scharr算子 Laplacion拉普拉斯算子 图像深度问题 Canny检测 图像梯度 sobel算子 ...
- 边缘检测:Canny算子,Sobel算子,Laplace算子
1.canny算子 Canny边缘检测算子是John F.Canny于 1986 年开发出来的一个多级边缘检测算法.更为重要的是 Canny 创立了边缘检测计算理论(Computational the ...
- Sobel算子取代:基于特定点方向的canny边缘检测
前言: Canny边缘检测使用了Sobel算子,计算dx和dy两个方向,对于特定方向的边缘检测,可以作少量修改. 代码: 计算特定方向上的边缘 void CannyOrient( cv::Mat &a ...
随机推荐
- 关于mysql乱码的问题
ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8 COLLATE UTF8_GENERAL_CI; 第一步,用mysql的自带修复工具在bin文 ...
- 连通性1 求无向图的low值
这是DFS系列的第一篇 . 首先给出一个重要的定理.该定理来自<算法导论>. An undirected graph may entail some ambiguity in how we ...
- A.3 词法分析器
包 lexer 是词法分析器的代码的扩展.类 Tag 定义了各个词法单元对应的常量. 1: package lexer; 2: public class Tag { 3: public final s ...
- java初学的分析
java初学的分析第一阶段:入门阶段学习目标:简单项目开发学习内容:1.Java入门书籍,Java基础知识.关于Java入门级的书,给大家推荐过<Java编程思想>.<Java核心技 ...
- tableView左滑删除功能
实现三个代理方法即可 -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtI ...
- SQL Server 2005 数据库复制(转载)
对于一个地域分散的大型企业组织来说,构建具有典型的分布式计算机特征的大型企业管理信息系统时,总要解决一个很重要的问题:如何在多个不同数 据库服务器之间保证共享数据的一致性.之所以有这个重要的问题在于企 ...
- 把电脑装成ubuntu系统了
2014年一月11日 今天本来想在自己的电脑上装双系统,电脑本来有个win7,想再装一个ubuntu. 本来想用wubi装,可是wubi没法安装13.10,并且wubi安装后,读写速度也不快. 在网上 ...
- C开发基础--函数调用栈
发现有一些问题几乎是所有的新人都会遇到,而且也常因为缺乏一些基本的知识而无从下手.函数调用栈的内容就是其中之一.于是花点时间把以前写的内容整理出来. 程序在运行期间,内存中有一块区域,用来实现程序的函 ...
- angular问题总结与反思
因为工作中实际开发需要,才开始接触angular框架.从当初的比葫芦画瓢,被各种问题.概念折磨摧残,到现在有一定的了解认识,觉得有必要将自己的认识进行简单的总结.不到位的地方还望多多包涵. 1.双向数 ...
- subverison的安装与注意事项
1.安装 :官网下载 http://blog.csdn.net/sinboy/article/details/4000524 http://sourceforge.net/projects/win32 ...