iOS 基于Open CV的边缘检测

本文详细介绍了在iOS中使用OpenCV进行边缘检测的技术,包括Canny、Sobel和Laplacian算子的原理和实现步骤。通过高斯滤波减少噪声,然后计算梯度和方向,应用非极大值抑制和滞后阈值检测边缘。Canny算子是最优边缘检测方法,Sobel算子基于图像的x和y方向求导,Laplacian算子利用Sobel算子计算图像梯度。
摘要由CSDN通过智能技术生成

图像的边缘检测

边缘检测是图像处理和计算机视觉中的基本问题,其目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化

边缘检测的一般步骤

滤波

边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要是高斯滤波,即采用离散化的高斯函数产生一组归一化的高斯核,然后基于高斯核哈数对图像灰度矩阵的每一点进行加权求和。

增强

增强边缘的基础是确定图像各点邻域强度变化的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。在开发中,可以通过计算梯度幅值来确定。

检测

经过增强的图像,往往邻域中有很多点的梯度值比较大,而在特定的应用中,这些点并不是要找的边缘点,所以应该采用某种方法对这些点进行取舍。在实际的工程中,常用的方法是阈值化检测。

Canny算子

Canny算子的简介

Canny边缘检测算子是一个多级边缘检测算法,在当今被推崇为最优的边缘检测方法。具有低错误率、高定位性、最小响应。

Canny边缘检测的步骤
消除噪声

一般情况下,使用高斯平滑滤波器卷积降噪

计算梯度幅值和方向
非极大值抑制

排除非边缘像素,仅仅保留了一些细线条(候选边缘)。

滞后阈值

滞后阈值需要两个阈值(高阈值和低阈值)。
若某一像素位置的幅值超过了高阈值,该像素被保留为边缘像素
若某一像素位置的幅值低于低阈值,该像素则被排除。
若某一像素位置的幅值在两个阈值之间,该像素仅仅在连接一个高于高阈值的像素时保留。

Canny()函数
/*
@param image 8-bit input image.
@param edges output edge map; single channels 8-bit image, which has the same size as image .
@param threshold1 first threshold for the hysteresis procedure.
@param threshold2 second threshold for the hysteresis procedure.
@param apertureSize aperture size for the Sobel operator.
@param L2gradient a flag, indicating whether a more accurate \f$L_2\f$ norm
\f$=\sqrt{(dI/dx)^2 + (dI/dy)^2}\f$ should be used to calculate the image gradient magnitude (
L2gradient=true ), or whether the default \f$L_1\f$ norm \f$=|dI/dx|+|dI/dy|\f$ is enough (
L2gradient=false ).
 */
// 这个函数的阈值1和阈值2 两者中较小的值用于边缘连接,而较大的值用来控制边缘的初始段。 推荐高低阈值比在2131之间
CV_EXPORTS_W void Canny( InputArray image, OutputArray edges,
                         double threshold1, double threshold2,
                         int apertureSize = 3, bool L2gradient = false );
示例程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值