图像特征与边缘检测:从Sobel算子到Canny边缘检测【计算机视觉】

图像特征与边缘检测:从Sobel算子到Canny边缘检测

1. 图像特征

在日常生活中,人类通过观察图像的特定特征来识别物体,如通过颜色、形状或纹理。对于计算机视觉而言,图像特征是计算机识别、理解图像的基础,帮助机器学习如何"看懂"图像。

什么是图像特征?

图像特征是图像中容易被辨认、独特并且与其他区域不同的部分。它们往往包含了丰富的信息,比如图像中的重要物体位置或边缘变化。通常,我们可以通过以下两种特征来分析图像:

  • 关键点特征:这是图像中具有显著性、能通过不同视角和光照变化保持相对稳定的点。通常是图像中容易定位或识别的兴趣点。
  • 边缘 :图像中颜色、亮度或纹理发生显著变化的区域。边缘通常对应着物体的轮廓或界限。

例如,角点(如建筑物的拐角)是图像中常见的关键点,而边缘则常用于检测物体的轮廓、区分不同的物体。在图像配准、物体检测等任务中,找到这样的特征至关重要。

如何找到合适的特征?

为了实现自动化的图像处理,找到合适的图像特征是第一步。例如,在立体匹配问题中,我们需要在两幅图像中找到相同的特征点,以便估计深度或场景结构。在这样的任务中,某些图像区域比其他区域更容易被匹配。

例如:

  • 一个平坦的区域(如天空或墙面)没有明显的变化,难以精确匹配;
  • 而在具有角点或显著边缘的区域,特征更独特,更容易被定位或匹配。

因此,合适的特征应当具备唯一性、稳定性和可匹配性。这些特征点也被称为兴趣点关键点,而边缘则是物体轮廓的核心。图像特征的检测是图像处理流水线中的第一步,也是后续特征描述、匹配等步骤的基础。

图像处理流水线(Pipeline)

在特征检测的过程中,图像处理通常遵循一个标准的流水线流程,每个阶段都有其明确的目标:

  1. 特征检测:寻找图像中重要的位置,如角点、边缘或兴趣点。
  2. 特征描述:将检测到的关键点或边缘区域转化为稳定的、可比较的特征向量。
  3. 特征匹配:通过比较不同图像中的特征向量,找出匹配的特征点,进行图像的对齐或分析。
  4. 特征跟踪(用于视频处理):在视频中对这些特征点进行跟踪,用于实现物体跟踪、视频稳定等任务。

在这条流水线中,边缘 是图像特征中的重要组成部分。通过检测边缘,机器可以识别出图像中的物体轮廓,从而帮助我们理解图像中的内容。


2. 特征检测器

图像中的边缘代表了物体表面、光照或颜色的突然变化。因此,边缘检测器的目标是通过计算图像的梯度(灰度值的变化率)来检测图像中的边缘。梯度值表示图像在某个方向上变化的幅度,变化越大,说明该方向上的边缘越明显。

图像梯度与离散化计算

由于图像是由像素组成的离散数据,我们不能直接计算连续的导数,而是通过卷积操作近似计算导数。在这个过程中,我们会用到卷积核,它们可以对图像的局部区域进行加权求和,从而计算梯度。

在图像处理中,边缘检测的一个关键步骤是计算图像的梯度,也就是计算图像在某个方向上像素值的变化率。由于图像是离散的像素点组成的,我们无法直接计算连续的导数,因此需要通过差分的方法进行离散化处理:
d f d x = lim ⁡ Δ x → 0 f ( x ) − f ( x − Δ x ) Δ x = f ′ ( x ) \frac{df}{dx}=\lim_{\Delta x\to0}\frac{f(x)-f(x-\Delta x)}{\Delta x}=f^{\prime}(x) dxdf=Δx→0limΔxf(x)−f(x−Δx)=f′(x)

在离散化( Δ x = 1 \Delta x = 1 Δx=1,像素坐标是整数,最小变化为1)之后,公式变为:
d f d x = f ( x ) − f ( x − 1 ) 1 = f ′ ( x ) \frac{df}{dx}= \frac{f(x)-f(x-1)}{1}=f'(x) dxdf=1f(x)−f(x−1)=f′(x)

离散差分形式与卷积核

在边缘检测中,有三种常见的离散差分形式:前向差分后向差分中间差分,每种形式都对应不同的卷积核,并且卷积核在实际应用时会进行翻转。

1. 前向差分

前向差分的公式为:
f ′ ( x ) = f ( x ) − f ( x − 1 ) f'(x) = f(x) - f(x-1) f′(x)=f(x)−f(x−1)

这个公式对应的卷积核是 [0, 1, -1],但在卷积操作中需要进行翻转。卷积核翻转后是 [-1, 1, 0],计算如下:

  • 首先,计算当前位置 x 与它前一个位置 x-1 的差值。
  • 具体的计算步骤为:
    f ′ ( x ) = f ( x − 1 ) ∗ − 1 + f ( x ) ∗ 1 + f ( x + 1 ) ∗ 0 f'(x) = f(x-1) * -1 + f(x) * 1 + f(x+1) * 0 f′(x)=f(x−1)∗−1+f(x)∗1+f(x+1)∗0

因此,前向差分依赖于当前位置 x 和它左侧一个像素的值来计算梯度。

2. 后向差分

后向差分的公式为:
f ′ ( x ) = f ( x + 1 ) − f ( x ) f'(x) = f(x+1) - f(x) f′(x)=f(x+1)−f(x)

它的卷积核是 [1, -1, 0],该核在卷积操作中会被翻转。翻转后的卷积核为 [0, -1, 1]。因此,具体的计算步骤为:
f ′ ( x ) = f ( x − 1 ) ∗ 0 + f ( x ) ∗ − 1 + f ( x + 1 ) ∗ 1 f'(x) = f(x-1) * 0 + f(x) * -1 + f(x+1) * 1 f′(x)=f(x−1)∗0+f(x)∗−1+f(x+1)∗1

这个公式表示我们利用当前位置 x 和它右侧 的像素点来计算梯度。后向差分主要关注的是当前位置 x 与其右边像素之间的变化。

3. 中间差分

中间差分是一种对称的差分形式,公式为:
f ′ ( x ) = f ( x + 1 ) − f ( x − 1 ) 2 f'(x) = \frac{f(x+1) - f(x-1)}{2} f′(x)=2f(x+1)−f(x−1)

这个公式对应的卷积核是 [1, 0, -1]。由于它是对称的卷积核,翻转之后还是 [1, 0, -1],因此在卷积操作中不需要特殊的翻转操作。具体的计算步骤为:
f ′ ( x ) = f ( x − 1 ) ∗ − 1 + f ( x ) ∗ 0 + f ( x + 1 ) ∗ 1 f'(x) = f(x-1) * -1 + f(x) * 0 + f(x+1) * 1 f′(x)=f(x−1)∗−1+f(x)∗0+f(x+1)∗1

由于中间差分考虑了当前位置左右两侧的像素点,因此它对左右两侧的变化都比较敏感,是一种平衡的差分方法,适合用于检测对称性变化。


通过这三种差分方法,我们可以计算图像中的梯度并识别出图像中变化最明显的部分,也就是边缘。前向差分、后向差分和中间差分各有优缺点,前向差分和后向差分计算简单,而中间差分由于其对称性,对噪声具有更强的鲁棒性。

卷积计算与边缘检测

在实际应用中,我们会将这些卷积核应用到图像的每个像素点上,生成一张新的梯度图像。梯度值大的区域对应着图像中的边缘部分,而梯度值小的区域则代表图像的平坦部分。

通过这三种不同的离散差分方法,我们能够计算图像中的梯度,并识别出图像中变化最明显的部分,也就是边缘。对于更复杂的图像处理应用,通常会结合这些卷积核并进一步优化(例如在Canny边缘检测中),以获得更加准确和稳定的边缘检测结果。

Sobel算子

Sobel算子 是一种经典的边缘检测算法,常用于图像处理中。其核心思想是利用卷积核来计算图像中像素点在水平方向和垂直方向上的灰度变化(即梯度),从而找到图像中的边缘。Sobel算子通过两个3x3的卷积核,分别计算图像的水平垂直梯度。

水平和垂直Sobel卷积核分别为:

  • 水平Sobel核:
    G x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] G_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \\ \end{bmatrix} Gx= −1−2−1000121

  • 垂直Sobel核:
    G y = [ − 1 − 2 − 1 0 0 0 1 2 1 ] G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \\ \end{bmatrix} Gy= −101−202−101

如何判断水平方向和垂直方向?
  • 水平Sobel核 ( G x G_x Gx)的结构可以看出,第一列和第三列的值具有相反的符号,分别为-1和1,而中间列为0。这表示该卷积核的作用是计算左右方向的变化,即水平方向的变化。该核能够增强图像中水平方向上有明显灰度值变化的区域,即水平边缘的检测。通过该核计算出的结果可以帮助我们识别出水平方向上物体的轮廓。

  • 垂直Sobel核 ( G y G_y Gy)的结构则显示,第一行和第三行的值分别为-1和1,而中间行则为0。这表明该核用于检测图像在上下方向的变化,即垂直方向的变化。通过该核,我们能够识别出图像中垂直方向的边缘,例如物体的垂直边界。

计算梯度

通过使用水平和垂直Sobel卷积核分别对图像进行卷积操作,我们可以计算出每个像素点在水平方向( G x G_x Gx)和垂直方向( G y G_y Gy)上的梯度。然后,通过以下公式,我们可以计算图像在该像素点处的梯度大小(也就是边缘强度):
∣ ∇ I ∣ = G x 2 + G y 2 |\nabla I| = \sqrt{G_x^2 + G_y^2} ∣∇I∣=Gx2+Gy2

其中:

  • ∣ ∇ I ∣ |\nabla I| ∣∇I∣ 表示图像的梯度强度,它反映了该像素点是边缘的可能性;
  • G x G_x Gx 表示水平方向的梯度;
  • G y G_y Gy 表示垂直方向的梯度。

例子(数学分析)

假设我们有一个简单的5x5图像矩阵 I I I,其中像素值变化明显,表示边缘信息:

I = [ 10 10 20 20 20 10 10 20 20 20 10 10 20 20 20 10 10 20 20 20 10 10 20 20 20 ] I = \begin{bmatrix} 10 & 10 & 20 & 20 & 20 \\ 10 & 10 & 20 & 20 & 20 \\ 10 & 10 & 20 & 20 & 20 \\ 10 & 10 & 20 & 20 & 20 \\ 10 & 10 & 20 & 20 & 20 \\ \end{bmatrix} I= 10101010101010101010202020202020202020202020202020

在该图像中,左侧的像素值为10,右侧的像素值为20,这表明在水平方向上存在明显的灰度变化,而垂直方向上的像素变化较为平缓。

我们使用水平Sobel核和垂直Sobel核分别对该图像进行卷积操作,得到水平方向梯度矩阵 G x G_x Gx和垂直方向梯度矩阵 G y G_y Gy:

  • 水平方向 梯度 G x G_x Gx计算结果为:
    G x = [ 0 0 0 0 0 0 10 10 10 0 0 10 10 10 0 0 10 10 10 0 0 0 0 0 0 ] G_x = \begin{bmatrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 10 & 10 & 10 & 0 \\ 0 & 10 & 10 & 10 & 0 \\ 0 & 10 & 10 & 10 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ \end{bmatrix} Gx= 0000001010100010101000101010000000

    这个结果表明,在图像的中心区域,水平方向上有较强的边缘(因为左边为10,右边为20)。

  • 垂直方向 梯度 G y G_y Gy计算结果为:
    G y = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] G_y = \begin{bmatrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ \end{bmatrix} Gy= 0000000000000000000000000

    这个结果表明,图像在垂直方向上的边缘强度较小,几乎没有显著变化。

结果呈现(实际图像)

在更复杂的真实图像中,如图2所示的蜥蜴图像,我们可以通过Sobel算子检测出其水平方向和垂直方向上的边缘信息。

  • 左图是原始图像。
  • 中图是通过Sobel算子的水平方向卷积核 ( G x G_x Gx)检测出的边缘结果。可以看到,该结果突出了图像中水平方向上存在显著灰度变化的区域,如蜥蜴皮肤的纹理。
  • 右图是通过Sobel算子的垂直方向卷积核 ( G y G_y Gy)检测出的边缘结果。该结果则突出了图像中垂直方向上的变化,例如蜥蜴的眼睛边缘和面部轮廓。

总结

Sobel算子通过水平方向和垂直方向的卷积操作,有效地帮助我们检测出图像中的边缘。这两个方向的卷积核分别对图像中的水平和垂直边缘变化进行了增强,结合这两者的梯度,可以生成精确的边缘检测结果。然而,Sobel算子对图像的旋转较为敏感,因此在处理时,通常需要将图像预处理为灰度图像,以减少计算复杂度和提高结果的鲁棒性。


3. 边缘检测

边缘是图像中物体轮廓的体现,用以区分图像中的不同物体。边缘检测的目标是识别出图像中不同区域之间的显著变化,通常与颜色、亮度和表面特性的突变相关。

边缘检测的重要性

边缘检测在图像处理和计算机视觉中是关键步骤,广泛应用于以下任务:

  • 物体识别:边缘帮助识别和理解物体形状。
  • 图像分割:通过边缘信息,图像可以分割为多个独立区域。
  • 立体视觉:边缘特征辅助图像对的配准,帮助深度估计。

边缘的类型可以分为以下几种:

  • 表面法线的不连续性:垂直方向上物体表面的突然变化。
  • 深度不连续性:物体的前后景之间的深度差异。
  • 表面颜色不连续性:物体之间的颜色差异。
  • 光照不连续性:由于光照的变化而导致的亮度突变。

边缘检测的本质:梯度分析

边缘检测的核心原理是通过检测图像中强度函数的快速变化来找到边界。这种变化可以通过梯度来捕捉,梯度是图像在某一方向上的变化率。梯度的大小和方向能够帮助我们定位边缘的强度和方向。

图像梯度

梯度是图像处理中的一个重要概念。图像的梯度可以定义为:

∇ f = [ ∂ f ∂ x , ∂ f ∂ y ] \nabla f = \left[ \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right] ∇f=[∂x∂f,∂y∂f]

其中, ∂ f ∂ x \frac{\partial f}{\partial x} ∂x∂f 和 ∂ f ∂ y \frac{\partial f}{\partial y} ∂y∂f 分别表示图像在水平方向(x方向)和垂直方向(y方向)上的变化率。通过计算这两个方向的梯度,我们可以得到边缘的强度和方向。

边缘的强度可以通过梯度的大小来计算:

∣ ∣ ∇ 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} ∣∣∇f∣∣=(∂x∂f)2+(∂y∂f)2

梯度与边缘检测

在边缘检测中,强度函数的一阶导数(梯度)极大值处通常为边缘所在位置。通过寻找这些极值点,可以确定图像中的边缘,如下图所示:

如图1中右侧所示,强度函数的一阶导数在边缘处出现极大值,这一导数的最大值也就是边缘所在的区域。边缘的位置可以通过找到这些极值点来确定。

噪声问题与平滑处理

在实际应用中,图像中的噪声会影响边缘检测的准确性。噪声可能会导致图像中的灰度值发生随机变化,从而引起误检测

如图2所示,噪声对图像的影响会引发图像强度函数的剧烈波动,导致边缘检测结果不可靠。因此,在应用边缘检测算法之前,常常需要先对图像进行预处理,以减小噪声的影响。

平滑处理

为抑制噪声,通常对图像进行平滑处理,最常见的方法是高斯滤波。高斯滤波通过对图像应用高斯核进行卷积,有效去除噪声,保留图像的结构和边缘。

常见的平滑方法包括:

  1. 高斯滤波:利用高斯核实现平滑,减少高频噪声。
  2. 均值滤波:通过取邻域像素的平均值来平滑图像。
高斯平滑与边缘检测的结合

高斯平滑可以与边缘检测结合,通过公式表示为:

d d x ( f ∗ g ) = f ∗ d d x g \frac{d}{dx}(f * g) = f * \frac{d}{dx}g dxd(f∗g)=f∗dxdg

其中, f f f 为图像, g g g 为高斯核, ∗ * ∗ 表示卷积。这个公式表明,我们可以先对图像进行高斯平滑,再计算梯度;或者同时应用高斯平滑和边缘检测,实现平滑和检测的联合优化。

下图展示了高斯平滑后的边缘检测结果,明显减少了噪声的干扰:

通过平滑处理后的图像,检测到的边缘更加稳定可靠。

Canny边缘检测详解

Canny边缘检测算法由于其精确性和鲁棒性,被广泛应用于实际中。与传统算子(如Sobel算子)相比,Canny通过多步处理优化边缘检测效果,能够更好地去除噪声并精确定位边缘。

1. 高斯滤波

首先,Canny算法通过高斯滤波对图像进行平滑,主要目的是减少图像中的随机噪声干扰。高斯滤波器是一个低通滤波器,能够平滑图像中的高频噪声,同时保留较大的结构特征。典型的高斯核大小为 3×3、5×5 或更大,具体选择取决于图像的噪声水平和细节保留需求。

2. 计算梯度大小和方向

接下来,Canny算法计算图像中每个像素的梯度大小方向,用于表征边缘的强度和方向。梯度的计算通常使用Sobel算子,通过计算每个像素在x方向和y方向上的导数:

G x = ∂ f ∂ x , G y = ∂ f ∂ y G_x = \frac{\partial f}{\partial x}, \quad G_y = \frac{\partial f}{\partial y} Gx=∂x∂f,Gy=∂y∂f

梯度的大小可以通过下式计算:

∣ ∣ G ∣ ∣ = G x 2 + G y 2 ||G|| = \sqrt{G_x^2 + G_y^2} ∣∣G∣∣=Gx2+Gy2

梯度方向为:

θ = tan ⁡ − 1 ( G y G x ) \theta = \tan^{-1} \left( \frac{G_y}{G_x} \right) θ=tan−1(GxGy)

这一步帮助确定边缘的精确位置和方向信息。

3. 非极大值抑制

在边缘检测的过程中,直接计算出的边缘可能会出现边缘粗糙 的现象,如图中展示的结果。

这是因为初步的梯度计算产生了多像素宽度的边缘(例如下图中的粗线),这会影响边缘检测的精度。因此,Canny算法的第三步非极大值抑制旨在解决这个问题,将宽边缘细化为单像素宽度的精确边缘。

具体步骤:
  1. 沿梯度方向比较像素值:对于每个像素,沿着其梯度方向(即图像中亮度变化最剧烈的方向)检查相邻的两个像素值。

    例如,在梯度方向如图所示为45°的情况下,比较当前像素点 ( x , y ) (x, y) (x,y)与沿梯度方向上相邻的像素点 ( x ′ , y ′ ) (x', y') (x′,y′)和 ( x ′ ′ , y ′ ′ ) (x'', y'') (x′′,y′′)的梯度值。

  2. 判断是否为局部极大值:如果当前像素的梯度值不是局部的极大值(即没有比相邻的两个像素值大),则将该像素值抑制为零。这意味着它不被认为是边缘的一部分。

    • 图像梯度的抑制公式为:

      M ( x , y ) = { ∣ ∇ G ∣ ( x , y ) if ∣ ∇ G ∣ ( x , y ) > ∣ ∇ G ∣ ( x ′ , y ′ ) & ∣ ∇ G ∣ ( x , y ) > ∣ ∇ G ∣ ( x ′ ′ , y ′ ′ ) 0 otherwise M(x,y)=\begin{cases}|\nabla G|(x,y) & \text{if} \ |\nabla G|(x,y)>|\nabla G|(x^{\prime},y^{\prime}) \\& \& \ |\nabla G|(x,y)>|\nabla G|(x^{\prime\prime},y^{\prime\prime})\\ 0 & \text{otherwise}\end{cases} M(x,y)=⎩ ⎨ ⎧∣∇G∣(x,y)0if ∣∇G∣(x,y)>∣∇G∣(x′,y′)& ∣∇G∣(x,y)>∣∇G∣(x′′,y′′)otherwise

    如上式所示,只有当当前像素的梯度值大于它在梯度方向的两个相邻像素时,才会保留,否则将其值设为0。

  3. 消除冗余响应,保留精确边缘:通过这一过程,可以去除那些没有实际边缘意义的多余梯度响应,只保留真正的边缘像素,边缘线因此得到细化,精度大大提高。

图示说明:
  • 上图左侧展示了梯度方向与相邻像素的位置关系。梯度方向从 ( x , y ) (x, y) (x,y)沿着斜线指向两个相邻像素 ( x ′ , y ′ ) (x', y') (x′,y′)和 ( x ′ ′ , y ′ ′ ) (x'', y'') (x′′,y′′)。在该梯度方向上,比较当前像素与两个邻居的值,若其不是极大值则将其抑制。
  • 右侧的图表展示了梯度方向的具体比较过程,在相邻像素 q q q和 p p p处进行极大值判断。
  • 底部示意图显示了经过非极大值抑制处理后的梯度图像(右侧)相比处理前(左侧)的边缘线变得更加细致和精确。这一步骤显著减少了边缘的冗余响应,使得边缘呈现出单像素宽度。

实现效果

我将根据你提供的要求对"双阈值检测与边缘连接"部分进行更详细的修改,加入滞后和连通性分析的内容。


4. 双阈值检测与边缘连接

非极大值抑制之后,尽管边缘已经细化,但梯度图像中依然可能存在虚假的边缘噪声和不完整的边缘线。为了进一步优化边缘的提取效果,Canny算法引入了双阈值检测滞后连接

双阈值检测

双阈值检测的目的是根据像素的梯度值来区分不同的边缘强度。通过设定高阈值低阈值 ,将像素分类为强边缘弱边缘非边缘三类:

  1. 强边缘:若像素的梯度值大于高阈值,认为该像素属于强边缘。
  2. 弱边缘:若像素的梯度值介于高阈值与低阈值之间,则标记为弱边缘。
  3. 非边缘:若像素的梯度值低于低阈值,则该像素被丢弃,视为噪声。
滞后连接与连通性分析

双阈值检测之后,接下来使用滞后连接和连通性分析来进一步判断哪些弱边缘是实际边缘,哪些是噪声。具体步骤如下:

  1. 强边缘的保留:梯度值大于高阈值的像素直接被标记为边缘,如上图所示,这些是图像中最明显的边缘点。

  2. 弱边缘的判定 :对于梯度值介于高阈值和低阈值之间的像素(弱边缘),进一步检查其是否与强边缘相连。如果弱边缘像素的8邻域内(即周围八个像素)有一个像素是强边缘,则将该弱边缘像素保留为实际边缘。

  3. 非边缘的丢弃:梯度值低于低阈值的像素直接被丢弃,不会被考虑为边缘。

  4. 迭代处理:这个过程通过迭代进行,逐步将弱边缘与强边缘连接,直到图像中的边缘不再发生变化为止。这种滞后连接的策略确保了弱边缘不会被错误丢弃,从而保持了边缘的完整性。

图示说明
  • 在图中,强边缘像素用较粗的线表示,弱边缘像素与强边缘相连后被保留,最终形成完整的边缘结构。

通过双阈值检测与滞后连接,Canny算法能够有效区分实际的边缘与噪声,确保保留图像中重要的边缘信息,同时剔除不必要的冗余。

实现效果

5. 最终边缘输出

在双阈值和滞后连接的处理下,Canny算法生成了一幅精确的二值边缘图,其中的每条边缘线是连续的、细化的,并且噪声被最大程度去除。Canny算法的优势在于,它不仅可以消除噪声影响,还能有效地保留图像中的重要边缘信息。

总结

Canny边缘检测的流程可以总结为以下几步:

  1. 高斯滤波:平滑图像,降低噪声。
  2. 计算梯度:获取每个像素的梯度大小和方向。
  3. 非极大值抑制:消除冗余响应,保留单像素宽的边缘。
  4. 双阈值检测与滞后连接:利用双阈值对边缘进行分类,通过滞后处理连接强边缘和弱边缘。

Canny边缘检测算法的精确性和鲁棒性使其在自动驾驶、医学图像处理等需要精确边缘定位的场景中广泛应用。


总结

特征检测和边缘检测是图像处理中的关键步骤。通过Sobel算子 ,我们能够简单、快速地检测出图像中的边缘,而通过更加复杂的Canny边缘检测,我们可以获得更精确和稳定的边缘结果。在计算机视觉应用中,边缘是物体识别、图像分割和匹配中的重要线索。这些技术在机器视觉、医学成像和自动驾驶等领域起到了不可或缺的作用。

相关推荐
paixiaoxin4 小时前
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
人工智能·深度学习·机器学习·生成对抗网络·计算机视觉·ocr·.net
AI视觉网奇5 小时前
人脸生成3d模型 Era3D
人工智能·计算机视觉
编码小哥5 小时前
opencv中的色彩空间
opencv·计算机视觉
吃个糖糖5 小时前
34 Opencv 自定义角点检测
人工智能·opencv·计算机视觉
葡萄爱7 小时前
OpenCV图像分割
人工智能·opencv·计算机视觉
深度学习lover10 小时前
<项目代码>YOLO Visdrone航拍目标识别<目标检测>
python·yolo·目标检测·计算机视觉·visdrone航拍目标识别
编码小哥12 小时前
深入解析Mat对象:计算机视觉中的核心数据结构
opencv·计算机视觉
liuming199213 小时前
Halcon中histo_2dim(Operator)算子原理及应用详解
图像处理·人工智能·深度学习·算法·机器学习·计算机视觉·视觉检测
Asiram_14 小时前
大数据机器学习与计算机视觉应用08:反向传播
大数据·机器学习·计算机视觉
深度学习lover20 小时前
[项目代码] YOLOv8 遥感航拍飞机和船舶识别 [目标检测]
python·yolo·目标检测·计算机视觉·遥感航拍飞机和船舶识别