- 浏览: 280954 次
- 性别:
- 来自: 济南
文章分类
最新评论
边缘
边缘(edge)是指图像局部强度变化最显著的部分。主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征和形状特征等图像分析的重要基础。
图像强度的显著变化可分为:
- 阶跃变化函数,即图像强度在不连续处的两边的像素灰度值有着显著的差异;
- 线条(屋顶)变化函数,即图像强度突然从一个值变化到另一个值,保持一较小行程后又回到原来的值。
图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈.边缘上的这种变化可以用微分算子检测出来,通常用一阶或二阶导数来检测边缘。
(a)(b)分别是阶跃函数和屋顶函数的二维图像;(c)(d)是阶跃和屋顶函数的函数图象;(e)(f)对应一阶倒数;(g)(h)是二阶倒数。
一阶导数法:梯度算子
对于左图,左侧的边是正的(由暗到亮),右侧的边是负的(由亮到暗)。对于右图,结论相反。常数部分为零。用来检测边是否存在。
梯度算子 Gradient operators
函数f(x,y)在(x,y)处的梯度为一个向量:
计算这个向量的大小为:
近似为:
梯度的方向角为:
Sobel算子
sobel算子的表示:
梯度幅值:
用卷积模板来实现:
【相关代码】
接口
CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT );
使用
/////////////////////////// Sobe l//////////////////////////////////// /// Generate grad_x and grad_y Mat grad_x, grad_y; Mat abs_grad_x, abs_grad_y; /// Gradient X //Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT ); //Calculates the first, second, third, or mixed image derivatives using an extended Sobel operator. Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT ); convertScaleAbs( grad_x, abs_grad_x ); /// Gradient Y //Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT ); Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT ); convertScaleAbs( grad_y, abs_grad_y ); /// Total Gradient (approximate) addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad );
二阶微分法:拉普拉斯
二阶微分在亮的一边是负的,在暗的一边是正的。常数部分为零。可以用来确定边的准确位置,以及像素在亮的一侧还是暗的一侧。
LapLace 拉普拉斯算子
二维函数f(x,y)的拉普拉斯是一个二阶的微分,定义为:
其中:
可以用多种方式将其表示为数字形式。对于一个3*3的区域,经验上被推荐最多的形式是:
定义数字形式的拉普拉斯要求系数之和必为0
【相关代码】
接口
CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, int borderType=BORDER_DEFAULT );
使用
Mat abs_dst,dst; int scale = 1; int delta = 0; int ddepth = CV_16S; int kernel_size = 3; Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT ); convertScaleAbs( dst, abs_dst ); namedWindow( window_name2, CV_WINDOW_AUTOSIZE );
实践效果
原图
注意,边缘检测对噪声比较敏感,需要先用高斯滤波器对图像进行平滑。参考博文:【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
Sobel 边缘检测
Sobel算子可以直接计算Gx 、Gy可以检测到边的存在,以及从暗到亮,从亮到暗的变化。仅计算| Gx |,产生最强的响应是正交于x轴的边; | Gy |则是正交于y轴的边。
Laplace边缘检测
拉普拉斯对噪声敏感,会产生双边效果。不能检测出边的方向。通常不直接用于边的检测,只起辅助的角色,检测一个像素是在边的亮的一边还是暗的一边利用零跨越,确定边的位置。
转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7829481
实验代码下载:http://download.csdn.net/detail/xiaowei_cqu/4475976
发表评论
-
unity基础开发----物体位移和旋转实用代码
2013-11-21 22:46 1271using UnityEngine; using Syst ... -
android 动态时钟 附源码
2013-09-24 12:03 1285自定义View实践 例子代码 自定义动态时钟 ... -
android Dialog 背景问题
2013-08-14 11:22 1206我们在使用自定义的Dialog的时候,喜欢自己 ... -
ScrollView scrollTo 的使用 动画效果
2013-08-05 17:43 4605今天用到了ScrollView scrollTo方法 ... -
Android中View绘制优化之一---- 优化布局层次
2012-09-04 23:00 1075... -
Android中View绘制优化二一---- 使用<include />标签复用布局文件
2012-09-08 13:54 1057... -
Android中View绘制优化之三---- 优化View
2012-09-13 21:00 1085... -
兰林任务管理应用程序雏形版以及概要说明
2012-09-15 21:54 881... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
2012-10-10 18:14 1169... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
2012-10-17 20:05 862... -
Android中文件选择器的实现
2012-11-30 08:59 1175... -
【编译原理】使用Lex将C/C++文件输出为HTML文件
2012-07-20 09:37 107308年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【编译原理】正则表达式
2012-07-21 21:49 230708年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】访问Mat图像中每个像素的值
2012-07-22 07:10 1172今天百度搜资料还搜到了自己的。。。《访问图像中每个像素的值 ... -
【编译原理】用Yacc做语法分析
2012-07-23 05:47 177508年9月入学,12年7月毕 ... -
【UML】UML几种图的绘制
2012-07-24 09:49 99108年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
2012-07-26 10:52 1461邻域滤波(卷积) 邻域算子值利用给定像素 ... -
【数据结构】排序算法:希尔、归并、快速、堆排序
2012-07-28 06:15 102608年9月入学,12年7月毕 ... -
【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测
2012-07-31 13:25 1547角点 特征检测与匹配 ... -
【UML】案例分析:机场运作系统
2012-08-01 17:22 313608年9月入学,12年7月毕 ...
相关推荐
本篇学习笔记主要探讨了如何使用Python结合OpenCV库,通过拉普拉斯算子和Sobel算子来实现图像的锐化处理。 首先,我们导入必要的库,包括OpenCV(cv2)和NumPy(np)。OpenCV是一个强大的图像处理库,提供了丰富的...
拉普拉斯算子(Laplacian Operator)是边缘检测中常用的一种数学工具,尤其适用于检测图像中的快速亮度变化,即边缘。在本主题中,我们将深入探讨拉普拉斯算子的理论基础,以及如何通过编程实现边缘检测。 拉普拉斯...
接下来是Scharr算子,它是Sobel算子的一种改进,旨在解决拉普拉斯算子在边缘定位上的不精确问题。Scharr算子考虑了边缘的方向性,提供了更好的边缘定位和抗噪声能力。对于水平和垂直边缘,Scharr算子的3x3核分别为:...
图像边缘提取是计算机视觉和图像处理中的一个重要领域,它涉及从图像中检测边缘,以便进一步的分析和处理。边缘指的是图像中颜色或亮度发生剧烈变化的地方,边缘提取算法往往基于检测图像亮度的变化。常用的边缘提取...
7. 高斯-拉普拉斯算子:这是一种组合了高斯平滑和拉普拉斯算子的边缘检测方法。先用高斯滤波器去除噪声,然后应用拉普拉斯算子检测边缘。这种方法在保持边缘清晰的同时,减少了噪声的影响。 在VC++中实现这些算法时...
在给定的项目中,采用了三种经典的边缘检测算子:Canny算子、Sobel算子和Laplacian算子。 1. **Canny算子**:由John F. Canny提出的,是一种自适应的多级边缘检测算法。它通过高斯滤波器减少噪声,然后应用非极大值...
- **Laplacian of Gaussian (LoG)**:高斯拉普拉斯算子是一种更复杂的边缘检测技术,它结合了高斯滤波器和拉普拉斯算子,可以去除噪声并检测边缘。 - **Harris角点检测**:虽然不是纯边缘检测算法,但Harris角点...
2. **改进的拉普拉斯算子**:使用更复杂的算子,如高斯-拉普拉斯算子(LoG),它可以更好地平衡边缘检测和噪声抑制。 3. **阈值处理**:设定一个阈值,只增强超过该阈值的边缘。 四、代码实现 在Python中,可以使用...
Laplacian算子则是使用拉普拉斯算子(图像的二阶导数)直接检测图像的突变,对于边缘定位也具有亚像素精度。 Harris角点检测是一种同时检测边缘和角点的方法,它计算图像局部区域的结构张量,通过响应矩阵的特征值...
OpenCV是一个强大的开源计算机视觉库,提供了多种边缘检测算法,包括Sobel、Canny和Laplace算子。本教程将详细介绍如何使用OpenCV实现这三种边缘检测方法。 首先,让我们了解边缘检测的重要性。边缘检测可以帮助...
- Roberts 算子:这种算子使用2x2的差分模板,通过计算相邻像素的差异来检测边缘。Roberts 算子简单,但对噪声敏感,对于斜向边缘的检测效果不佳。 - Prewitt 算子:Prewitt 算子利用3x3模板,计算水平和垂直方向...
3. 拉普拉斯算子:拉普拉斯算子是一种无方向的边缘检测算子,它是二阶偏微分方程的离散版本。在C#中,可以通过一个5x5或3x3的差分掩模实现,其核心是检测像素邻域内的亮度变化。拉普拉斯算子对噪声比较敏感,因此在...
- **拉普拉斯算子**:拉普拉斯算子是一种二阶微分算子,用于检测图像的边缘。它对图像中的边缘有较大的响应,因为边缘处像素的梯度较大。 - ** Sobel算子**:Sobel算子是一种一阶差分算子,可以计算图像在水平和...
本文主要讨论了两种常用的边缘检测方法:Sobel算子和拉普拉斯算子,以及它们在OpenCV库中的实现。 首先,Sobel算子是一种一阶差分算子,用于近似计算图像灰度函数的梯度。Sobel算子通过对图像进行水平和垂直方向的...
- **Laplacian of Gaussian (LoG)**:LoG算子是高斯滤波器与拉普拉斯算子的组合,可以有效去除噪声并检测出细小的边缘。 - **Hough变换**:虽然不是直接的边缘检测,但Hough变换可以检测出直线,这对于识别图像中...
在OpenCV中,常使用离散拉普拉斯算子进行边缘检测,结合适当的阈值可以找出边缘。 4. **Hough变换**:Hough变换是一种参数空间的边缘检测方法,它可以从原始图像空间转换到参数空间,寻找直线的参数形式。这种方法...
LOG算子在处理噪声和细节方面比单纯使用拉普拉斯算子更为稳健,但可能无法检测到某些弱边缘。 在VS或DEV-C++等集成开发环境中配置OpenCV库进行边缘检测,首先需要安装OpenCV库并将其添加到项目的包含目录中。接着,...
Gauss-Laplace算子是高斯滤波器与拉普拉斯算子的结合,它首先使用高斯滤波器平滑图像以减少噪声,然后应用拉普拉斯算子检测边缘。拉普拉斯算子是一个二阶微分算子,通常用离散形式表示,如[0, -1, 0; -1, 4, -1; 0,...
OpenCV提供了多种边缘检测算法,如Canny边缘检测、Sobel算子、Laplacian算子、Prewitt算子等。其中,Canny算法是一种广泛使用的多级边缘检测算法,它结合了高斯滤波、梯度计算和双阈值检测,能够在减少假边缘的同时...