[ZZ] 边缘检测 梯度与Roberts、Prewitt、Sobel、Lapacian算子
http://blog.csdn.net/swj110119/article/details/51777422
一、学习心得:
学习图像处理的过程中,刚开始遇到图像梯度和一些算子的概念,这两者到底是什么关系,又有什么不同,一直困扰着我。后来在看到图像分割这一模块后才恍然大悟,其实图像的梯度可以用一阶导数和二阶偏导数来求解。但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样,对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的,而是根据数学中求导理论推导出来的。下面就逐一分析各梯度算子的推导过程。
二、算子推导过程
1、知识引入:
在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率,根据导数的定义有:
在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数,根据定义有:
2、梯度和Roberts算子:
对于图像来说,是一个二维的离散型数集,通过推广二维连续型求函数偏导的方法,来求得图像的偏导数,即在(x,y)处的最大变化率,也就是这里的梯度:
梯度是一个矢量,则(x,y)处的梯度表示为:
其大小为:
因为平方和平方根需要大量的计算开销,所以使用绝对值来近似梯度幅值:
方向与α(x,y)正交:
其对应的模板为:
上面是图像的垂直和水平梯度,但我们有时候也需要对角线方向的梯度,定义如下:
对应模板为:
上述模板就是Roberts交叉梯度算子。
2*2大小的模板在概念上很简单,但是他们对于用关于中心点对称的模板来计算边缘方向不是很有用,其最小模板大小为3*3。3*3模板考虑了中心点对段数据的性质,并携带有关于边缘方向的更多信息。
3、Prewitt和Sobel算子:
在3*3模板中:
我如下定义水平、垂直和两对角线方向的梯度:
该定义下的算子称之为Prewitt算子:
Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。
计算公式为:
Sobel算子:
上述所有算子都是通过求一阶导数来计算梯度的,用于线的检测,在图像处理中,通常用于边缘检测。在图像处理过程中,除了检测线,有时候也需要检测特殊点,这就需要用二阶导数进行检测。
4、Lapacian算子:
一阶导数:
二阶导数:
我们感兴趣的是关于点x的二阶导数,故将上式中的变量减1后,得到:
在图像处理中通过拉普拉斯模板求二阶导数,其定义如下:
对应模板为:
模板中心位置的数字是-8而不是-4,是因为要使这些系数之和为0,当遇到恒定湖对区域时,模板响应应将0。
在用lapacian算子图像进行卷积运算时,当响应的绝对值超过指定阈值时,那么该点就是被检测出来的孤立点,具体输出如下:
[ZZ] 边缘检测 梯度与Roberts、Prewitt、Sobel、Lapacian算子的更多相关文章
- 13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。
#include <opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/ ...
- paper 82:边缘检测的各种微分算子比较(Sobel,Robert,Prewitt,Laplacian,Canny)
不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像.需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界 ...
- 边缘检测之Sobel检测算子
在讨论边缘算子之前,首先给出一些术语的定义: (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像. (2)边缘点:图像中具有坐标[x,y],且处在 ...
- opencv —— Sobel 一阶导数算子、Scharr 滤波器 一阶导数用于边缘检测
sobel 算子的基本概念 sobel 算子是一个主要用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导,用于计算图像灰度函数的近似梯度. 其基础来自于一个事实,即在边缘部分,像素值出现“跳跃”或 ...
- Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Image Processing and Computer Vision_Review:A survey of recent advances in visual feature detection—2014.08
翻译 一项关于视觉特征检测的最新进展概述——http://tongtianta.site/paper/56761 摘要 -特征检测是计算机视觉和图像处理中的基础和重要问题.这是一个低级处理步骤,它是基 ...
- Python图像处理丨认识图像锐化和边缘提取的4个算子
摘要:图像锐化和边缘提取技术可以消除图像中的噪声,提取图像信息中用来表征图像的一些变量,为图像识别提供基础. 本文分享自华为云社区<[Python图像处理] 十七.图像锐化与边缘检测之Rober ...
- opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测
opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测 这章讲了 sobel算子 scharr算子 Laplacion拉普拉斯算子 图像深度问题 Canny检测 图像梯度 sobel算子 ...
- 图像特征提取:Sobel边缘检测
前言 点和线是做图像分析时两个最重要的特征,而线条往往反映了物体的轮廓,对图像中边缘线的检测是图像分割与特征提取的基础.文章主要讨论两个实际工程中常用的边缘检测算法:Sobel边缘检测和Canny边缘 ...
随机推荐
- mac下修改mysql默认字符集为utf8
1.首先检查默认安装的字符集 mysql> show variables like '%char%'; +--------------------------+----------------- ...
- Keil的断点调试问题解决
keil只有在程序能正常运行时才能添加断点后在点击调试任务时,断点标记不消失
- 解决 error: Your local changes to the following files would be overwritten by merge:XXXX
版权声明:这可是本菇凉辛辛苦苦原创的,转载请记得带上我家地址,不要忘记了哈 ... https://blog.csdn.net/u011314442/article/details/78852547 ...
- 匹配URL
使用一个不错的正则表达式来配对一个正确的url. string reg = @"(?i)(http://|https://)?(\w+\.){1,3}(com(\.cn)?|cn|net|i ...
- 注意&&前后两个表达式有顺序的差别
//插入排序 public static void insertSort(int[] arr) { // 遍历所有数字 for (int i = 1; i < arr.length; i++) ...
- WEB学习笔记13-高可读性的HTML之精简HTML代码/过时的块状元素和行内元素
<a id="more-intro">点击此处 <img src="down-arrow.png" /></a> (1)删除 ...
- Gnome osc,资源,,,,,因为官网难下
链接:https://share.weiyun.com/5XPLvJz 密码:pygpci
- 总结React写参数的几种方式
1.在render方法内 class Text extends Component{ render(){ const data=[1,2,3]; return( { data.map((item,in ...
- CSS3圆环动态弹出菜单
体验效果:http://hovertree.com/texiao/css3/44/ 代码如下: <!DOCTYPE html> <html lang="zh"&g ...
- Anaconda安装(Windows)
Anaconda集成了python和各种常用工具. 目前有两个版本,分别包含了python2.7和python3.5,并且自动添加环境变量.去官网下载安装包. 1.安装其他模块.conda insta ...