使用 MATLAB 内置函数进行边缘检测

2025年3月17日 | 阅读 10 分钟

边缘检测是一种图像处理方法,用于定位图像中的边界和边缘。这些边缘可以表示物体或感兴趣区域的轮廓,它们通常对应于图像强度、颜色或纹理的显著变化。边缘检测的主要目的是突出这些突然的变化,从而更容易提取和评估图像的关键元素。

边缘检测经常用于各种应用,包括图像分析、物体识别、计算机视觉和图像分割。它作为对象检测、图像压缩和模式识别等任务的预处理步骤。

关于边缘

在 MATLAB 中,您可以从各种边缘检测算法中选择边缘特征。其中一些算法,如 Sobel、Prewitt 和 Roberts,基于强度的第一导数来查找强度的突然变化,而另一些算法,如 Canny,则使用具有零交叉的二阶导数准则来更复杂地检测边缘。在许多图像处理和计算机视觉应用中,识别和突出图像中的边缘或边界是一个关键步骤。这些算法有助于此。

一阶导数标准

一阶导数表示每个像素位置的强度变化率。潜在的边缘是图像中一阶导数幅度超过预定阈值的区域。使用 MATLAB 的 `edge` 函数,您可以将此准则应用于多种边缘检测技术,包括 Sobel、Prewitt 和 Roberts 算子。

Sobel 算子: Sobel 算子使用与两个 3x3 内核的卷积来计算图像的梯度,一个用于检测水平方向(Sobel-X)的变化,另一个用于检测垂直方向(Sobel-Y)的变化。梯度的幅度计算强度变化率。

Prewitt 算子: 与 Sobel 算子类似,Prewitt 算子使用与 3x3 内核的卷积来计算水平和垂直方向的梯度。

Roberts 算子: Roberts 算子是一个不太复杂的算子,它使用两个 2x2 内核来估计梯度。

调用 `edge` 函数时,您可以指定要使用的算子,它将根据该算子计算强度的第一导数。

具有零交叉的二阶导数准则

二阶强度导数测量梯度的变化率或强度从像素到像素的变化率。在边缘检测中,我们寻找二阶导数跨越零线的区域。当梯度的符号(从正到负或反之)发生变化时,当存在零交叉时,它表示存在边缘。

Canny 边缘检测器: Canny 边缘检测器是 MATLAB 中 `edge` 函数的方法之一,它使用具有零交叉的二阶导数准则。计算梯度的幅度和方向,并使用高斯平滑来减少噪声。

  • 然后,它使用滞后阈值将相邻的边缘像素连接成连续的边缘轮廓,并应用非最大值抑制来细化边缘。
  • MATLAB 包含多种内置的边缘检测函数,它们使用各种算法和方法来查找图像边缘。

Sobel 边缘检测器

Sobel 边缘检测器使用与 3x3 内核的卷积来计算图像在水平和垂直方向上的梯度。

它突出显示强度有明显变化的区域,以强调边缘。

示例

输出

Edge Detection Using in-Built Function in MATLAB

Prewitt 边缘检测器

与 Sobel 算子类似,Prewitt 边缘检测器使用与 3x3 内核的卷积来计算水平和垂直方向的梯度。

该技术同样突出了图像的边缘。

示例

输出

Edge Detection Using in-Built Function in MATLAB

Roberts 边缘检测器

Roberts 边缘检测器是一个不太复杂的算子,它使用一对 2x2 内核来近似梯度。

一种简单的边缘检测技术,可突出显示强度的突然变化。

示例

输出

Edge Detection Using in-Built Function in MATLAB

LoG(高斯拉普拉斯算子)边缘检测器

高斯拉普拉斯算子 (LoG) 边缘检测器在计算拉普拉斯算子之前,先用高斯算法对图像进行平滑处理。

通过观察拉普拉斯图像中的零交叉来查找边缘。

示例

输出

Edge Detection Using in-Built Function in MATLAB

零交叉边缘检测器

零交叉边缘检测器通常使用二阶强度导数来识别梯度符号改变的位置。

通过观察梯度幅度图像中的零交叉来定位边缘。

输出

Edge Detection Using in-Built Function in MATLAB

Canny 边缘指示器

Canny 边缘检测器是一种多阶段边缘检测算法。它使用高斯平滑、梯度计算、非最大值抑制和滞后阈值

来精确地检测边缘并最大限度地减少噪声。

  • 每种边缘检测方法都有其优点,可能更适合特定的应用或类型的图像。
  • MATLAB 提供了这些函数,使用户能够根据其特定的图像处理需求选择最合适的方法。
  • 您希望检测的边缘类型、所需的灵敏度与准确性之间的权衡以及图像噪声都会影响您选择哪种边缘检测器。

示例

Edge Detection Using in-Built Function in MATLAB

示例

输出

图像被加载到应用程序中,然后使用 Canny 边缘检测技术在图形窗口中将边缘检测结果与原始图像一起显示出来。

通过修改 `set(gcf, 'Position', [100, 100, 800, 400])` 行,您可以根据需要更改图形窗口的大小。

Edge Detection Using in-Built Function in MATLAB

实现

MATLAB 中各种边缘检测技术在灰度图像上的应用。

说明

  • 使用 `imshow` 函数,`subplot(2, 4, 1)` 显示原始灰度图像。使用 `title` 函数添加标题“Original Image”。
  • Sobel 边缘识别: `subplot(2, 4, 2)` 显示 Sobel 边缘识别的结果。Sobel 滤波器使用 `edge` 函数,`imshow` 显示生成的二值图像。标题添加了“Sobel”。
  • Prewitt 边缘检测: Prewitt 边缘检测使用 Prewitt 滤波器,与 Sobel 方法类似,它将结果显示在 `subplot(2, 4, 3)` 中。
  • Roberts 边缘检测: Roberts 边缘检测的结果,这是另一种基于特定滤波器的边缘检测方法,显示在 `subplot(2, 4, 4)` 中。
  • LoG 边缘检测(子图 5)
  • 零交叉边缘检测(子图 6)
  • Canny 边缘检测(子图 7)

使用 `edge` 函数创建每种方法的适当边缘检测图像,并使用 `imshow` 显示。每个子图都添加了标题以指定所选方法。

输出

Edge Detection Using in-Built Function in MATLAB

优点

对于各种应用,MATLAB 中的边缘检测技术和图像处理(总的来说)提供了显著的优势。

MATLAB 作为图像处理任务的强大工具,因为它提供了多种边缘检测算法。

  • 研究人员和工程师可以使用这些技术从图像中提取有用的信息,这些技术适应性强且广泛应用于各个行业。

特征提取: 边缘检测有助于识别和提取图像中的重要信息,例如对象边界、形状和轮廓。对于对象检测和跟踪等任务,这些特征至关重要。

图像分割: 边缘检测通过帮助将图像分割成有用的部分或对象来辅助图像分割。这对于医学图像分析等活动至关重要,在这些活动中,识别不同的组织或结构很重要。

对象检测: 找到边缘可以作为查找对象的良好起点。找到边缘后,可以进行进一步分析以查找和识别图像中的项目。

边界检测: 边缘检测常用于计算机视觉和图像分析中,以查找对象或感兴趣区域的边界。后续处理阶段利用这些数据。

降噪: 边缘检测可以帮助减少图像中的噪声感。通过关注强度的突然变化,它可以帮助区分真实边缘和噪声。

图像增强: 通过突出关键细节,可以使用边缘增强技术来提高图像的视觉吸引力,使其更容易被人解释。

医学影像: 对于肿瘤诊断、器官分割和血管跟踪等任务,边缘检测经常用于医学图像分析。

机器人和自动驾驶汽车: 在机器人和无人驾驶汽车中,边缘检测对于检测障碍物和实现安全导航至关重要。

质量控制: 在制造和质量控制应用中,边缘检测可用于评估产品缺陷或精确测量尺寸。

计算机视觉: 在人脸识别、手势识别和增强现实等应用中,边缘检测至关重要,因为在这些应用中确定对象边界和形状非常重要。

人工智能: 为了从图像中提取有用的特征用于分类或回归问题,边缘检测可以作为机器学习和深度学习管道中的预处理步骤。

增强可视化: 边缘检测图像可以提供复杂场景的精简且更易于理解的表示,使人们更容易解释和分析视觉信息。

缺点

虽然 MATLAB 和其他图像处理程序中的边缘检测方法有很多优点,但也存在一些缺点和挑战。

对噪声的敏感性: 边缘检测技术容易受到输入图像噪声的影响。有噪声的图像可能导致边缘丢失(未识别出真实边缘)或误报(检测到不存在的边缘)。

参数调整: 许多边缘检测技术需要调整参数,例如阈值级别、内核大小或滤波器类型。选择合适的参数值可能涉及迭代和耗时的过程。

边缘碎片化: 在图像的纹理化或复杂区域中,边缘检测算法可能会产生碎片化或断开的边缘,从而难以精确地描绘真实的物体边界。

丢失弱边缘: 在某些情况下,某些边缘检测技术可能无法检测到可能很重要的弱边缘。

误报和漏报: 根据技术和参数选择,边缘检测可能导致误报(在不存在的地方检测到边缘)和漏报(遗漏真实边缘)。

图像质量依赖性: 边缘检测算法的性能会受到输入图像质量的严重影响,包括分辨率和光照条件等因素。

计算成本: 一些边缘检测技术可能计算成本很高,并且可能不适合实时应用,特别是那些涉及使用大型滤波器进行卷积或复杂数学计算的应用。

特异性与灵敏度之间的权衡: 增加灵敏度(检测更多边缘的能力)通常会导致特异性(产生更多误报的能力)降低,反之亦然。找到理想的平衡可能很困难。

边缘宽度变化: 由于边缘检测方法产生的边缘通常具有不同的宽度,因此很难用可靠的边界来描述对象。

方向歧义: 虽然边缘检测通常会报告边缘位置,但有时很难确定边缘的方向,或者它们是否表示强度的突然变化或渐变。

过度增强: 一些边缘增强方法可能会放大噪声,导致过度增强并使图像更难解释。

纹理图像的困难: 纹理图像可能对边缘检测算法构成挑战,因为当它们包含重复图案或小特征时,可能会导致许多误边缘。

在 3D 和多光谱图像中的局限性: 边缘检测主要针对 2D 灰度图像,并且可能仅通过修改才能轻松扩展到 3D 或多光谱数据。

并非适用于所有任务: 边缘检测在各种应用中有益,但对于某些图像处理任务(如图像去噪或颜色校正)可能存在更好的选择。

为了处理这些缺点,选择最适合您应用程序的边缘检测方法、彻底预处理您的图像以去除噪声以及微调设置以获得所需结果至关重要。

  • 通过将其与其他图像处理方法和机器学习策略相结合,还可以提高边缘检测的准确性和鲁棒性。