Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Canny Edge Detection

Canny 边缘检测是一种多阶段算法,可减少噪声、检测亮度的剧烈变化,并生成细线状边缘图,用于计算机视觉。

Canny 边缘检测是一种多阶段图像处理算法,可识别亮度的剧烈变化,并将这些变化转换为细线状二值边缘图。它能减少噪声、定位强度变化,并将可靠的边缘像素连接成轮廓。在计算机视觉中,这些轮廓描述了图像结构,可用于形状分析和测量。

John Canny 于 1983 年提出了这种方法,并在 1986 年的论文 A Computational Approach to Edge Detection 中进行了阐述。该方法的设计兼顾三个目标:检测真实边缘、准确定位边缘,以及确保每条边缘只产生一个响应。“Canny edge detector”是该算法的另一个名称。

Canny 边缘检测的工作原理#

该算法将数据预处理与滤波和连通性分析结合起来。五个阶段各司其职:

  • 降噪: 高斯平滑会根据距离为相邻像素加权平均,从而抑制可能产生多余边缘的波动。
  • 梯度估算: 水平和垂直导数衡量亮度变化的快慢。将两者结合可得到边缘强度,以及垂直于边界的方向。OpenCV 在此阶段使用 Sobel 导数。
  • 边缘细化: 非极大值抑制会沿梯度方向保留局部梯度峰值,从而生成窄脊线,而非宽条带。
  • 双阈值处理: 高阈值用于识别强边缘,低阈值用于剔除较弱的响应。介于两个阈值之间的像素会被列为候选像素。
  • 滞后连接: 如果候选像素通过其他候选像素与强边缘相连,就会被保留。孤立的候选像素则会被移除。

阈值、平滑处理与失效模式#

这些阈值作用于梯度强度,而非原始亮度或模型置信度。降低阈值会保留更多细节和噪声;提高阈值则会去除较弱的边界。提高高阈值还会减少可用于滞后连接的强边缘种子点。

高斯尺度控制着另一种权衡。更强的平滑处理可以抑制噪声,但也会去除精细结构。在 scikit-image 的噪声方块示例中,改变高斯标准差会影响方块周围残留的噪声量。

在裂纹检测中,粗糙的混凝土表面会产生不需要的纹理边缘和不完整的裂纹轮廓。提高阈值可以去除一些伪边缘,但也会丢失真实裂纹的一些部分。

Sobel 用于估算强度导数;Canny 则结合了梯度估算、平滑处理、细化和基于连通性的筛选。Canny 的细化阶段会比较相邻像素,而目标检测中的 NMS会比较相互重叠的预测框。

使用 Python 进行 Canny 边缘检测#

使用 pip install opencv-python numpy 安装依赖项。此示例使用 OpenCV 保存公交车样例的边缘图:

from urllib.request import urlopen

import cv2
import numpy as np

with urlopen("https://ultralytics.com/images/bus.jpg") as response:
    encoded = np.frombuffer(response.read(), dtype=np.uint8)
gray = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)

# 计算强度梯度前先平滑图像。
smoothed = cv2.GaussianBlur(gray, (5, 5), 1.4)
edges = cv2.Canny(smoothed, 50, 150, L2gradient=True)
cv2.imwrite("canny_edges.png", edges)

保存的 PNG 显示了保留的边缘,白色边缘呈现在黑色背景上。在 OpenCV 边缘检测工作流中,Canny 的第二个和第三个参数分别指定低阈值和高阈值。L2gradient=True 使用欧几里得梯度幅值;默认设置则使用水平和垂直导数绝对值之和。这些选择会改变梯度值,进而影响阈值行为。

Canny 支持几何特征提取:scikit-image 的线检测示例先对一张摄影师照片应用 Canny,再通过概率霍夫变换提取直线线段。Canny 提供边缘像素;霍夫投票则将这些像素归组为直线。目标检测会分配类别和边界框,而实例分割会将像素分配给单个对象。

Ultralytics YOLO26分割会返回用于对象分离的掩码,这些掩码可用于选取图像区域,分别进行 Canny 处理。这种方法将学习式对象选择与经典边界提取相结合。

在生成式 AI中,ControlNet使用 Canny 图作为扩散模型的空间条件。其 Canny 条件实现会将提取的轮廓与文本提示结合起来,引导 Stable Diffusion 1.5 生成图像。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来