边缘(Edge)

边缘检测(Edge detection)

边缘由多种因素造成

  • surface normal discontinuity - 表面法向不连续面
  • depth discontinuity - 深度不连续性
  • surface color discontinuity - 表面颜色不连续性
  • illumination discontinuity - 光照不连续性

边缘的特征(Characterising edges)

梯度 (Gradient)

  • 对于一个关于 (x, y) 的函数,其梯度(Gradient)定义为:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∇ f = ∂ f ∂ x i + ∂ f ∂ y j \nabla f = \frac{\partial f}{\partial x} \mathbf{i} + \frac{\partial f}{\partial y} \mathbf{j} </math>∇f=∂x∂fi+∂y∂fj

其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> i \mathbf{i} </math>i 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> j \mathbf{j} </math>j 是单位向量,分别表示 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y 方向。

  • 在单点 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x , y ) (x, y) </math>(x,y) 上的梯度是一个矢量(vector)。这个矢量有以下特性:

    • 方向是最大斜率的方向,可以通过以下公式得到:

    <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> θ = tan ⁡ − 1 ( ∂ f ∂ y ∂ f ∂ x ) \theta = \tan^{-1}\left(\frac{\frac{\partial f}{\partial y}}{\frac{\partial f}{\partial x}}\right) </math>θ=tan−1(∂x∂f∂y∂f)

    其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> θ \theta </math>θ 是梯度的方向与 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x 轴之间的角度。

    • 长度是斜率的大小(或陡度),可以通过以下公式得到:

    <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∣ ∣ ∇ f ∣ ∣ = ( ∂ f ∂ x ) 2 + ( ∂ f ∂ y ) 2 || \nabla f || = \sqrt{\left(\frac{\partial f}{\partial x}\right)^2 + \left(\frac{\partial f}{\partial y}\right)^2} </math>∣∣∇f∣∣=(∂x∂f)2+(∂y∂f)2

简单地说,梯度表示函数在某一点的最大上升方向,而其大小则表示上升的速度或陡度。在图像处理中,梯度常用于边缘检测,因为图像的边缘通常对应于图像强度的快速变化,即梯度的大小。

处理噪声(noise)

当直接求导获取出来的图判断不了的时候,可以考虑先对图像做平滑(smooth / blur)处理:

小结

  • 图像的边缘可以通过查找图像中强度或梯度变化大的地方来检测。
  • 由于图像可能包含噪声,因此在进行边缘检测之前,通常需要进行某种平滑处理来减少误报。
  • 一个常用的边缘检测方法是使用高斯滤波器的导数,这种方法同时考虑了图像的平滑处理和梯度响应,使得边缘检测更为准确。

例子:Canny 边缘检测

Canny, TPAMI 1986: A Computational Approach to Edge Detection

使用高斯滤波器的导数进行滤波是一个常用的方法。通过这种滤波,我们可以得到所有边缘的大小和方向。实际上,为了获得这些信息,我们只需要两个有方向的滤波器,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∂ ∂ x \frac{\partial}{\partial x} </math>∂x∂dx 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∂ ∂ y \frac{\partial}{\partial y} </math>∂y∂dy 。给定一个方向 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ \theta </math>θ,我们可以使用下面的公式来计算该方向上的导数:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ ∂ θ = cos ⁡ ( θ ) ∂ ∂ x + sin ⁡ ( θ ) ∂ ∂ y \frac{\partial}{\partial \theta} = \cos(\theta) \frac{\partial}{\partial x} + \sin(\theta) \frac{\partial}{\partial y} </math>∂θ∂=cos(θ)∂x∂+sin(θ)∂y∂

这表示在任何给定的方向 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ \theta </math>θ,边缘的导数可以通过x和y方向上的导数的线性组合得到。

非极大值抑制 (Non-maximum suppression)

❓ 问题:当我们有多个边缘的时候怎么办?

非极大值抑制 (Non-maximum suppression) 是一个处理技巧,其目的是确保边缘的表示尽可能细腻。具体来说,如果有几个相邻的像素都表示它们属于同一条边缘,那么只保留这些像素中梯度值最大 的一个,而抑制其他的像素。这样可以避免在边缘检测结果中出现过宽或模糊的边缘

按方向对边缘进行分箱 (Bin edges by orientation):

  • 对于每个边缘像素,
  • 检查与此边缘像素正交的两个相邻像素。
  • 如果任一相邻像素具有相同的边缘方向且其梯度值更高,那么该像素不被视为边缘。

这是在边缘检测中的非极大值抑制过程的一部分。首先,根据它们的方向将检测到的边缘进行分类。然后,对于每个被检测为边缘的像素,我们会检查与其方向垂直的两个相邻像素。如果这些相邻像素中的任何一个具有与当前像素相同的边缘方向,并且其梯度强度更大,那么我们就认为当前像素实际上不是边缘的一部分,并将其抑制。这一步骤有助于确保检测到的边缘更加精细和清晰。

边缘检测的阈值处理(Thresholding with hysteresis)

它涉及使用两个阈值:高阈值和低阈值,来确定边缘像素

  • 使用两个阈值 <math xmlns="http://www.w3.org/1998/Math/MathML"> T 1 T1 </math>T1 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> T 2 T2 </math>T2,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> T 1 > T 2 T1 > T2 </math>T1>T2。
    • 强边缘 :边缘强度大于 <math xmlns="http://www.w3.org/1998/Math/MathML"> T 1 T1 </math>T1。
    • 弱边缘 :边缘强度介于 <math xmlns="http://www.w3.org/1998/Math/MathML"> T 1 T1 </math>T1 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> T 2 T2 </math>T2 之间。
  • 对于每一个弱边缘 像素:
    • 检查这个像素周围的8个相邻像素。
    • 如果任何相邻像素是强边缘,则将这个弱边缘像素重新标记为强边缘。
  • 最终的边缘图仅由强边缘组成。

小结

Canny边缘检测器:是一个常用的图像边缘检测算法。

  • 基于图像梯度来定义边缘。
  • 梯度后处理,更好地定位边缘 (非极大值抑制)并保留 模糊/破碎边缘(边缘检测的阈值处理)

用于图像识别的边缘(Edges for image recognition)

边缘在图像处理和计算机视觉中具有重要意义:

  • 压缩(Compression):边缘检测可以有效地压缩图像信息。因为边缘代表了图像中的不连续性或变化,通过只关注和表示这些变化的点,我们可以用更少的数据来表示大部分的图像内容,从而实现图像的压缩。

  • 不变性(Invariance):基于边缘的图像特征在许多常见的图像变化(如亮度、对比度变化)前都保持不变或有很强的容忍性。这意味着,即使在各种条件下,这些特征都能稳定地被检测和识别,从而在图像匹配、物体识别等任务中表现出色。

Tolerant & Invariant 定义

  • Invariant(不变) to X:响应/表示不随X变化,对X的变化不敏感。意味着无论X如何变化,系统或模型的响应或输出都保持不变。简单地说,它完全忽略了X的任何变化。

  • Tolerant(容忍) to X:响应大部分不受X的影响,对X的变化较为不敏感。意味着系统或模型的响应虽然可能受到X的一些影响,但这种影响是有限的或微小的。也就是说,它在大多数情况下可以忽略X的变化,但在极端情况下可能还是会受到一些影响。

❓问题: 当光照改变的时候,用什么什么是 Invariant & Tolerant ?

  1. 对亮度偏移不变(Invariant to intensity shift) :如果你将图像的每个像素的亮度增加(或减少)一个固定值 <math xmlns="http://www.w3.org/1998/Math/MathML"> b b </math>b(即 <math xmlns="http://www.w3.org/1998/Math/MathML"> I n e w = I + b Inew = I + b </math>Inew=I+b,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> I I </math>I 是原始图像, <math xmlns="http://www.w3.org/1998/Math/MathML"> I n e w Inew </math>Inew 是修改后的图像),图像的导数或梯度不会改变。这是因为导数是基于像素值的变化或差异计算的,而整体的亮度偏移不会影响这些差异。

  2. 对对比度变化有容忍性(Tolerant to contrast change) :如果你改变图像的对比度,例如通过将每个像素值乘以一个系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> a a </math>a(即 <math xmlns="http://www.w3.org/1998/Math/MathML"> I n e w = a I Inew = aI </math>Inew=aI),图像的导数或梯度会受到影响。但是,具体的影响程度取决于你为导数或梯度设定的阈值。在某些阈值设置下,导数可能对对比度变化非常敏感,而在其他设置下则不太敏感。

简单来说,这意味着当你对图像的整体亮度进行调整时,图像的边缘或结构(由导数或梯度表示)不会改变。但是,当你调整图像的对比度时,边缘或结构可能会有所改变,具体取决于你的阈值设置。

图像识别(Image recognition)

为了在各种条件(如光线变化、不同位置、大小和姿势)下识别物体,我们可以采用以下策略:

  • 学习那些不受这些条件影响的特征,然后将这些特征与图像中的特征进行比较,这样可以确保在不同条件下都能准确地识别物体。
  • 针对每种可能的变化,学习一套特定的特征。例如,如果考虑物体的旋转,我们可以为物体的每种可能旋转角度学习一套特征,并与图像中的特征进行比较。
  • 在实际的物体识别算法中,通常会结合上述两种策略,以确保识别的准确性和鲁棒性。

小结

  • 边缘检测是大多数视觉处理系统的第一步
  • 基于边缘的特征具有理想的视觉识别特性
    • 压缩信息
    • 不变(Invariant)或可容忍(Tolerant)图像中的无关变化
相关推荐
巷9551 小时前
OpenCV图像金字塔详解:原理、实现与应用
人工智能·opencv·计算机视觉
Blossom.1184 小时前
低代码开发:开启软件开发的新篇章
人工智能·深度学习·安全·低代码·机器学习·计算机视觉·数据挖掘
RK_Dangerous5 小时前
【深度学习】计算机视觉(18)——从应用到设计
人工智能·深度学习·计算机视觉
小虎卫远程打卡app5 小时前
视频编解码学习10之成像技术原理
学习·计算机视觉·视频编解码
Stara05116 小时前
基于注意力机制与iRMB模块的YOLOv11改进模型—高效轻量目标检测新范式
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·yolov11
知来者逆7 小时前
计算机视觉——MedSAM2医学影像一键实现3D与视频分割的高效解决方案
人工智能·深度学习·计算机视觉·图像分割·智能医疗·万物分割
小草cys8 小时前
树莓派4 yolo 11l.pt性能优化后的版本
opencv·计算机视觉·目标跟踪
s1ckrain13 小时前
【论文阅读】FreePCA
论文阅读·计算机视觉·aigc
学算法的程霖1 天前
TGRS | FSVLM: 用于遥感农田分割的视觉语言模型
人工智能·深度学习·目标检测·机器学习·计算机视觉·自然语言处理·遥感图像分类
小言Ai工具箱1 天前
PuLID:高效的图像变脸,可以通过文本提示编辑图像,通过指令修改人物属性,个性化文本到图像生成模型,支持AI变脸!艺术创作、虚拟形象定制以及影视制作
图像处理·人工智能·计算机视觉