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

文章目录

    • 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.xdnf.cn/news/1523105.html

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

相关文章

Java中调用第三方接口

文章目录 0、测试接口1、JDK的HttpURLConnection2、Apache的HttpClient3、SpringBoot的RestTemplate3.1 GET3.2 POST 4、SpringCloud的Feign5、Hutool的HttpUtil6、失败后重试 0、测试接口 写两个测试接口&#xff0c;一个GET&#xff0c;一个POST RestController RequestMap…

关于IDEA的快捷键不能使用的原因

有时候IDEA的快捷键用不了&#xff0c;这时应该是快捷键发生冲突了&#xff0c;重新设置一下即可。以批量修改变量名称的shift f6为例&#xff08;我的这个快捷键用不了&#xff09;&#xff1a; 初始的rename的快捷键为shift f6 这个快捷键是冲突的&#xff0c;所以我们需要…

Centos7安装FFmpeg详细步骤(已验证成功)

最近我们需要使用FFmpeg来合成视频功能&#xff0c;这就需要用到服务器必须安装FFmpeg了。 FFmpeg 是一款功能强大的跨平台命令行工具&#xff0c;可以处理各种音频和视频文件&#xff0c;包括转换视频和音频格式、剪辑、合并视频和音频、提取音频、添加字幕、添加水印、调整视…

【Linux跬步积累】—— 环境变量、程序地址空间、进程地址空间、Linux2.6内核进程调度队列

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;Linux跬步积累 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0…

什么?!新版 Node.js V22.5 自带 SQLite 模块啦

前言 2024年7月&#xff0c;Node.js V22.5.0 版本发布&#xff0c;自带了 SQLite 模块&#xff0c;意味着开发者可以直接在程序中使用 SQLite 数据库&#xff0c;而无需引入第三方库&#x1f44d;。 话不多说&#xff0c;感觉来体验一波✈。 安装/升级 我现在用的是21.4.0版…

Trm理论 3(ELMo)

LSTM模型 如图&#xff0c;LSTM模型是rnn模型的改良版&#xff0c;通过ft来选择性的保留上一次得到的信息 ELMo模型&#xff08;双向LSTM&#xff09; ELMo模型是对word2vec的改良&#xff0c;改良了word2vec的二义性 对比上下两图&#xff0c;可以发现&#xff0c;WE对预测…

【qt】qss使用

1.按钮设置颜色 ui->pushButton->setStyleSheet("QPushButton { color : red;}");也可以通过rgb来设置 ff表示红色拉满&#xff0c;gb为0当然是红色 这只是针对pushbutton对象的控件设置的&#xff0c;如果我想设置所有的按钮空间都是一个颜色 这是通过设置界…

【无标题】【Datawhale X 李宏毅苹果书 AI夏令营】批量归一化

1、批量归一化的作用 批量归一化&#xff08;Batch Normalization&#xff0c;BN&#xff09;的把误差曲面变得平滑&#xff0c;使训练能够得到快速收敛&#xff1b; 训练过程的优化&#xff1a;使用自适应学习率等比较进阶的优化训练方法&#xff1b; 训练对象的优化&#xf…

Linux 服务器下非root用户安装CUDA完整流程(多次踩雷经验总结)

参考博客&#xff1a; linux下安装cuda和cudnn&#xff08;非root权限&#xff09;_cuda下载安装 远程服务器 linux-CSDN博客 Linux下非root用户安装CUDA_linux下cuda-toolkit-archive-CSDN博客 非root用户安装cuda10.1&#xff0c;以及CUDA不同版本间切换_非root用户.run文…

android kotlin基础复习—if when

1、新建kt并运行 新建文件kt 运行文件kt 2、kotlin语句 if when的使用 var x 5val y 9if (x in 1..8) {println("x 在区间内")} 说明&#xff1a; var&#xff1a;定义变量 val定义常量。 代码中会看到那个<&#xff0c;也就是说包括1&#xff0c;8。 3、输…

glsl着色器学习(二)

书接上文&#xff0c;第一篇文章已经将顶点着色器和片段着色器的内容编写好了&#xff0c;这篇文章就创建着色器并编译 创建顶点着色器对象 const vertexShader gl.createShader(gl.VERTEEX_SHADER); gl.shaderSource(vertexShader,vsGLSL); gl.compileShader(vertexShader …

J.U.C Review - 阻塞队列原理/源码分析

文章目录 阻塞队列的由来BlockingQueue的操作方法BlockingQueue的实现类ArrayBlockingQueueLinkedBlockingQueueDelayQueuePriorityBlockingQueueSynchronousQueue 阻塞队列原理深入分析1. 构造器和监视器初始化2. put操作的实现3. take操作的实现4. 注意事项小结 线程池中的阻…

qmt量化交易策略小白学习笔记第57期【qmt编程之期权数据--获取指定期权品种的详细信息--内置Python】

qmt编程之获取期权数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 获取指定期权品种的详细信息 该函数能帮助用户获取指定期权品种的详细信息&#xff0c;如期权代码、市场、涨跌停价、期…

c++返回一个pair类型

前言 Under the new standard we can list initialize the return value. 代码测试 #include<iostream> #include<string> #include<vector>std::pair<std::string, int> process(std::vector<std::string>& v) {if (!v.empty()){return …

窖藏之秘:白酒在窖藏过程中经历了哪些变化?

在中华五千年的文明史中&#xff0c;白酒一直扮演着举足轻重的角色。它不仅是文人墨客笔下的灵感源泉&#xff0c;更是亲朋好友间传递情感的桥梁。在众多白酒品牌中&#xff0c;豪迈白酒&#xff08;HOMANLISM&#xff09;以其不同的酿造工艺和窖藏技艺&#xff0c;成为了酒中翘…

【前端面试】设计循环双端队列javascript

题目 https://leetcode.cn/problems/design-circular-deque/description/ 存储循环队列的向量空间是循环的&#xff0c;用通俗的话来讲&#xff0c;就是我们在做next或者prev操作时&#xff0c;不会发生溢出 取模、或者直接判断是否为0/size返回一个值。 数组实现 用函数来…

Python文件自动分类

假如这样的步骤全部手动做下来耗时是6秒&#xff0c;在文件数量不多的情况下&#xff0c;比如10个文件&#xff0c;总共耗时一分钟其实是能够接受的。 但当文件数量特别多时&#xff0c;或者这个操作特别频繁每天都要做十几二十次时&#xff0c;手动操作就会变得耗时又繁琐…

【Agent】Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents

1、问题背景 传统的训练Agent方法是在静态数据集上进行监督预训练&#xff0c;这种方式对于要求Agent能够自主的在动态环境中可进行复杂决策的能力存在不足。例如&#xff0c;要求Agent在web导航等动态设置中执行复杂决策。 现有的方式是用高质量数据进行微调来增强Agent在动…

SpringBoot3.x+MyBatisPlus+druid多数据源配置

1 引言 本章主要介绍SpringBoot3.x多数据源配置&#xff0c;以及在此基础上配置分页拦截&#xff0c;自动填充功等功能&#xff0c;源码链接在文章最后。下面列出几个重要文件进行介绍。 2 项目结构 整体项目结构如下&#xff0c;主要介绍配置文件和配置类。 3 主要代码 …

Android Telephony总结

1、Telephony 业务介绍 Android telephony涉及较多模块 1.1、STK业务介绍 1.1.1、STK域选 1.1.2、是否支持STK Telephon STK-CSDN博客 1.1.3、STK应用的安装卸载 1.2、SS补充业务 1.3、通话业务 1.3.1、紧急号码 ECC 号码总结_ecc号码-CSDN博客 1.4、SMS 1.4.1 短信发送方式…