###Canny边缘检测算子
开源中国。
#@date: 2014-06-20
#@author: gerui
#@email: forgerui@gmail.com
一、一阶微分边缘算子
1. 一阶微分边缘检测算子也称梯度边缘算子。
2. 梯度的模值大小提供了边缘的强度信息,梯度的方向提供了边缘趋势信息,因为梯度方向始终是垂直于边缘的方向。
3. 用有限差分进行梯度近似。
二、二阶微分边缘算子
1. 二阶微分边缘检测算子,它是利用图像在边缘处的阶跃性导致图像二阶微分在边缘处出现零值这一特性进行检测。
2. 二阶微分算子对噪声十分敏感。采用LOG可以减少噪声对边缘的影响。
3. 使用高斯函数对图像进行滤波并对图像滤波结果进行二阶微分运算的过程,可以转换为先对高斯函数进行二阶微分,再利用高斯函数的二阶微分结果对图像进行卷积运算。
三、Canny边缘检测算子
1. 三条标准:高检测率;精确的定位;明确的响应。
2. Canny算子主要四步骤:
1) 用高斯函数对图像进行平滑滤波。将高斯函数作成滤波模板,使用5 X 5的模板。
2) 计算梯度值与方向角。分别求取x方向和y方向的梯度Mx和My。求梯度可以通过使用Sobel模板与图像进行卷积。归并到0, 45, 90, 135四个方向。
3) 非最大值抑制。经过Sobel滤波后,图像中的边缘粗细不一。边缘的粗细主要取决于跨越边缘密度分布。非最大值抑制是将梯度方向上最大梯度值保留,将其他像元删除。分为0,45,90,135度四个方向分别处理,如0度方向检查(x+1, y)、(x, y)、(x-1, y)
;45度方向检查(x+1, y+1)、(x, y)、(x-1, y-1)
...比较这三个像元大小,将较小的两个删除。
4) 滞后阈值化。由于噪声干扰,本应该连续的边缘出现断裂。滞后阈值化设定两个阈值thigh,一个低阈值tlow,通过如下方法计算:
a) 如果像元(x, y)的梯度值大于thigh,则标记为边缘像元;
b) 如果像元(x, y)的梯度值小于tlow,则标记为非边缘像元;
c) 如果像元(x, y)值介于两个阈值之间,则判断及3、5邻域内是否存在梯度大于thigh,如果有则标记为边缘,没有则标记为非边缘像元。
###Canny边缘检测算子的更多相关文章
- Canny边缘检测
1.Canny边缘检测基本原理 (1)图象边缘检测必须满足两个条件:一能有效地抑制噪声:二必须尽量精确确定边缘的位置. (2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子.这 ...
- [转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测
Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大 ...
- Canny边缘检测算法的实现
图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...
- 图像边缘检测——几种图像边缘检测算子的学习及python 实现
本文学习利用python学习边缘检测的滤波器,首先读入的图片代码如下: import cv2 from pylab import * saber = cv2.imread("construc ...
- Python+OpenCV图像处理(十三)—— Canny边缘检测
简介: 1.Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法. 2.Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: 好的检测- ...
- openc —— Canny 边缘检测
边缘检测的一般步骤 [第一步]滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能.常见的滤波方法主要有高斯滤波,即采用 ...
- 各种边缘检测算子特点比较(canny)
canny 最好.但是容易把噪点误判为边界.sobel prewitt log 效果差不多.prewitt比sobel 去噪效果好.roberts马马虎虎.适合什么图片那得看图片的噪点情况,一般can ...
- Sobel算子取代:基于特定点方向的canny边缘检测
前言: Canny边缘检测使用了Sobel算子,计算dx和dy两个方向,对于特定方向的边缘检测,可以作少量修改. 代码: 计算特定方向上的边缘 void CannyOrient( cv::Mat &a ...
- OpenCV图像Canny边缘检测
Canny边缘检测 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘函数原型: void cvCanny( ...
随机推荐
- python 面向对象高级编程
数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念.
- KEEPALIVED 检测RS原理
keepalived管理的的ipvs功能支持对后端节点真实服务器的健康检查 一般常用的方式包括tcp_check 和http_get(更准确) tcp_check 原理就是对真实服务器进行ip+端口的 ...
- iOS开发Block的使用
Block 是从 iOS4引入的,在日常开发中,会经常用到Block.特别是在多线程中,Block的用处更广泛.而且,Block不仅可以接收参数,其本身也可以作为参数,因此,Block的功能非常强大. ...
- 已知有一个Worker 类如下: public class Worker { private int age; private String name; private double salary; public Worker (){} public Worker (String nam
package homework006; public class Worker { private int age; private String name; private double sala ...
- Java获取时间与系统时间相差8小时终极解决方案
一.在取日期以前设置一下时区 TimeZone tz = TimeZone.getTimeZone(“ETC/GMT-8″);TimeZone.setDefault(tz); 此种方法适用于单次快速获 ...
- RefernceError : jQuery is not define
使用ligerUI 的时候,代码没有什么错误,可是不能正常显示组件 ,火狐debug显演示样例如以下错误: 最后发现是引入文件的顺序错了,最好依照ligerui demo中的顺序引入js文件,这样就不 ...
- C# 创建、安装和卸载Windows服务程序
1.新建一个windows服务程序. 2.点击这个服务类,从工具箱中加入一个Timer控件,右键这个Timer控件 命名为 timerOrderDeductionDetailJob,Enable设为T ...
- Windows ICS 服务无法启动问题解决
防火墙打不开肯定是"windows Firewall"服务没有启动.ICS服务启动不了能够通过下面方法解决: 1.找到本地连接,单击左键--属性--共享--勾选(√)--确定,如以 ...
- CocoStudio 创建简单UI资源并加入�到project
打开CocoStudio UI编辑器新项目,设置画布480*320, 加入�一个标签和一个button控件 导出项目,生成所须要的资源文件, 拷贝到cocos2dprojectResources文件夹 ...
- kernel debuging
http://blog.csdn.net/XscKernel/article/category/1276234