图像处理——边缘检测

边缘检测

边缘检测是为了识别物体的边缘,而边缘是由数字图像中亮度变化明显的点连接而成的,主要可以通过基于图像强度的一阶和二阶导数来寻找到这些点。

边缘检测可以分成三个步骤:

  1. 滤波。由于导数对噪声敏感,所以在边缘检测之前可以先试着降低图片的噪声,常用的是高斯滤波。
  2. 增强。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来,可以通过计算梯度幅值来确定。
  3. 检测。根据梯度幅值就可以检测出物体的边缘,由于经过图像增强,有些店并不是要找的边缘值,我们还可以通过阈值化的方式来筛选。

canny

Canny边缘检测算子是澳洲计算机科学家约翰·坎尼(John F. Canny)于1986年开发出来的一个多级边缘检测算法。更为重要的是Canny创立了“边缘检测计算理论”(computational theory of edge detection)解释这项技术如何工作。

Canny的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

  • 好的检测 - 算法能够尽可能多地标识出图像中的实际边缘。
  • 好的定位 - 标识出的边缘要与实际图像中的实际边缘尽可能接近。
  • 最小响应 - 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。

为了满足这些要求Canny使用了变分法,这是一种寻找满足特定功能函数的方法。最优检测使用四个指数函数项的和表示,但是它非常近似于高斯函数的一阶导数

—— 维基百科

我们可以使用 OpenCV 中的 Canny() 来做边缘检测。

1
2
3
4
5
6
7
void cv::Canny	(	InputArray 	image,
					OutputArray 	edges,
					double 	threshold1,
					double 	threshold2,
					int 	apertureSize = 3,
					bool 	L2gradient = false 
)
  • src: 源图像,8位即可
  • edges: 输出的边缘图,要求与源图像保持一样的尺寸和类型
  • threshold1: 第一个滞后性阈值
  • threshold2: 第二个滞后性阈值
  • apertureSize: 表示应该用 Sobel 算子的空间大小,默认为 3
  • L2gradient: 计算图像梯度幅值的标识,默认为 false

注:threshold1 和 threshold2 中较小

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值