首页 > 后端开发 > Python教程 > Canny 边缘检测

Canny 边缘检测

Mary-Kate Olsen
发布: 2024-11-24 19:01:20
原创
236 人浏览过

边缘检测是计算机视觉中的一种图像处理技术,涉及识别图像中对象的轮廓。

Canny Edge Detection

Canny 边缘检测是边缘检测的最佳技术之一。它旨在检测清晰、清晰的边缘,同时减少噪音并避免错误边缘。它使用双阈值方法来检测图像中的边缘:高阈值和低阈值。

img = cv2.Canny('photo.jpg')
img_edges = cv2.Canny(img, 100, 200)
// 100 is the low threshold
// 200 is the high threshold
登录后复制

阈值决定什么成为边缘,什么不成为边缘。为了做出这个决定,我们使用梯度值:

  • 如果梯度值高于高阈值,则将其视为强边缘并添加到边缘图中。 (强边缘)
  • 如果低于低阈值,则会被忽略。 (非边缘)
  • 如果它在高阈值和低阈值之间,则仅当它连接到强边缘时才保留。 (潜在优势)

什么是梯度值?

梯度值不是原始图像值。它们是通过检查图像中像素强度变化的程度从原始图像中计算得出的数字。我们使用梯度值是因为原始图像值不能直接告诉我们边缘在哪里。

一个简单的例子来说明像素强度的变化:如果两个相邻像素具有非常不同的值(例如 50 和 200,梯度值为 150),则存在很大的变化 - 它可能是边缘。但如果两个相邻像素具有相似的值(例如 50 和 52,梯度值为 2),则变化很小,成为边缘的可能性也很小。

计算出梯度值后,将它们与阈值进行比较,以确定什么是强边缘、潜在边缘或非边缘。

我们如何知道阈值之间的值与强边缘相关?

通过使用一种称为迟滞边缘跟踪的方法,该方法决定连接的边缘并应保持VS丢弃。该算法的工作原理是查看每个潜在边缘像素的 8 个邻居(直接相邻的像素 - 顶部、底部、左侧、右侧和对角线)。任何直接或间接连接到强边缘的像素都包含在最终结果中。

边缘跟踪的工作原理:

   50   80  110   90
   70  250  190  120
   60  180  150   70
   40   60   80   50
登录后复制

想象一下上面的渐变图:

应用阈值(低 = 100,高 = 200)后,强边缘像素(> 200)立即保留为边缘。这里,只有像素 250 被标记为强边缘。

潜在边缘像素 (100–200) 为 110、190、120、180 和 150。现在我们有了潜在边缘池,我们执行边缘跟踪来决定哪些要保留,哪些要丢弃。该算法检查是否有任何潜在边直接或间接连接到强边 (250)。

例如:

  • 190 是 250 的邻居,它直接连接到强边,因此保留。
  • 150 是 190 的邻居,它间接连接到强边,因此也被保留。

弱边缘像素(

以上是Canny 边缘检测的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板