传统CV算法——图像特征算法之斑点检测算法

news2024/12/27 13:33:03

文章目录

    • 3. 斑点检测
      • 3.1 斑点的理解
        • 3.1.1 斑点定义
        • 3.1.2 斑点检测
      • 3.2斑点检测基本原理
      • 3.3LoG计算流程及原理
        • 1. 高斯函数
        • 2. 拉普拉斯算子
        • 3. 组合高斯和平滑
        • 4. 计算 LoG
          • 4.1. 一阶导数
          • 4.2. 二阶导数
          • 4.3. 组合二阶导数
        • 5. LoG 的特性
        • 6.多尺度检测
      • 3.4 DOG
        • 3.4.1 DoG 的基本原理
        • 3.4.2 DoG 的步骤
          • 1. 高斯模糊
          • 2. 计算差异
          • 3. 处理结果
        • 3.4.3 DoG 的特性
        • 3.4.4 应用
        • 3.4.5 总结
      • 3.5 DOH斑点检测
        • 3.5.1. 定义
        • 3.5.2 数学原理
          • 1. Hessian 矩阵
          • 2. Difference of Hessian
        • 3.5.3 优缺点
          • 1. 优点
          • 2. 缺点
      • 3.6 SIFT斑点检测算法
        • 3.6.1 SIFT 算法概述
        • 3.6.2 SIFT 算法的原理
          • 1. 尺度空间极值检测
          • 2. 特征点定位
          • 2.3. 方向分配确定
          • 2.4. 特征描述
        • 3.6.3 SIFT 算法的推导
        • 3.6.4. SIFT 算法的优缺点
          • 1. 优点
          • 2. 缺点

3. 斑点检测

3.1 斑点的理解

3.1.1 斑点定义

在图像处理和计算机视觉中,斑点通常指的是图像中局部区域的特征或模式。这些斑点可以是图像中的亮点、暗点或其他特征,通常用于描述图像的纹理、形状或颜色分布。

  • 定义:在图像中,斑点可以被定义为一组相邻像素,其强度值或颜色值与周围像素显著不同。斑点的特征可以通过局部统计量(如均值、标准差等)来描述。

image-20240902164619996

3.1.2 斑点检测

斑点检测(Spot Detection)是指识别和定位图像中局部特征或模式的过程,这些特征通常表现为与周围区域在强度、颜色或纹理上显著不同的点或区域。斑点可以是亮点、暗点、特定形状的区域,或者是某种特定特征的表现。

3.2斑点检测基本原理

利用高斯拉普通拉斯(Laplace of Gaussian, LOG)算子检测图像斑点是一种十分常用的方法,对于二维高斯函数:

G ( x , y ; σ ) = 1 2 π σ 2 exp ⁡ ( − x 2 + y 2 2 σ 2 ) G(x, y ; \sigma)=\frac{1}{2 \pi \sigma^2} \exp \left(-\frac{x^2+y^2}{2 \sigma^2}\right) G(x,y;σ)=2πσ21exp(2σ2x2+y2)

它的拉普拉斯变换为:

∇ 2 g = ∂ 2 g ∂ x 2 + ∂ 2 g ∂ y 2 \nabla^2 g=\frac{\partial^2 g}{\partial x^2}+\frac{\partial^2 g}{\partial y^2} 2g=x22g+y22g

规范化的高斯拉普变换为:

∇ norm  2 = σ 2 ∇ 2 g = σ 2 ( ∂ 2 g ∂ x 2 + ∂ 2 g ∂ y 2 ) = − 1 2 π σ 2 [ 1 − x 2 + y 2 σ 2 ] ⋅ exp ⁡ ( − x 2 + y 2 2 σ 2 ) \nabla_{\text {norm }}^2=\sigma^2 \nabla^2 g=\sigma^2\left(\frac{\partial^2 g}{\partial x^2}+\frac{\partial^2 g}{\partial y^2}\right)=-\frac{1}{2 \pi \sigma^2}\left[1-\frac{x^2+y^2}{\sigma^2}\right] \cdot \exp \left(-\frac{x^2+y^2}{2 \sigma^2}\right) norm 2=σ22g=σ2(x22g+y22g)=2πσ21[1σ2x2+y2]exp(2σ2x2+y2)

规范化算法子在二维图像上显示是一个圆对称函数,如下图所示。我们可以用这个算子来检测图像中的斑点, 并且可以通过改变 σ \sigma σ 的值, 可以检测不同尺寸的二维斑点。

image-20240902165041792

3.3LoG计算流程及原理

Laplace of Gaussian (LoG) 是一种结合高斯平滑和拉普拉斯算子的边缘检测方法。通过对高斯函数进行二阶导数计算,LoG 能够有效地检测图像中的边缘和斑点。它涉及高斯函数的定义、拉普拉斯算子的应用以及一阶和二阶导数的计算。LoG 在图像处理和计算机视觉中被广泛应用于特征提取和边缘检测。

1. 高斯函数

首先,我们定义一个二维高斯函数,它用于平滑图像,以减少噪声的影响。二维高斯函数的形式为:

G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y) = \frac{1}{2\pi \sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y)=2πσ21e2σ2x2+y2

其中:

  • ( x , y ) (x, y) (x,y) 是图像中的坐标。
  • σ \sigma σ 是高斯分布的标准差,控制平滑的程度。
2. 拉普拉斯算子

拉普拉斯算子是一个二阶微分算子,用于检测图像中的边缘。二维拉普拉斯算子的定义为:

Δ f ( x , y ) = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 \Delta f(x, y) = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} Δf(x,y)=x22f+y22f

其中 f ( x , y ) f(x, y) f(x,y) 是图像的强度函数。

3. 组合高斯和平滑

LoG 算法的核心思想是先用高斯函数对图像进行平滑,然后计算其拉普拉斯。我们可以将高斯函数与拉普拉斯算子结合,得到 LoG 的表达式:

L ( x , y ) = Δ G ( x , y ) = ∂ 2 G ( x , y ) ∂ x 2 + ∂ 2 G ( x , y ) ∂ y 2 L(x, y) = \Delta G(x, y) = \frac{\partial^2 G(x, y)}{\partial x^2} + \frac{\partial^2 G(x, y)}{\partial y^2} L(x,y)=ΔG(x,y)=x22G(x,y)+y22G(x,y)

4. 计算 LoG

为了计算 LoG,我们需要先计算高斯函数的二阶导数。首先计算一阶导数:

4.1. 一阶导数

高斯函数的 x 方向一阶导数为:

∂ G ( x , y ) ∂ x = − x σ 2 G ( x , y ) \frac{\partial G(x, y)}{\partial x} = \frac{-x}{\sigma^2} G(x, y) xG(x,y)=σ2xG(x,y)

y 方向一阶导数为:

∂ G ( x , y ) ∂ y = − y σ 2 G ( x , y ) \frac{\partial G(x, y)}{\partial y} = \frac{-y}{\sigma^2} G(x, y) yG(x,y)=σ2yG(x,y)

4.2. 二阶导数

接下来,我们计算二阶导数。首先计算 x 方向的二阶导数:

∂ 2 G ( x , y ) ∂ x 2 = ∂ ∂ x ( − x σ 2 G ( x , y ) ) \frac{\partial^2 G(x, y)}{\partial x^2} = \frac{\partial}{\partial x} \left( \frac{-x}{\sigma^2} G(x, y) \right) x22G(x,y)=x(σ2xG(x,y))

使用乘积法则:

∂ 2 G ( x , y ) ∂ x 2 = − 1 σ 2 G ( x , y ) + − x σ 2 ∂ G ( x , y ) ∂ x \frac{\partial^2 G(x, y)}{\partial x^2} = \frac{-1}{\sigma^2} G(x, y) + \frac{-x}{\sigma^2} \frac{\partial G(x, y)}{\partial x} x22G(x,y)=σ21G(x,y)+σ2xxG(x,y)

将一阶导数代入:

∂ 2 G ( x , y ) ∂ x 2 = − 1 σ 2 G ( x , y ) + x 2 σ 4 G ( x , y ) = ( x 2 − σ 2 σ 4 ) G ( x , y ) \frac{\partial^2 G(x, y)}{\partial x^2} = \frac{-1}{\sigma^2} G(x, y) + \frac{x^2}{\sigma^4} G(x, y) = \left( \frac{x^2 - \sigma^2}{\sigma^4} \right) G(x, y) x22G(x,y)=σ21G(x,y)+σ4x2G(x,y)=(σ4x2σ2)G(x,y)

同样地,y 方向的二阶导数为:

∂ 2 G ( x , y ) ∂ y 2 = ( y 2 − σ 2 σ 4 ) G ( x , y ) \frac{\partial^2 G(x, y)}{\partial y^2} = \left( \frac{y^2 - \sigma^2}{\sigma^4} \right) G(x, y) y22G(x,y)=(σ4y2σ2)G(x,y)

4.3. 组合二阶导数

将 x 和 y 方向的二阶导数结合起来,得到 LoG:

L ( x , y ) = Δ G ( x , y ) = ∂ 2 G ( x , y ) ∂ x 2 + ∂ 2 G ( x , y ) ∂ y 2 L(x, y) = \Delta G(x, y) = \frac{\partial^2 G(x, y)}{\partial x^2} + \frac{\partial^2 G(x, y)}{\partial y^2} L(x,y)=ΔG(x,y)=x22G(x,y)+y22G(x,y)

L ( x , y ) = ( x 2 − σ 2 σ 4 + y 2 − σ 2 σ 4 ) G ( x , y ) L(x, y) = \left( \frac{x^2 - \sigma^2}{\sigma^4} + \frac{y^2 - \sigma^2}{\sigma^4} \right) G(x, y) L(x,y)=(σ4x2σ2+σ4y2σ2)G(x,y)

L ( x , y ) = 1 σ 4 ( x 2 + y 2 − 2 σ 2 ) G ( x , y ) L(x, y) = \frac{1}{\sigma^4} \left( x^2 + y^2 - 2\sigma^2 \right) G(x, y) L(x,y)=σ41(x2+y22σ2)G(x,y)

5. LoG 的特性
  • 边缘检测:LoG 在图像中边缘的地方会产生零交叉(zero-crossing),即从正值变为负值或从负值变为正值的地方,这些点对应于图像的边缘。
  • 尺度不变性:通过调整 σ \sigma σ 的值,可以检测到不同尺度的边缘和特征。
6.多尺度检测

注意到当 σ \sigma σ 尺度一定时, 只能检测对应半径的斑点, 那么检测的是多大半径的斑点呢,我们可以通过对规范化的二维拉普拉斯高斯算子求导:

规范化的高斯拉普拉斯函数为:

∇ norm  2 = − 1 2 π σ 2 [ 1 − x 2 + y 2 σ 2 ] ⋅ exp ⁡ ( − x 2 + y 2 2 σ 2 ) \nabla_{\text {norm }}^2=-\frac{1}{2 \pi \sigma^2}\left[1-\frac{x^2+y^2}{\sigma^2}\right] \cdot \exp \left(-\frac{x^2+y^2}{2 \sigma^2}\right) norm 2=2πσ21[1σ2x2+y2]exp(2σ2x2+y2)

∇ norm  2 \nabla_{\text {norm }}^2 norm 2 的极点值等价于求取下式:

∂ ( ∇ norm  2 ) ∂ σ = 0 \frac{\partial\left(\nabla_{\text {norm }}^2\right)}{\partial \sigma}=0 σ(norm 2)=0

得到:

( x 2 + y 2 − 2 σ 2 ) ⋅ exp ⁡ ( − ( x 2 + y 2 ) 2 σ 2 ) r 2 − 2 σ 2 = 0 \begin{gathered} \left(x^2+y^2-2 \sigma^2\right) \cdot \exp \left(-\frac{\left(x^2+y^2\right)}{2 \sigma^2}\right) \\ r^2-2 \sigma^2=0 \end{gathered} (x2+y22σ2)exp(2σ2(x2+y2))r22σ2=0

对于图像中的斑点,在尺度 σ = r / 2 \sigma=\mathrm{r} / \sqrt{2} σ=r/2 时,高斯拉普拉斯响应值达到最大。同理,如果图像中的圆形斑点黑白反向,那么,它的高斯拉普拉斯响应值在 σ = r / 2 \sigma=\mathrm{r} / \sqrt{2} σ=r/2 时达到最小。将高斯拉普拉斯响应达到峰值时的尺度 σ \sigma σ 值,称为特征尺度。

那么在多尺度的情况下, 同时在空间和尺度上达到最大值(或最小值)的点就是我们所期望的斑点。对于二维图像 I( x , y x, y x,y ),计算图像在不同尺度下的离散拉普拉斯响应值,然后检查位置空间中的每个点;如果该点的拉普拉斯响应值都大小于或小于其他 26 个立方空间领域 ( 9 + 8 + 9 ) (9+8+9) (9+8+9)​ 的值, 那么该点就是被检测到的图像斑点。

3.4 DOG

当然可以!以下是关于 Difference of Gaussian (DoG) 的介绍,使用美元符号( )表示字母,公式用双美元符号( )表示字母,公式用双美元符号( )表示字母,公式用双美元符号($))表示。

3.4.1 DoG 的基本原理

Difference of Gaussian (DoG) 是一种常用的图像处理技术,主要用于边缘检测和特征提取。它通过计算两个不同标准差的高斯函数之间的差异来实现,能够有效地检测图像中的边缘和斑点。DoG 方法的基本思想是通过高斯模糊来平滑图像,然后通过计算不同尺度下的高斯函数的差异来突出图像中的特征。

其数学表达式为:

D ( x , y ) = G ( x , y , σ 1 ) − G ( x , y , σ 2 ) D(x, y) = G(x, y, \sigma_1) - G(x, y, \sigma_2) D(x,y)=G(x,y,σ1)G(x,y,σ2)

其中:

  • D ( x , y ) D(x, y) D(x,y) 是 DoG 的输出。
  • G ( x , y , σ ) G(x, y, \sigma) G(x,y,σ) 是标准差为 σ \sigma σ 的二维高斯函数,定义为:

G ( x , y , σ ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y, \sigma) = \frac{1}{2\pi \sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y,σ)=2πσ21e2σ2x2+y2

  • σ 1 \sigma_1 σ1 σ 2 \sigma_2 σ2 是两个不同的标准差,通常满足 σ 1 < σ 2 \sigma_1 < \sigma_2 σ1<σ2
3.4.2 DoG 的步骤

DoG 的实现通常包括以下几个步骤:

1. 高斯模糊

对输入图像进行两次高斯模糊,使用不同的标准差 σ 1 \sigma_1 σ1 σ 2 \sigma_2 σ2

  1. 计算 G ( x , y , σ 1 ) G(x, y, \sigma_1) G(x,y,σ1)
  2. 计算 G ( x , y , σ 2 ) G(x, y, \sigma_2) G(x,y,σ2)
2. 计算差异

计算两个高斯模糊图像之间的差异:

D ( x , y ) = G ( x , y , σ 1 ) − G ( x , y , σ 2 ) D(x, y) = G(x, y, \sigma_1) - G(x, y, \sigma_2) D(x,y)=G(x,y,σ1)G(x,y,σ2)

3. 处理结果

通过阈值化或其他后处理方法来提取特征点或边缘。

3.4.3 DoG 的特性
  • 边缘检测:DoG 能够有效地检测图像中的边缘,因为边缘处的强度变化会导致 D ( x , y ) D(x, y) D(x,y) 输出的局部极值。
  • 尺度不变性:通过选择不同的 σ \sigma σ 值,DoG 可以检测到不同尺度的特征,这使得它在多尺度特征提取中非常有用。
  • 近似 LoG:DoG 可以被视为对拉普拉斯高斯(LoG)算子的近似,LoG 是一种经典的边缘检测方法。DoG 的计算效率通常高于直接计算 LoG。
3.4.4 应用

DoG 在计算机视觉和图像处理中的应用非常广泛,包括但不限于:

  • 特征点检测:如 SIFT(尺度不变特征变换)算法中使用 DoG 来检测关键点。
  • 边缘检测:用于提取图像中的边缘信息。
  • 图像分割:通过检测图像中的重要特征来辅助图像分割。
3.4.5 总结

Difference of Gaussian (DoG) 是一种有效的图像处理技术,通过计算两个不同标准差的高斯函数之间的差异来实现边缘检测和特征提取。它在计算机视觉领域中具有重要的应用价值,尤其是在特征点检测和多尺度分析中。DoG 的实现简单且计算效率高,使其成为许多图像处理任务中的首选方法之一。

一个与 LOG 滤波核近似的是高斯差分 DOG 滤波核, 它的定义为:

D ( x , y , σ ) = ( G ( x , y , k σ ) − G ( x , y , σ ) ) ∗ I ( x , y ) = L ( x , y , k σ ) − L ( x , y , σ ) D(x, y, \sigma)=(G(x, y, k \sigma)-G(x, y, \sigma)) * I(x, y)=L(x, y, k \sigma)-L(x, y, \sigma) D(x,y,σ)=(G(x,y,)G(x,y,σ))I(x,y)=L(x,y,)L(x,y,σ)

其中 k 为两个相邻尺度间的比例因子。

  • DOG 可以看作为 LOG 的一个近似, 但是它比 LOG 的效率更高。

  • 前面介绍的微分算子在近圆的斑点检测方面效果很好, 但是这些检测算子被限定于只能检测圆形斑点, 而且不能估计斑点的方向, 因为 LOG 算子等都是中心对称的。

  • 如果我们定义一种二维高斯核的变形, 记它在 X 方向与 Y 方向上具有不同的方差, 则这种算子可以用来检测带有方向的斑点。

image-20240902203818700
G ( x , y ) = A ⋅ exp ⁡ ( − [ ( a x 2 + 2 b x y + c y 2 ) ] ) a = cos ⁡ 2 θ 2 σ x 2 + sin ⁡ 2 θ 2 σ v 2 , b = − sin ⁡ 2 θ 2 σ x 2 + sin ⁡ 2 θ 4 σ v 2 , c = sin ⁡ 2 θ 2 σ x 2 + cos ⁡ 2 θ 2 σ y 2 \begin{aligned} &\begin{gathered} G(x, y)=\mathcal{A} \cdot \exp \left(-\left[\left(a x^2+2 b x y+c y^2\right)\right]\right) \\ a=\frac{\cos ^2 \theta}{2 \sigma_x^2}+\frac{\sin ^2 \theta}{2 \sigma_v^2}, b=-\frac{\sin 2 \theta}{2 \sigma_x^2}+\frac{\sin 2 \theta}{4 \sigma_v^2}, c=\frac{\sin ^2 \theta}{2 \sigma_x^2}+\frac{\cos ^2 \theta}{2 \sigma_y^2} \end{gathered}\\ \end{aligned} G(x,y)=Aexp([(ax2+2bxy+cy2)])a=2σx2cos2θ+2σv2sin2θ,b=2σx2sin2θ+4σv2sin2θ,c=2σx2sin2θ+2σy2cos2θ
$ {其中 } \mathrm{A} \text { 是规一性因子。 }$​

3.5 DOH斑点检测

DOH(Difference of Hessian) 是一种用于斑点检测的图像处理技术,主要用于检测图像中的局部极值点,尤其是在特征提取和边缘检测中。DOH 方法基于 Hessian 矩阵的特性,能够有效地识别图像中的斑点和其他重要特征。Difference of Hessian (DOH) 是一种有效的斑点检测方法,通过计算图像的 Hessian 矩阵的差异来识别局部极值点。它具有高效性和多尺度特征检测的优点,但也存在计算复杂度和参数选择等缺点。DOH 在计算机视觉和图像处理领域中被广泛应用,尤其是在特征提取和边缘检测任务中。

3.5.1. 定义

Difference of Hessian (DOH) 是一种通过计算图像的 Hessian 矩阵的差异来检测斑点的方法。Hessian 矩阵是一个二阶导数矩阵,能够捕捉图像强度变化的曲率信息。DOH 通过在不同尺度下计算 Hessian 矩阵的差异,来识别图像中的局部极值点。

3.5.2 数学原理
1. Hessian 矩阵

对于一个二维图像 I ( x , y ) I(x, y) I(x,y),Hessian 矩阵定义为:

H = [ ∂ 2 I ∂ x 2 ∂ 2 I ∂ x ∂ y ∂ 2 I ∂ y ∂ x ∂ 2 I ∂ y 2 ] H = \begin{bmatrix} \frac{\partial^2 I}{\partial x^2} & \frac{\partial^2 I}{\partial x \partial y} \\ \frac{\partial^2 I}{\partial y \partial x} & \frac{\partial^2 I}{\partial y^2} \end{bmatrix} H=[x22Iyx2Ixy2Iy22I]

其中:

  • ∂ 2 I ∂ x 2 \frac{\partial^2 I}{\partial x^2} x22I 是图像在 x x x 方向的二阶导数。
  • ∂ 2 I ∂ y 2 \frac{\partial^2 I}{\partial y^2} y22I 是图像在 y y y 方向的二阶导数。
  • ∂ 2 I ∂ x ∂ y \frac{\partial^2 I}{\partial x \partial y} xy2I 是图像在 x x x y y y 方向的混合二阶导数。
2. Difference of Hessian

DOH 的基本思想是计算不同尺度下的 Hessian 矩阵,并通过差异来检测斑点。具体步骤如下:

  1. 计算 Hessian 矩阵:对于不同的尺度 σ 1 \sigma_1 σ1 σ 2 \sigma_2 σ2,计算 Hessian 矩阵 H ( σ 1 ) H(\sigma_1) H(σ1) H ( σ 2 ) H(\sigma_2) H(σ2)

  2. 计算 DOH:通过计算 Hessian 矩阵的差异来得到 DOH:

D ( x , y ) = H ( σ 1 ) − H ( σ 2 ) D(x, y) = H(\sigma_1) - H(\sigma_2) D(x,y)=H(σ1)H(σ2)

  1. 寻找局部极值:在 DOH 输出中寻找局部极值点,这些点对应于图像中的斑点。
3.5.3 优缺点
1. 优点
  • 高效性:DOH 方法能够快速检测图像中的斑点,适合实时应用。
  • 多尺度特征检测:通过选择不同的尺度参数,DOH 可以检测到不同大小的斑点,具有良好的尺度不变性。
  • 鲁棒性:对噪声和光照变化具有一定的鲁棒性,能够有效地提取图像中的重要特征。
2. 缺点
  • 计算复杂度:尽管 DOH 在特征检测中效率较高,但计算 Hessian 矩阵的二阶导数仍然需要较高的计算成本,尤其是在高分辨率图像中。
  • 参数选择:DOH 的性能依赖于尺度参数的选择,选择不当可能导致特征检测效果不佳。
  • 对平坦区域敏感:在平坦区域,Hessian 矩阵的特征可能不明显,导致斑点检测的效果降低。

3.6 SIFT斑点检测算法

SIFT(尺度不变特征变换,Scale-Invariant Feature Transform) 是一种广泛应用于计算机视觉领域的特征检测和描述算法。该算法由 David Lowe 于 1999 年提出,并在 2004 年进行了进一步的完善。SIFT 特别适用于目标识别、图像拼接、三维建模、手势识别和视频跟踪等任务。

3.6.1 SIFT 算法概述

SIFT 算法的主要目标是从图像中提取出具有尺度和旋转不变性的局部特征点。这些特征点在不同的图像变换(如缩放、旋转、亮度变化等)下能够保持稳定性,并且具有较强的可区分性。SIFT(尺度不变特征变换)是一种强大的特征检测和描述算法,具有尺度和旋转不变性,能够有效地提取图像中的局部特征。尽管存在计算复杂度和专利问题等缺点,但其在目标识别、图像拼接和三维建模等领域的广泛应用证明了其重要性和有效性

3.6.2 SIFT 算法的原理

SIFT 算法主要包括以下几个步骤:

1. 尺度空间极值检测
  • 构建尺度空间:通过对图像进行高斯模糊,生成不同尺度的图像。高斯模糊的公式为:

G ( x , y , σ ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y, \sigma) = \frac{1}{2\pi \sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y,σ)=2πσ21e2σ2x2+y2

  • 差分高斯(DoG):通过计算不同尺度下的高斯图像之间的差异,构建 DoG 图像:

D ( x , y , σ ) = G ( x , y , k σ ) − G ( x , y , σ ) D(x, y, \sigma) = G(x, y, k\sigma) - G(x, y, \sigma) D(x,y,σ)=G(x,y,)G(x,y,σ)

其中 k k k​ 是尺度因子。在大尺度下(k值大)表现的是图像的概貌信息,在小尺度下(k 值小)表现的是图像的细节信息。因此大尺度对应着低分辨率,小尺度对应着高分辨率。(x, y)则表示在 σ 尺度下的图像像素坐标;

  • 寻找极值点:在 DoG 图像中寻找局部极值点,这些点是潜在的具有尺度不变性和旋转不变性特征点。
2. 特征点定位
  • 精确特征点定位:对检测到的特征点进行精确定位,去除低对比度的特征点和边缘响应强的特征点,以提高特征点的稳定性。

通过上一步, 得到了极值点,但这些极值点还仅仅是候选的特征点,因为它们还存在一些不确定的因素。首先是极值点的搜索是在离散空间内进行的,并且这些离散空间还是经过不断的降采样得到的。如果把采样点拟合成曲面后 会发现,原先的极值点并不是真正的极值点,也就是离散空间的极值点并不是连续空间的极值点。在这里, 是需要精确定位特征点的位置和尺度的,也就是要达到亚像素精度,因此必须进行拟合处理。

使用泰勒级数展开式作为拟合函数。如上所述, 极值点是一个三维矢量, 即它包括极值点所在的尺度, 以及它的尺度图像坐标, 即 X = ( x , y , σ ) T \boldsymbol{X}=(x, y, \sigma)^T X=(x,y,σ)T, 因此 需要三维函数的泰勒级数展开式, 设 在 X 0 = ( x 0 , y 0 , σ 0 ) T X_0=\left(x 0, y_0, \sigma_0\right)^T X0=(x0,y0,σ0)T 处进行泰勒级数展开, 则它的矩阵形式为:
f ( [ x y σ ] ) ≈ f ( [ x 0 y 0 σ 0 ] ) + [ ∂ f ∂ x ∂ f ∂ y ∂ f ∂ σ ] ( [ x y σ ] − [ x 0 y 0 σ 0 ] ) + f\left(\left[\begin{array}{l} x \\ y \\ \sigma \end{array}\right]\right) \approx f\left(\left[\begin{array}{l} x_0 \\ y_0 \\ \sigma_0 \end{array}\right]\right)+\left[\begin{array}{lll} \frac{\partial f}{\partial x} & \frac{\partial f}{\partial y} & \frac{\partial f}{\partial \sigma} \end{array}\right]\left(\left[\begin{array}{l} x \\ y \\ \sigma \end{array}\right]-\left[\begin{array}{l} x_0 \\ y_0 \\ \sigma_0 \end{array}\right]\right)+ f xyσ f x0y0σ0 +[xfyfσf] xyσ x0y0σ0 +

1 2 ( [ x y σ ] − [ x 0 y 0 σ 0 ] ) [ ∂ 2 f ∂ x ∂ x ∂ 2 f ∂ x ∂ y ∂ 2 f ∂ x ∂ σ ∂ 2 f ∂ x ∂ y ∂ 2 f ∂ y ∂ y ∂ 2 f ∂ y ∂ σ ∂ 2 f ∂ x ∂ σ ∂ 2 f ∂ y ∂ σ ∂ 2 f ∂ σ ∂ σ ] ( [ x y σ ] − [ x 0 y 0 σ 0 ] ) \frac{1}{2}\left(\left[\begin{array}{lll} x & y & \sigma \end{array}\right]-\left[\begin{array}{lll} x_0 & y_0 & \sigma_0 \end{array}\right]\right)\left[\begin{array}{ccc} \frac{\partial^2 f}{\partial x \partial x} & \frac{\partial^2 f}{\partial x \partial y} & \frac{\partial^2 f}{\partial x \partial \sigma} \\ \frac{\partial^2 f}{\partial x \partial y} & \frac{\partial^2 f}{\partial y \partial y} & \frac{\partial^2 f}{\partial y \partial \sigma} \\ \frac{\partial^2 f}{\partial x \partial \sigma} & \frac{\partial^2 f}{\partial y \partial \sigma} & \frac{\partial^2 f}{\partial \sigma \partial \sigma} \end{array}\right]\left(\left[\begin{array}{l} x \\ y \\ \sigma \end{array}\right]-\left[\begin{array}{l} x_0 \\ y_0 \\ \sigma_0 \end{array}\right]\right) 21([xyσ][x0y0σ0]) xx2fxy2fxσ2fxy2fyy2fyσ2fxσ2fyσ2fσσ2f xyσ x0y0σ0

这是舍去高阶项的形式,而它的矢量表示形式为

f ( X ) = f ( X 0 ) + ∂ f T ∂ X ( X − X 0 ) + 1 2 ( X − X 0 ) T ∂ 2 f ∂ X 2 ( X − X 0 ) f(\boldsymbol{X})=f\left(\boldsymbol{X}_0\right)+\frac{\partial f^T}{\partial \boldsymbol{X}}\left(\boldsymbol{X}-\boldsymbol{X}_0\right)+\frac{1}{2}\left(\boldsymbol{X}-\boldsymbol{X}_0\right)^T \frac{\partial^2 f}{\partial \boldsymbol{X}^2}\left(\boldsymbol{X}-\boldsymbol{X}_0\right) f(X)=f(X0)+XfT(XX0)+21(XX0)TX22f(XX0)

在这里 X 0 \mathbf{X}_0 X0 表示离散空间下的插值中心(在离散空间内也就是采样点)坐标, X \mathbf{X} X 表示拟合后连续空间下的插值点坐标, 设 X ^ = X − X 0 \widehat{\mathbf{X}}=\mathbf{X}-\mathbf{X}_0 X =XX0, 则 X ^ \widehat{\mathbf{X}} X 表示相对于插值中心, 插值后的偏移量。因此上式经过变量变换后, 又可写成

f ( X ^ ) = f ( X 0 ) + ∂ f T ∂ X X ^ + 1 2 X T ∂ 2 f ∂ X 2 X ^ f(\widehat{X})=f\left(\boldsymbol{X}_0\right)+\frac{\partial f^T}{\partial \boldsymbol{X}} \widehat{\boldsymbol{X}}+\frac{1}{2} \boldsymbol{X}^T \frac{\partial^2 f}{\partial \boldsymbol{X}^2} \widehat{\boldsymbol{X}} f(X )=f(X0)+XfTX +21XTX22fX

对上式求导, 得:

∂ f ( X ^ ) ∂ X ^ = ∂ f T ∂ X + 1 2 ( ∂ 2 f ∂ X 2 + ∂ 2 f T ∂ X 2 ) X = ∂ f T ∂ X + ∂ 2 f ∂ X 2 X ^ \frac{\partial f(\widehat{\boldsymbol{X}})}{\partial \widehat{\mathbf{X}}}=\frac{\partial f^T}{\partial \boldsymbol{X}}+\frac{1}{2}\left(\frac{\partial^2 f}{\partial \boldsymbol{X}^2}+\frac{\partial^2 f^T}{\partial \boldsymbol{X}^2}\right) \mathscr{X}=\frac{\partial f^T}{\partial \boldsymbol{X}}+\frac{\partial^2 f}{\partial \boldsymbol{X}^2} \widehat{X} X f(X )=XfT+21(X22f+X22fT)X=XfT+X22fX
让原始式的导数为 0 , 即上式 = 0 =0 =0, 就可得到极值点下的相对于插值中心 X 0 X_0 X0 的偏移量:

X ^ = − ∂ 2 f − 1 ∂ X 2 ∂ f ∂ X \widehat{X}=-\frac{\partial^2 f^{-1}}{\partial X^2} \frac{\partial f}{\partial X} X =X22f1Xf

把公式得到的极值点带入公式 中, 就得到了该极值点下的极值:

f ( X ^ ) = f ( X 0 ) + ∂ f T ∂ X X ^ + 1 2 ( − ∂ 2 f − 1 ∂ X 2 ∂ f ∂ X ) T ∂ 2 f ∂ X 2 ( − ∂ 2 f − 1 ∂ X 2 ∂ f ∂ X ) = f ( X 0 ) + ∂ f T ∂ X X ^ + 1 2 ∂ f T ∂ X ∂ 2 f − T ∂ X 2 ∂ 2 f ∂ X 2 ∂ 2 f − 1 ∂ X 2 ∂ f ∂ X = f ( X 0 ) + ∂ f T ∂ X X ^ + 1 2 ∂ f T ∂ X ∂ 2 f − 1 ∂ X 2 ∂ f ∂ X = f ( X 0 ) + ∂ f T ∂ X X ^ + 1 2 ∂ f T ∂ X ( − X ^ ) = f ( X 0 ) + 1 2 ∂ f T ∂ X X ^ \begin{aligned} f(\widehat{\boldsymbol{X}}) & =f\left(\boldsymbol{X}_0\right)+\frac{\partial f^T}{\partial \boldsymbol{X}} \widehat{\boldsymbol{X}}+\frac{1}{2}\left(-\frac{\partial^2 f^{-1}}{\partial \boldsymbol{X}^2} \frac{\partial f}{\partial \boldsymbol{X}}\right)^T \frac{\partial^2 f}{\partial \boldsymbol{X}^2}\left(-\frac{\partial^2 f^{-1}}{\partial \boldsymbol{X}^2} \frac{\partial f}{\partial \boldsymbol{X}}\right) \\ & =f\left(\boldsymbol{X}_0\right)+\frac{\partial f^T}{\partial \boldsymbol{X}} \widehat{\boldsymbol{X}}+\frac{1}{2} \frac{\partial f^T}{\partial \boldsymbol{X}} \frac{\partial^2 f^{-T}}{\partial X^2} \frac{\partial^2 f}{\partial X^2} \frac{\partial^2 f^{-1}}{\partial X^2} \frac{\partial f}{\partial \boldsymbol{X}} \\ & =f\left(\boldsymbol{X}_0\right)+\frac{\partial f^T}{\partial \boldsymbol{X}} \widehat{\boldsymbol{X}}+\frac{1}{2} \frac{\partial f^T}{\partial \boldsymbol{X}} \frac{\partial^2 f^{-1}}{\partial X^2} \frac{\partial f}{\partial \boldsymbol{X}} \\ & =f\left(\boldsymbol{X}_0\right)+\frac{\partial f^T}{\partial \boldsymbol{X}} \widehat{\boldsymbol{X}}+\frac{1}{2} \frac{\partial f^T}{\partial \boldsymbol{X}}(-\widehat{\boldsymbol{X}}) \\ & =f\left(\boldsymbol{X}_0\right)+\frac{1}{2} \frac{\partial f^T}{\partial \boldsymbol{X}} \widehat{\boldsymbol{X}} \end{aligned} f(X )=f(X0)+XfTX +21(X22f1Xf)TX22f(X22f1Xf)=f(X0)+XfTX +21XfTX22fTX22fX22f1Xf=f(X0)+XfTX +21XfTX22f1Xf=f(X0)+XfTX +21XfT(X )=f(X0)+21XfTX

= f ( X 0 ) + 1 2 f ∂ X X ^ =f\left(\boldsymbol{X}_0\right)+\frac{1}{2} \frac{f}{\partial \boldsymbol{X}} \widehat{\boldsymbol{X}} =f(X0)+21XfX

对于公式 所求得的偏移量如果大于 0.5 (只要 x 、 y \mathrm{x} 、 \mathrm{y} xy σ \sigma σ 任意一个量大于 0.5 ),则表明插值点已偏移到了它的临近的插值中心,所以必须改变当前的位置,使其为它所偏移到的插值中心处, 然后在新的位置上重新进行泰勒级数插值拟合, 直到偏移量小于 0.5 为止( x 、 y \mathrm{x} 、 \mathrm{y} xy σ \sigma σ 都小于 0.5 ),为避免无限次的迭代,需要设置一个最大迭代次数,在达到了迭代次数但仍然没有满足偏移量小于 0.5 的情况下,该极值点就要被剔除掉。另外,如果由上式得到的极值 f ( X ^ ) f(\widehat{\mathbf{X}}) f(X ) 过小,即 ∣ f ( X ^ ) ∣ < 0.03 |f(\widehat{\mathbf{X}})|<0.03 f(X )<0.03 时 (假设图像的灰度值在 0 ∼ 1.0 0 \sim 1.0 01.0 之间),则这样的点易受到噪声的干扰而变得不稳定,所以这些点也应该剔除。而在 opencv 中, 使用的是下列公式来判断其是否为不稳定的极值:

∣ f ( X ^ ) ∣ < T s |f(\widehat{\boldsymbol{X}})|<\frac{T}{s} f(X )<sT

其中 T T T​ 为经验阈值,系统默认初始化为 0.04 。

极值点的求取是在 DoG 尺度图像内进行的,DoG 图像的一个特点就是对图像边缘有很强的响应。一旦特征点落在图像的边缘上, 这些点就是不稳定的点。这是因为一方面图像边缘上的点是很难定位的, 具有定位的歧义性; 另一方面这样的点很容易受到噪声的干扰而变得不稳定。因此需要把这些点找到并剔除掉。它的方法与 Harris 角点检测算法相似, 即一个平坦的 DoG 响应峰值往往在横跨边缘的地方有较大的主曲率, 而在垂直边缘的方向上有较小的主曲率, 主曲率可以通过 2 × 2 2 \times 2 2×2 的 Hessian 矩阵 H \boldsymbol{H} H 求出:

H ( x , y ) = [ D x x ( x , y ) D x y ( x , y ) D x y ( x , y ) D y y ( x , y ) ] \boldsymbol{H}(x, y)=\left[\begin{array}{ll} D_{x x}(x, y) & D_{x y}(x, y) \\ D_{x y}(x, y) & D_{y y}(x, y) \end{array}\right] H(x,y)=[Dxx(x,y)Dxy(x,y)Dxy(x,y)Dyy(x,y)]

其中 D x x ( x , y ) 、 D y y ( x , y ) D_{x x}(x, y) 、 D_{y y}(x, y) Dxx(x,y)Dyy(x,y) D x y ( x , y ) D_{x y}(x, y) Dxy(x,y) 分别表示对 DoG 图像中的像素在 x x x 轴方向和 y y y 轴方向上求二阶偏导和二阶混合偏导。在这里, 不需要求具体的矩阵 H \boldsymbol{H} H 的两个特征值—— α \alpha α β \beta β, 而只要知道两个特征值的比例就可以知道该像素点的主曲率。

矩阵 H \boldsymbol{H} H 的直迹和行列式分别为:

Tr ⁡ ( H ) = D x x + D y y = α + β Det ⁡ ( H ) = D x x D y y − ( D x y ) 2 = α β \begin{aligned} & \operatorname{Tr}(\boldsymbol{H})=D_{x x}+D_{y y}=\alpha+\beta \\ & \operatorname{Det}(\boldsymbol{H})=D_{x x} D_{y y}-\left(D_{x y}\right)^2=\alpha \beta \end{aligned} Tr(H)=Dxx+Dyy=α+βDet(H)=DxxDyy(Dxy)2=αβ

首先剔除掉那些行列式为负数的点, 即 Det ⁡ ( H ) < 0 \operatorname{Det}(\boldsymbol{H})<0 Det(H)<0, 因为如果像素的曲率有不同的符号, 则该点肯定不是特征点。设 α > β \alpha>\beta α>β, 并且 α = γ β \alpha=\gamma \beta α=γβ, 其中 γ > 1 \gamma>1 γ>1, 则

Tr ⁡ ( H ) 2 Det ⁡ ( H ) = ( α + β ) 2 α β = ( γ β + β ) 2 γ β 2 = ( γ + 1 ) 2 γ \frac{\operatorname{Tr}(\boldsymbol{H})^2}{\operatorname{Det}(\boldsymbol{H})}=\frac{(\alpha+\beta)^2}{\alpha \beta}=\frac{(\gamma \beta+\beta)^2}{\gamma \beta^2}=\frac{(\gamma+1)^2}{\gamma} Det(H)Tr(H)2=αβ(α+β)2=γβ2(γβ+β)2=γ(γ+1)2

上式的结果只与两个特征值的比例有关, 而与具体的特征值无关。 知道, 当某个像素的 H \boldsymbol{H} H 矩阵的两个特征值相差越大, 即 γ \gamma γ 很大, 则该像素越有可能是边缘。当两个特征值相等时, 等式的值最小, 随着 γ \gamma γ 的增加, 等式的值也增加。所以, 要想检查主曲率的比值是否小于某一阈值 γ \gamma γ, 只要检查下式是否成立即可:

Tr ⁡ ( H ) Det ⁡ ( H ) < ( γ + 1 ) 2 γ \frac{\operatorname{Tr}(\boldsymbol{H})}{\operatorname{Det}(\boldsymbol{H})}<\frac{(\gamma+1)^2}{\gamma} Det(H)Tr(H)<γ(γ+1)2
对于不满足上式的极值点就不是特征点, 因此应该把它们剔除掉。Lowe 给出 γ \gamma γ 为 10 。在上面的运算中, 需要用到有限差分法求偏导, 在这里 给出具体的公式。为方便起见, 以图像为例只给出二元函数的实例。与二元函数类似, 三元函数的偏导可以很容易的得到。

f ( i , j ) f(i, j) f(i,j) y y y 轴为 i 、 x i 、 x ix 轴为 j j j 的图像像素值, 则在 ( i , j ) (i, j) (i,j) 点处的一阶、二阶及二阶混合偏导为:

∂ f ∂ x = f ( i , j + 1 ) − f ( i , j − 1 ) 2 h , ∂ f ∂ y = f ( i + 1 , j ) − f ( i − 1 , j ) 2 h ∂ 2 f ∂ x 2 = f ( i , j + 1 ) + f ( i , j − 1 ) − 2 f ( i , j ) h 2 , ∂ 2 f ∂ y 2 = f ( i + 1 , j ) + f ( i − 1 , j ) − 2 f ( i , j ) h 2 ∂ 2 f ∂ x ∂ y = f ( i − 1 , j − 1 ) + f ( i + 1 , j + 1 ) − f ( i − 1 , j + 1 ) − f ( i + 1 , j − 1 ) 4 h 2 \begin{gathered} \frac{\partial f}{\partial x}=\frac{f(i, j+1)-f(i, j-1)}{2 h}, \quad \frac{\partial f}{\partial y}=\frac{f(i+1, j)-f(i-1, j)}{2 h} \\ \frac{\partial^2 f}{\partial x^2}=\frac{f(i, j+1)+f(i, j-1)-2 f(i, j)}{h^2}, \quad \frac{\partial^2 f}{\partial y^2}=\frac{f(i+1, j)+f(i-1, j)-2 f(i, j)}{h^2} \\ \frac{\partial^2 f}{\partial x \partial y}=\frac{f(i-1, j-1)+f(i+1, j+1)-f(i-1, j+1)-f(i+1, j-1)}{4 h^2} \end{gathered} xf=2hf(i,j+1)f(i,j1),yf=2hf(i+1,j)f(i1,j)x22f=h2f(i,j+1)+f(i,j1)2f(i,j),y22f=h2f(i+1,j)+f(i1,j)2f(i,j)xy2f=4h2f(i1,j1)+f(i+1,j+1)f(i1,j+1)f(i+1,j1)

由于在图像中, 相邻像素之间的间隔都是 1 , 所以这里的 h = 1 h=1 h=1

2.3. 方向分配确定
  • 计算主方向:根据特征点周围的梯度方向直方图,为每个特征点分配一个或多个主方向,以确保特征描述符的旋转不变性。
2.4. 特征描述
  • 构建特征描述符:在特征点的邻域内计算梯度幅度和方向,生成特征描述符。通常使用 4 × 4 4 \times 4 4×4 的网格,将每个网格的梯度方向直方图进行归一化,形成一个 128 128 128 维的特征向量。
3.6.3 SIFT 算法的推导

SIFT 算法的推导主要集中在以下几个方面:

  • 尺度空间理论:通过高斯模糊和 DoG 计算,构建尺度空间以检测特征点。
  • 特征点的稳定性:通过精确定位和去除低对比度特征点,确保特征点的稳定性。
  • 旋转不变性:通过计算主方向,使得特征描述符在旋转时保持不变。
  • 特征描述符的构建:通过计算局部区域的梯度信息,生成具有较强可区分性的特征描述符。
3.6.4. SIFT 算法的优缺点
1. 优点
  • 尺度不变性:SIFT 特征能够在不同尺度下保持稳定,适用于图像的缩放。
  • 旋转不变性:通过主方向的分配,SIFT 特征对图像的旋转具有不变性。
  • 鲁棒性:对光照变化、噪声和视角变化具有较强的鲁棒性,能够有效地提取特征。
  • 可区分性:SIFT 特征具有较强的可区分性,即使在低概率的不匹配情况下也能正确识别目标。
2. 缺点
  • 计算复杂度:SIFT 算法的计算复杂度较高,尤其是在特征点检测和描述过程中,可能导致处理速度较慢。
  • 专利问题:SIFT 算法曾申请专利,限制了其在某些商业应用中的使用。
  • 对平坦区域敏感:在平坦区域,特征点的检测可能不明显,导致特征提取效果降低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低通滤波函数实现

在做的项目中需要通过PWM驱动IGBT来控制负载功率&#xff0c;如果PWM频率很高&#xff0c;电流采样基本不受影响。但是IGBT的开关频率高会引起更多的开关损耗&#xff0c;所以降低了PWM频率&#xff0c;但此时电流会是接近于PWM信号的波形&#xff0c;无法准确采集。所以硬件上…

读取、写入、生成txt文本文档详解——C#学习笔记

一、4中写入文本的方式&#xff1a; //①表示清空 txt StreamWriter mytxt1 new StreamWriter("D:\\1清空.txt"); string t1 ""; mytxt1.Write(t1); mytxt1.Close(); //②表示向txt写入文本 StreamWriter mytxt2 new StreamWriter("D:…

用HTML写一个动态的的电子相册实战详细案例

效果展示&#xff1a;&#x1f447; 详细代码&#xff1a; 1、新建一个.html文件 2、然后将下面的内容复制到 动态相册.html里面 <!DOCTYPE html> <html> <head><title>图片轮播效果</title><style>.container {position: relative;wi…

Pyspark下操作dataframe方法(1)

文章目录 Pyspark dataframe创建DataFrame使用Row对象使用元组与scheam使用字典与scheam注意 agg 聚合操作alias 设置别名字段设置别名设置dataframe别名 cache 缓存checkpoint RDD持久化到外部存储coalesce 设置dataframe分区数量collect 拉去数据columns 获取dataframe列 Pys…

【如何用远程连接到ubuntu服务器上的redis】

文章目录 ubuntu上安装redis常用命令 远程连接测试在另一台PC上进行远程访问 ubuntu上安装redis Redis 5.0 被包含在默认的 Ubuntu 20.04 软件源中。想要安装它&#xff0c;以 root 或者其他 sudo 身份运行下面的命令&#xff1a; sudo apt update //更新apt sudo apt inst…

全视通精彩亮相宁夏养老服务业博览会,助力西北地区养老产业高质量发展

据悉&#xff0c;今年4月&#xff0c;宁夏被列入48个全国基本养老服务综合平台试点地区&#xff0c;是全域申报成功的8个省&#xff08;直辖市&#xff09;之一&#xff0c;也是西北唯一的入选省份。5月&#xff0c;中卫市成功入选2024年居家和社区基本养老服务提升行动项目地区…

多智能体强化学习:citylearn城市建筑能量优化和需求响应

今天分享一个用于能量优化的强化学习框架&#xff0c;citylearn 代码量非常庞大&#xff0c;我都不敢看&#xff0c;看也看不完&#xff0c;不花一定的时间难以搞懂它的原理。 CityLearn&#xff08;CL&#xff09;环境是一个类似 OpenAI Gym 的环境&#xff0c;它通过控制不…

网络安全服务基础Windows--第10节-FTP主动与被动模式

概述 将某台计算机中的⽂件通过⽹络传送到可能相距很远的另⼀台计算机中&#xff0c;是⼀项基本的⽹络应⽤&#xff0c;即⽂件传送。 ⽂件传送协议FTP &#xff08;File Transfer Protocol&#xff09;是因特⽹上使⽤得最⼴泛的⽂件传送协议。 FTP是⼀个⽼早的⽹络协议&…

图形几何-如何将凹多边形分解成若干个凸多边形

凹多边形的概念 凹多边形是指至少有一个内角大于180度的多边形。与之相对&#xff0c;凸多边形的所有内角均小于或等于180度&#xff0c;且任意两点之间的连线都完全位于多边形内部。将凹多边形分解成若干个凸多边形是计算几何中的一个重要问题。 分解原理 将凹多边形分解为凸…

Python【3】乌七八糟

目录 if __name__ "__main__ 模块名————__name__ 装饰器 参数的优化——可以接受任何函数 需要添加自定义参数——再套一层 语法糖——好甜&#xff01; 类init self if __name__ "__main__ 在Python中&#xff0c;if __name__ "__main__"…

再谈全排列

题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 每次做全排列的题目&#xff0c;我都要孕育好一阵子&#xff0c;到底怎么去思考这个问题呢&#xff1f; 首先&#xff0c;我觉得最好的方式就是画个树。 画了树之后&#xff0c;你就知道&#xff0c;这个问题&…

鸿蒙轻内核M核源码分析系列五 时间管理

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 持续更新中…… 在鸿蒙轻内核源码分析上一篇文章中&#xff0c;我们剖析了中断的源码&#xff0c;简单提到了Tick中断。本文会继续分析Tick和时间相关的源…

多所高校拟撤销地理、测绘、建筑等相关专业!网友:游了很久,发现没有岸!

近日&#xff0c;各大高校频频传来专业“下线”的消息。多所高校拟撤销地理、测绘等相关专业。对此很多网友破防了&#xff0c;表示&#xff1a;还没毕业&#xff0c;专业没了&#xff1f; 更有城乡规划的网友表示&#xff1a;自己已经成为怨种毕业生&#xff0c;游了很久&…

公司数字化转型的目的是什么?

不同行业公司&#xff0c;其数字化转型的目的也不一样。下面我列举几个行业&#xff0c;给大家讲讲其数字化转型的真正目的。 制造数字化转型 制造业来说&#xff0c;数字化转型的本质是通过新一代信息技术与制造技术的融合&#xff0c;实现以数据为核心的资源要素变革、以网络…

【8.28更新】Win10 22H2 正式版:19045.4842镜像下载!

今日系统之家小编给大家带来2024年最新的Windows10 22H2正式版系统&#xff0c;该版本系统基于微软官方Windows 10 22H2 19045.4842 64位 专业版进行离线制作与优化&#xff0c;系统安全无任何病毒残留&#xff0c;且兼容性出色&#xff0c;能完美兼容新老机型。安装后&#xf…

一大波华为“黑”正在赶来

文&#xff5c;琥珀食酒社 作者 | 积溪 不管你信不信 我都敢肯定的告诉你 又一波黑华为的浪潮 将在下周到来 因为下周二 也就是9月10号 华为将发布一款划时代的产品 华为MateXT非凡大师 三折叠屏手机 就我现在得到的情况 这款手机最大的特点 就是先进 余承东都说…

SRT协议分析以及收拉流测试

文章目录 介绍协议概述协议常用URL格式协议工作流程协议包格式数据包和控制包数据包控制包ACKNACK 开源协议栈libSRTFFmpegVLC Media PlayerSRT AllianceSRS 测试使用ffmpegsrs推流端接收端播放端srs配置 使用 libSRT发送端接收端 介绍 SRT&#xff08;Secure Reliable Transpo…

力扣: 有效的字母异位词

文章目录 需求数组map结尾 需求 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 字母异位词 是通过重新排列不同单词或短语的字母而形成的单词或短语&#xff0c;通常只使用所有原始字母一次。 示例 1: 输入: s “anagram”, t “nagaram…

9、类和对象

9.1 封装 9.1.1 封装的例子 class Student { public:string name;int age; public:void setName(string name_) {name name_;} }; int main() {Student s1;s1.setName("zhangsan");return 0; }类中的行为都叫做成员&#xff0c;例如成员属性&#xff0c;成员变量&…

磁吸轨道灯的优缺点深度解析:为你的家居照明提供新选择

在现代家居装修中&#xff0c;照明设计已成为提升居住品质的重要一环。磁吸轨道灯作为一种新兴的照明解决方案&#xff0c;以其独特的灵活性和美观性逐渐受到市场的青睐。然而&#xff0c;任何产品都有其两面性&#xff0c;磁吸轨道灯也不例外。本文将深入探讨磁吸轨道灯的优缺…