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

Sobel Operator

Sobel 算子是一种 3×3 图像滤波器,可测量亮度梯度,用于边缘检测、特征提取和图像分割。

Sobel 算子是一种固定图像滤波器,用于估计图像中亮度变化的快慢及其方向。它会生成图像梯度:较大的响应标记出明显的过渡,而较小的响应表示相对均匀的区域。Sobel 算子也称为 Sobel 滤波器或 Sobel–Feldman 算子,是边缘检测和特征提取中的基础工具,广泛用于计算机视觉。

Irwin Sobel 和 Gary Feldman 于 1968 年在斯坦福人工智能项目中介绍了这一算子,介绍内容的演讲题为 用于图像处理的 3x3 各向同性梯度算子,详见 Sobel 的历史回顾与推导。

Sobel 核的工作原理#

Sobel 滤波会将两个小型权重网格(称为核)应用于相邻像素。这种局部滤波通常称为卷积;OpenCV 不会翻转权重,而是通过相关运算应用权重。标准的 3 x 3 核包含以下各行:

行X 方向核Y 方向核
顶部-1, 0, 1-1, -2, -1
中间-2, 0, 20, 0, 0
底部-1, 0, 11, 2, 1

x 方向响应 Gx 用于测量从左到右的强度变化,并突出垂直边缘。Gy 用于测量从上到下的变化,并突出水平边缘。每个核都将沿一个轴的差分滤波器(权重为 -1、0、1)与沿另一个轴的加权平滑(权重为 1、2、1)结合起来。其感受野覆盖九个像素。

结合 Gx 和 Gy 可得到梯度幅值(Gx 平方与 Gy 平方之和的平方根)和方向,方向通过 atan2(Gy, Gx) 计算。梯度垂直于边缘的局部边界,指向边缘另一侧。这些方向性输出是特征图:用于描述各个位置响应的空间网格。

在 Python 中应用 Sobel#

OpenCV 使用 cv2.Sobel 计算有符号导数,具体用法可参阅其边缘检测实现指南。浮点输出会保留负响应;当亮度沿所选方向降低时,就会出现负响应。无符号 8 位输出会将负值截为零,从而丢失这些边缘过渡。

使用 pip install opencv-python numpy 安装依赖项。此示例会下载图像、计算两个方向的导数,并保存它们合并后的幅值:

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)
image = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)

# 合并强度之前,先保留有符号导数。
gx = cv2.Sobel(image, cv2.CV_32F, 1, 0, ksize=3)
gy = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
magnitude = cv2.magnitude(gx, gy)
edge_image = cv2.normalize(magnitude, None, 0, 255, cv2.NORM_MINMAX)
cv2.imwrite("sobel_edges.png", edge_image.astype(np.uint8))

保存的图像会以亮色轮廓显示明显的亮度过渡。归一化会重新缩放数值以便显示;单独的阈值处理步骤则会将梯度强度转换为二值边缘图。

Sobel 梯度的应用场景#

在图像分割中,Sobel 幅值可为分水岭算法提供边界信息;该算法从起始标记处扩展区域。在 scikit-image 的硬币分割示例中,较强的梯度会在硬币与背景之间形成屏障。分水岭算法利用这些屏障在连通组件标记各个硬币之前,将前景与背景分开。

Sobel 梯度还可用于引导目标检测,例如 YOLO26-RD;这是一个基于 Ultralytics YOLO26 的定制模型。其 EdgeSPD 模块使用固定的 Sobel 边缘信号来控制下采样,在空间分辨率降低时突出边界信息。

Sobel 与其他边缘滤波器的比较#

Prewitt 使用均匀的平滑权重;Sobel 则提高中央行或列的权重。Scharr 提高了 3 x 3 导数估计的方向精度。拉普拉斯算子测量强度的二阶变化。Canny 将梯度估计与边缘细化和双阈值边缘连接结合起来,生成的轮廓图比原始 Sobel 幅值更具选择性。

在医学图像分析中,噪声引起的梯度可能会使分水岭区域碎片化:使用 Sobel 梯度进行 MR 图像分割展示了过度分割现象,并通过去噪来减轻这一问题。在图像边界处,由于缺少相邻像素,需要定义扩展规则:SciPy 的 Sobel 实现默认将像素跨越最边缘像素的边界进行镜像。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 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 的未来!

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