Canny算法

article/2025/9/23 18:59:39

Canny

Canny分为5个步骤

1)、使用高斯滤波器,以平滑图像,滤除噪声。

高斯滤波器是一种平滑空间滤波器,用于模糊处理和降低噪声。我们的高斯滤波器通过以下公式得到。
在这里插入图片描述
我们运用该公式计算出高斯卷积核,如k越大,检测器对噪声的敏感度越低(即可以更好地筛去噪声),但是检测边缘的定位误差也会相应增加,一般我们设置5*5的高斯卷积核是一个比较好的衡量

2)、计算图像中每个像素点的梯度强度和方向。

我们将一个像素点的方向分为在x方向以及在y方向的分量,通过使用sobel算子与原图像做相关操作,计算该像素点在该水平方向Gx和垂直方向的梯度Gy,由此得到像素点的梯度G。由此我们可以得到该像素点的方向theta
在这里插入图片描述
对于计算一阶微分f:

在这里插入图片描述
我们通过以上公式近似,可以得到相应的sobel算子为:
在这里插入图片描述
G_x即为sobel在x方向的算子与原图像进行相关操作的结果
G_y即为sobel在y方向的算子与原图像进行相关操作的结果

3)、应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

我们对图像进行梯度计算后,仅仅基于梯度提取的边缘依旧非常模糊,因为存在多个对边缘的梯度响应。我们希望在一个梯度方向上有且仅有一个局部最大值的梯度响应,而将其余的梯度抑制为0。我们的一个初步算法为:
1)将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。
2)如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,否则该像素点将被抑制。
图示所示:
在这里插入图片描述
若中心点梯度方向为上下左右或者斜对角线方向(即指向E,NE,N,NW方向)时,我们的做法比较简单,直接将C点的梯度值和对应点的梯度值相比较。但是如果中心梯度方向为上图所示(即P1和p2方向),那么由于该点不存在(也称亚像素),我们无法直接通过sobel算子直接来得到该点梯度值。
我们可以通过对应点两边的可以明确确定梯度点来预估该对应点的梯度,具体公式为(针对上图)
通过一维线性插值,我们以tan⁡(θ)为自变量,以相邻两边的点的梯度为因变量,由于角度已经分隔为0,45,90等以45°为间隔的区间,所以不存在tan90°的情况出现。(很多博客都没有注意到这一点,或者说都没有着重介绍这一点。我们可以把两个极端情况带入进去,即 tan0 和 tan45 ,那么基本可以验证这个线性插值的准确性)
可以得到以下表达式,通过近似,我们可以得到:
G_p1=(1-tan⁡(θ) )*E+tan⁡(θ)*NE
G_p2=(1-tan⁡(θ) )*W+tan⁡(θ)*SW
其中G表示该点的梯度绝对值
所以我们最终的目标就是计算p点的梯度和p1以及p2的大小关系。

4)、应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

经过前三个步骤,仍然存在由于噪声和颜色变化引起的一些边缘像素。为了解决这些杂散响应,我们采取措施为:
如果边缘像素的梯度值高于高阈值,则将其标记为强边缘像素;如果边缘像素的梯度值小于高阈值并且大于低阈值,则将其标记为弱边缘像素;如果边缘像素的梯度值小于低阈值,则会被抑制。阈值的选择取决于给定输入图像的内容。

5)、通过抑制孤立的弱边缘最终完成边缘检测

对于强边缘像素,我们可以确定它们就是原图像的边缘,但是对于弱边缘像素,将会有一些争论,因为这些像素可以从真实边缘提取也可以是因噪声或颜色变化引起的。为了获得准确的结果,应该抑制由后者引起的弱边缘。通常,由真实边缘引起的弱边缘像素将连接到强边缘像素,而噪声响应未连接。为了跟踪边缘连接,通过查看弱边缘像素及其8个邻域像素,只要其中一个为强边缘像素,则该弱边缘点就可以保留为真实的边缘。


感谢 http://www.cnblogs.com/techyan1990/p/7291771.html
感谢 https://blog.csdn.net/kezunhai/article/details/11620357
感谢 《数字图像处理》(第三版),冈萨雷斯


http://chatgpt.dhexx.cn/article/pgQloRCB.shtml

相关文章

OpenCv之Canny

目录 一、自适应阈值 二、边缘检测Canny 一、自适应阈值 引入前提:在前面的部分我们使用是全局闻值,整幅图像采用同一个数作为闻值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应闻…

图像处理——Canny算子

首先感谢以下两位的渊博知识: (1)爱鱼 https://www.cnblogs.com/mightycode/p/6394810.html (2)mitutao https://www.cnblogs.com/love6tao/p/5152020.html 图像边缘信息主要集中在高频段,通常…

Canny算子与霍夫变换检测圆与直线

目录 引言 一、canny算子 二、canny算子代码 三、霍夫变换检测直线 四、霍夫变换检测直线代码 五、霍夫变换检测直线效果 六、霍夫变换检测圆 七、霍夫变换检测圆代码 八、霍夫变换检测圆效果 引言 canny算子是计算机视觉最常用的一种算子,是目前一种非常流行…

OpenCV——Canny边缘检测(cv2.Canny())

Canny边缘检测 Canny 边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986 年,John F. Canny 发 表了著名的论文 A Computational Approach to Edge Detection,在该论文中详述了如何进行边缘 检测。 Canny()边缘检测步骤 Canny 边缘检测分为如下…

(十一)Canny 边缘检测算法

Canny边缘检测算法 一、边缘检测的步骤 1)滤波: 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感, 因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波、均值滤波…

Canny边缘检测算法的实现

图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加强高频分量的作用。在空域运算中来说,对图像的锐化就是计算微分。由于数字图像的离散信号,微分运…

【canny边缘检测】canny边缘检测原理及代码详解

文章目录 前言canny边缘检测算法主要流程一、高斯模糊二、图像梯度计算三、非极大值抑制四、双阈值边界跟踪 前言 本文通过介绍canny边缘检测原理与代码解析,希望能让大家深入理解canny边缘检测 canny边缘检测算法主要流程 canny边缘检测主要分为4个部分&#xff…

Canny边缘检测原理

一. Canny基本思想 1. 边缘检测 解析:边缘是对象和背景之间的边界,还能表示重叠对象之间的边界。边缘检测是图像分割的一部分,图像分割的目的是识别出图像中的区域。边缘检测是定位边缘像素的过程,而边缘增强是增加边缘和背景之…

Canny边缘检测

边缘检测发展 Canny 边缘检测是一种从不同视觉对象中提取有用结构信息并显着减少要处理的数据量的技术。它已广泛应用于各种计算机视觉系统。 Canny 发现,在不同的视觉系统上应用边缘检测的要求是比较相似的。因此,可以在各种情况下实施满足这些要求的边…

Canny边缘检测算法(python 实现)

文章目录 最优边缘准则算法实现步骤1. 应用高斯滤波来平滑(模糊)图像,目的是去除噪声2. 计算梯度强度和方向3. 应用非最大抑制技术NMS来消除边误检4. 应用双阈值的方法来决定可能的(潜在的)边界5. 利用滞后技术来跟踪边界 opencv实现Canny边缘…

左外连接和右外连接是什么样的?

1左外连接 左表的记录都会出现在结果集中,并上右表与之对应的部分,如果右表没有,使用null填充。 举例。 select * from people p left join role r p.idr.id 左外连接结果: 2、右外连接 右表的记录都会出现在结果集中&#xf…

sql左外连接和右外连接的区别

一、数据集合不同 1、左外连接:是A和B的交集再并上A的所有数据。 2、右外连接:是A和B的交集再并上B的所有数据。 二、语法不同 1、左外连接:SELECT *FROM aLEFT OUTER JOIN bON a.ageId b.id。 2、右外连接:SELECT *FROM a…

MySQL自连接和内连接和外连接_左外连接+右外连接

自连接:将一张表看作两张表 练习:查询员工id,员工姓名及其管理者的id和姓名select emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name from employees emp,employees mgr where emp.manager_id mgr.employee_id;内连接 只是把左…

SQL--左外连接(LEFT JOIN)

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。 SQL LEFT JOIN 语法: SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.c…

内连接、左连接、左外连接、右连接的区别

一:测试例子 存在如下两张表:年级与班级,表内容如下 班级表 二:内连接与自然连接 1:自然连接 对于select * from gradeclass gc where gc.grade_id in (select id from grade),其结果如下图 其查询是把符…

数据库之SQL(基本连接,内连接,左外连接,右外连接,全外连接,交叉连接,自连接)

之前的博客内容我们分享了数据表的查询与管理,但那只是针对数据库中的一个表格进行的查询管理,现在如果我们想要同时看到两个数据表中的数据的话,那要怎么办呢?采用多连接查询的方式。 SQL中有哪几种多连接的方式? 有七…

左连接、右连接、内连接、外连接简单说明

例如有两个表: test1: test2: 内连接:(inner join on)返回两个表的交集。 例如: select * from test1 a inner join test2 b on a.idb.id; 结果: 外连接:返回两个表的并集。(在此就不做截图…

MySQL之左外连接右外连接

外连接: 假设A和B表进行连接,使用外连接的话, AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表, 当副表中的数据没有和主表中的数据匹配上,副表自动模…

秒懂sql中的左外连接

左外连接: 1.语法: SELECT 查询字段 FROM 查询表格(左表) LEFT JOIN 右表 ON 查询条件 2.左外连接查询的就是左表,那干嘛加个右表,岂不是没有作用: 区别在于左外连接是查询完左表后&…

sql的四种连接——左外连接、右外连接、内连接、全连接

一、内连接 满足条件的记录才会出现在结果集中。 二、 左外连接(left outer join,outer可省略) 左表全部出现在结果集中,若右表无对应记录,则相应字段为NULL 举例说明: 客户表: 订单表&#x…