# 边缘检测(Edge Detection)
边缘是图像中亮度变化剧烈的区域,是图像最基本的特征之一。边缘检测旨在识别这些区域,通常包括以下步骤:
# 边缘检测器
边缘检测通常始于对图像进行平滑处理,以减少噪声影响。边缘的特征可以用梯度来描述:
- 大小(幅度):梯度的范数(L2 范数),表示亮度变化的剧烈程度。
- 方向:,表示亮度变化的方向。
边缘检测的基本条件是梯度幅度大于某个阈值。然而,这种简单的阈值处理可能导致边缘过厚,且阈值选择不当容易使边缘变得不连续。
# 非极大值抑制(Non-Maximum Suppression, NMS)
为了解决边缘过厚和不连续的问题,非极大值抑制被引入。其核心思想是只保留沿梯度方向上的局部最大值。具体操作如下:
- 对于每个梯度幅度高于阈值的像素点 q,检查其沿梯度方向上的两个相邻点 p 和 r。
- 如果点 q 的梯度幅度小于 p 或 r 的梯度幅度,则抑制点 q(将其值设为0)。
- 为了获得更精确的梯度幅度值,p 和 r 处的幅度通常需要通过插值来计算。
# 滞后抑制(Hysteresis Thresholding)
滞后抑制是一种双阈值处理方法,旨在进一步优化边缘的连续性,并减少假边缘。
- 高阈值:用于识别强边缘点。如果一个点的梯度幅度大于高阈值,它被认为是可靠的真实边缘,并直接标记为边缘点。
- 低阈值:用于延续边缘曲线。如果一个点的梯度幅度介于低阈值和高阈值之间(被称为弱边缘点),则检查它是否与任何强边缘点相邻(通常通过 8-连通性检查)。
- 如果弱边缘点与强边缘点相连,则将其也标记为边缘点;否则,将其忽略。这样可以确保只有真正属于边缘的弱点被保留下来,从而形成连续的边缘线。
# 角点检测(Corner Detection)
角点是图像中亮度在多个方向上都发生剧烈变化的区域,是图像的关键特征点。
# 关键点提取的意义
全景拼接等应用通常需要提取关键点,然后进行特征匹配和图像对齐。关键点提取的优势在于:
- 紧凑性与效率:关键点数量远少于图像像素,处理效率高。
- 局部性:关键点代表图像中的小区域,对杂乱和遮挡具有鲁棒性。
- 显著性:每个关键点都应具有独特的描述符,易于区分。
- 可重复性:在不同的图像中(即使存在几何或光度变换)也能找到相同的关键点。
# 角点检测的基本原理
角点检测的核心思想是:以任何方向移动一个窗口都会引起强烈的亮度变化。
该公式计算了当窗口移动 距离时,窗口内像素亮度变化的平方和。其中, 表示窗口,对窗口求和可使用高斯卷积核进行加权,以突出中心像素。
# 二阶近似与自相关矩阵
为了提高计算效率,上述公式通常通过泰勒级数进行二阶近似:
其中 是自相关矩阵(或结构张量),它是一个局部算子,只需计算一次:
这里 和 分别是图像在 x 和 y 方向的梯度。
# 角点判别条件
通过分析自相关矩阵 的特征值 和 可以判断像素点的类型:
- 角点:若 和 均很大,则 在任何方向的移动都会产生强烈的亮度变化。
- 边缘:若 大而 小,或反之,则 仅在一个方向上发生剧烈变化。例如,若 ,则为沿垂直方向的边界。
- 平坦区域:若 和 均很小,则 在任何方向的移动变化都很小。
# Harris 判别公式
为了避免直接计算特征值,Harris 引入了响应函数来简化判别:
- 是 的高斯加权版本。
- 代表特征值的乘积, 代表特征值的和。
- 是经验常数,通常取值在 0.04 到 0.06 之间。
通过 Harris 响应函数的值可以进行判断:
- 大于阈值:认为是角点。
- 接近 0:认为是平坦区域。
- 负值:认为是边缘。
为了确保角点的唯一性,通常也会结合非极大值抑制来移除局部非最大值。
# Harris 角点的特性
- 对强度变化是协变的:因为使用了导数。
- 对平移是协变的:因为导数和卷积都具有平移不变性。
- 对旋转是协变的:因为特征值在旋转后保持不变。
- 对尺度不协变:Harris 角点检测依赖于固定的窗口大小,因此无法在不同尺度上找到相同的角点。
# 光流估计(Optical Flow Estimation)
光流是图像中亮度模式的表观运动。理想情况下,光流应该与场景中物体的实际运动场相同,但表观运动也可能由亮度变化而非实际运动引起。
# Lucas-Kanade 算法
Lucas-Kanade 算法是一种常用的光流估计方法,其核心建立在以下三个基本假设之上:
- 亮度不变性:同一个物体或点的投影在连续帧中的亮度保持不变,即 。
- 微小移动:点的移动距离很小,可以忽略高阶项。
- 空间一致性:一个像素点周围的邻域内的所有点都具有相似的运动。
# 光圈问题(Aperture Problem)
根据亮度不变性和微小移动假设,可以利用泰勒级数展开得到光流方程:
其中 , , 分别是图像在 x、y 和时间 t 上的梯度, 是像素点的光流向量。这是一个一个方程,两个未知数的问题,无法直接求解。
这种困境被称为光圈问题:仅凭一个像素点的信息,无法确定其完整运动方向。例如,观察一根穿过小孔的柱子,只能感知到沿边缘方向的运动,而无法确定其垂直于边缘的运动。
# 空间一致性约束与最小二乘解
为了解决光圈问题,Lucas-Kanade 算法引入了空间一致性假设。它认为一个像素邻域内的所有点都具有相同的光流 。这使得我们可以在一个窗口内收集多个方程,形成一个线性最小二乘问题:
这个方程组可以利用最小二乘法求解,得到光流向量 的封闭解:
# Lucas-Kanade 算法的局限性
当上述假设不成立时,Lucas-Kanade 算法会失效:
- 运动较大:当移动距离大于一个像素时,微小移动假设不成立。解决方法包括多分辨率金字塔(处理大运动)和迭代精化。
- 运动不一致:当邻域内的点运动不同时,空间一致性假设不成立。这通常需要使用运动分割等更复杂的算法。
- 亮度变化:当亮度不变性假设不成立时(如光照变化),可以考虑使用机器学习方法来解决。