计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

时间:2024-04-03 08:54:28

总览

我们通过分析亮度或颜色的突然变化(sudden variations of brightness or colour)来分离对象。通过分析单个对象,其组成和相互作用(composition and interaction)来分析图像内容。要分析对象,必须将对象与背景分开。

对象分离(object seperation) 是一个复杂的过程,但是它基于两个基本原理:

  • 检测的不连续性 discontinuities (亮度 luminance 或颜色 colour)
  • 相似性识别 (identification of similarity)

计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

边缘(edges)

边缘是图像中亮度 (illuminance) 不连续 (discontinuity) 的位置。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

基于梯度 (gradient)的边缘检测

亮度突然变化的区域在水平或者垂直方向上(或同时在这两个方向上)具有较大的梯度大小(large magnitude of the gradient)。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
(x,y)处的边缘方向 (direction of edge) 垂直 (perpendicular) 于该点处的梯度方向 (direction of gradient)。以下是求点的梯度,点的梯度大小(垂直和水平),梯度方向的方法。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

检测不连续性(detection of discontinuities)

1D

通过测量梯度并将其与阈值threshold相比较来检测不连续区域。梯度本质上是在一个方向上计算的导数(derivative)。由于图像是数字化序列 (digitised sequences),因此可以通过常用的数字微分器 (digital differentiator) 来计算导数。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

2D

由于图像是二维序列,因此可以通过使用2D微分器 (2D differentiator) 对图像进行卷积 (convoluting) 来测量梯度。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
每个梯度算子(gradient operator)产生的输出在每个位置与该位置的导数成比例(proportional)。对角梯度 (diagonal gradients) 对两个算子都会造成影响,但程度较小。两个算子的输出合并为单个梯度强度值(magnitude)。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

梯度强度阈值 (threshold)

梯度强度在物体边缘拥有最大值。亮度均匀(uniform luminance)的区域(无论其绝对值absolute value 如何),其梯度强度都很低。物体内部的亮度变化也会产生较大的幅度,这可能会被误认为物体的边缘。因此,我们可以通过适当地选择 阈值(threshold) 来丢弃 通过物体亮度变化而产生的 梯度强度。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

噪声影响

白噪声 (white noise) 会导致平滑区域 (smooth areas) 中图像亮度的随机突然变化 (random sudden variation),从而产生假点 (false dot) 和断线 (disconnected lines)。
因此,如果图像受噪声影响,则应该在执行边缘检测之前将其抑制 (suppressed)。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
一些具有较大内核 (larger kernels) 的算子将微分(differentiation)和平滑相结合,可以减少噪声的影响。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

其他算子(不同核)

计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

一些研究结果建议将对角线边缘检测内核(diagonal edge detection kernels)与垂直和水平内核同时使用。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

基于零交叉(zero-crossing)的边缘检测

更高阶的导数

计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
能注意到,二阶导数在每个边的位置都有零交叉(zero-crossing)。
二阶导数能够被拉普拉斯算子 (Laplacian kernel) 来近似。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
经过Laplacian滤波之后,位于两次拾取(double picks)之间的零交叉必须被检测。
Laplacian算子的其他数字近似:
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
Laplacian内核对噪声令人无法接受地敏感。同时,Laplacian内核对边缘方向不敏感,即它无法检测到边缘方向。由于其对噪声的敏感性,Laplacian算子总是与平滑处理 (smoothing) 结合在一起,这作为前驱操作 (precursor) 在通过零交叉找到边缘之前进行。

Laplacian of a Gaussian (LoG)

一个典型的平滑是对内核进行高斯平滑(Gaussian smoothing)。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
对于给定图像 f(x, y):
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
而因为二阶导数是一个线性操作,公式可以化为:
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
LoG可以近似为以下算子:
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
Laplacian of Gaussian 可以通过两个不同的 Gaussian算子 之间的差来近似。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

边缘细化和链接(edge thinning and linking)

通常我们对使用 Sobel 和 Prewitt 算子计算出来的梯度进行阈值筛选而检测到的边缘通常是带有多个像素 (multiple pixels) 并且由于噪声而是破碎的(broken due to noise)。
因此,我们在许多视觉任务中,都需要细化 (thinning) 边缘(将其转化为单像素边缘 one pixel edge)以及跟踪并链接像素点(tracing and linking)。

边缘链接 (edge linking)

对于每个边缘像素,考虑其本地邻点区域,如 3 x 3 或者 5 x 5。
如果满足以下条件,则应该链接两个边缘像素(x, y)和(x0, y0)。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
当我们选择了E = 25, A = 15° 并应用在水平和垂直的边缘时效果如上图。(E 梯度强度阈值,A 梯度方向阈值)

Canny边缘检测 (Canny edge detector)

Canny边缘检测器是最常用的边缘检测器之一。该方法结合了边缘检测,细化,跟踪和链接。
方法使用了高斯导数(derivative of Gaussian)。

非最大抑制(non-maximum suppression)

将多像素宽的边细化为单像素宽度。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
选择边缘宽度上的单个最大点作为单像素边缘点。

链接和阈值

低,高边缘强度阈值。
接受到连接到高阈值边缘的所有低阈值边缘。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
假设标记点q是边缘点。在该点取梯度的法线 (normal),并用它来预测连续点(r或者p)。
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
Edge Hysteresis: 边缘迟滞是一种效果的滞后现象,是一种惯性。在阈值化的环境中,如果某个低阈值以上的区域连接到了更高阈值以上的区域,则认为他们高于该低阈值。
方法:保持两个阈值 k_high 和 k_low。(通常满足,k_high / k_low = 2)
使用k_high来查找强边缘以开始边缘链。高于k_high的一定是边缘。
使用k_low来查找边缘链的弱边缘。低于k_low的点一定不是边缘。低于k_high 并高于 k_low 的点,则根据该点是不是和强边缘点相连来决定其是否边缘点。

示例过程

计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)
计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

基于边缘的对象提取

  1. 进行高斯平滑(Gaussian smooth),参数选择 σx, σy。若大,容易检测到大规模边缘,若小,容易检测到精细特征。(根据具体需求而定)
  2. 进行canny边缘检测,参数选择 k_high, k_low。过高的阈值可能会损失细节,过低的阈值可能会引入噪声。
  3. 提取对象的轮廓。