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

news2024/11/15 1:27:51

文章目录

    • 2. 角点检测
      • 2.1 角点概述
        • 2.1.1 概念
        • 2.1.2 角点的特点
        • 2.1.3 角点的检测
        • 2.1.4 角点的应用
      • 2.2 角点检测算法
        • 2.2.1 Harris 角点
          • 2.2.1.1 Harris 角点介绍
          • 2.2.1.2 Harris计算流程
            • 1. 图像梯度
            • 2. 结构张量
            • 3. Harris响应函数
            • 4. 非极大值抑制
            • 5. 阈值化
          • 2.2.1.3 Harris性质
            • 1. 旋转不变性
            • 2. 对光照变化的鲁棒性
            • 3. 局部特征的敏感性
            • 4. 非极大值抑制的有效性
            • 5. 参数k的依赖性
            • 5. 不具有尺度不变性
          • 2.2.1.4 多尺度Harris角点
            • 1.多尺度Harris角点检测的计算流程
            • 2. 多尺度Harris角点检测的优点
        • 2.2.2 Shi-Tomasi算法
        • 2.2.3 **FAST** 算法原理
          • 2.2.3.1. 计算原理和步骤
            • 1. **基本思想**
            • 2. **圆形邻域**
            • 3. **强度比较**
            • 4. **角点判定**
            • 5. **非极大值抑制**
            • 6. **加速优化**
          • 2.2.3.2 缺点与不足
            • 1. **对噪声敏感**
            • 2. **光照变化的鲁棒性差**
            • 3. **缺乏尺度不变性**
            • 4. **无法区分边缘和角点**
            • 5. **对角点的重复性检测**
            • 6. **参数选择的影响**
        • 2.2.4 FAST-ER算法
          • 2.2.4.1 计算原理和步骤
            • 1. 自适应阈值
            • 2. 增强的强度比较
            • 3. 多尺度处理
            • 4. 特征选择的增强
            • 5. 非极大值抑制
    • 参考

2. 角点检测

2.1 角点概述

2.1.1 概念
  • 角点是图像处理和计算机视觉中的一个重要概念,通常指的是图像中具有显著变化的点,特别是在物体的边缘或轮廓处。具体来说,角点是指在图像中,局部区域的灰度值变化非常明显的点,通常表现为两个或多个边缘的交汇处。

  • 在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。下面有两幅不

    同视角的图像,通过找出对应的角点进行匹配。

角点定义有如下:

  • 角点可以是两个边缘的角点;
  • 角点是邻域内具有两个主方向的特征点;
2.1.2 角点的特点

在这里插入图片描述

  1. 局部特征:角点是局部特征,能够反映图像中重要的结构信息。
  2. 不变性:角点通常对旋转、缩放和光照变化具有一定的不变性,这使得它们在特征匹配和物体识别中非常有用。
  3. 信息丰富:角点通常包含丰富的几何信息,能够帮助识别物体的形状和位置。
2.1.3 角点的检测

常用的角点检测算法包括:

  • Harris角点检测:通过计算图像的自相关矩阵,寻找局部区域的最大响应来检测角点。
  • Shi-Tomasi角点检测:是Harris角点检测的改进版本,选择响应值较高的点作为角点。
  • FAST(Features from Accelerated Segment Test):一种快速的角点检测算法,适用于实时应用。
2.1.4 角点的应用

角点在许多计算机视觉任务中发挥着重要作用,包括:

  • 特征匹配:在不同图像之间找到相同的角点,以实现图像配准或拼接。
  • 物体识别:通过角点信息识别和分类物体。
  • 运动跟踪:在视频序列中跟踪物体的运动。

2.2 角点检测算法

2.2.1 Harris 角点
2.2.1.1 Harris 角点介绍
  • 人眼对角点的识别通常是在局部小区域或小窗口内进行的。具体来说,当特征窗口在图像中移动时,如果窗口内区域的灰度发生了显著变化,则可以认为该窗口内存在角点。这表明在该位置,图像的结构发生了明显的变化。

  • 如果窗口在各个方向上移动时,窗口内的灰度值保持不变,则可以判断该区域不存在角点。

  • 如果窗口在某一个方向上移动时,灰度发生了较大的变化,而在其他方向上没有变化,那么该区域可能表示一条直线的线段。

总之,角点的检测依赖于局部区域内灰度变化的特征,通过分析这些变化,可以有效地识别出图像中的重要结构信息。

image-20240902141621072

对于图像 I ( x , y ) \mathrm{I}(\mathrm{x}, \mathrm{y}) I(x,y), 当在点 ( x , y ) (\mathrm{x}, \mathrm{y}) (x,y) 处平移 ( Δ x , Δ y ) (\Delta \mathrm{x}, \Delta \mathrm{y}) (Δx,Δy) 后的自相似性, 可以通过自相关函数给出:

c ( x , y ; Δ x , Δ y ) = ∑ ( u , v ) ∈ W ( x , y ) w ( u , v ) ( I ( u , v ) − I ( u + Δ x , v + Δ y ) ) 2 c(x, y ; \Delta x, \Delta y)=\sum_{(u, v) \in W(x, y)} w(u, v)(I(u, v)-I(u+\Delta x, v+\Delta y))^2 c(x,y;Δx,Δy)=(u,v)W(x,y)w(u,v)(I(u,v)I(u+Δx,v+Δy))2

其中, W ( x , y ) W(x, y) W(x,y) 是以点 ( x , y ) (x, y) (x,y) 为中心的窗口, w ( u , v ) w(u, v) w(u,v) 为加权函数,它既可是常数,也可以是高斯加权函数。[u,v]是窗口的偏移量; ( x , y ) (\mathrm{x}, \mathrm{y}) (x,y) 是窗口内所对应的像素坐标位置,窗口有多大,就有多少个位置; w ( x , y ) w(x, y) w(x,y) 是窗口函数

  • 窗口内的所有像素所对应的 w 权重系数均为 1 ,但有时候,会将 w ( x , y ) \mathrm{w}(\mathrm{x}, \mathrm{y}) w(x,y) 函数设定为以窗口中心为原点的二元正态分布。
  • 如果窗口中心点是角点时, 移动前与移动后, 该点的灰度变化应该最为剧烈,所以该点权重系数可以设定大些,表示窗口移动时,该点在灰度变化贡献较大;而离窗口中心(角点)较远的点,这些点的灰度变化几近平缓,这些点的权重系数,可以设定小点,以示该点对灰度变化贡献较小。

在这里插入图片描述

根据泰勒展开, 对图像 } I ( x , y ) \mathrm{I}(\mathrm{x}, \mathrm{y}) I(x,y) 在平移 ( Δ x , Δ y ) (\Delta \mathrm{x}, \Delta \mathrm{y}) (Δx,Δy){ 后进行一阶近似:
I ( u + Δ x , v + Δ y ) = I ( u , v ) + I x ( u , v ) Δ x + I y ( u , v ) Δ y + O ( Δ x 2 , Δ y 2 ) ≈ I ( u , v ) + I x ( u , v ) Δ x + I y ( u , v ) Δ y \begin{aligned} &I(u+\Delta x, v+\Delta y)=I(u, v)+I_x(u, v) \Delta x+I_y(u, v) \Delta y+O\left(\Delta x^2, \Delta y^2\right) \approx I(u, v)+I_x(u, v) \Delta x+I_y(u, v) \Delta y \end{aligned} I(u+Δx,v+Δy)=I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy+O(Δx2,Δy2)I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy

其中, I x , I y \mathrm{Ix}, \mathrm{Iy} Ix,Iy 是图像 I ( x , y ) \mathrm{I}(\mathrm{x}, \mathrm{y}) I(x,y) 的偏导数, 这样的话, 自相关函数则可以简化为:

c ( x , y ; Δ x , Δ y ) ≈ ∑ w ( I x ( u , v ) Δ x + I y ( u , v ) Δ y ) 2 = [ Δ x , Δ y ] M ( x , y ) [ Δ x Δ y ] c(x, y ; \Delta x, \Delta y) \approx \sum_w\left(I_x(u, v) \Delta x+I_y(u, v) \Delta y\right)^2=[\Delta x, \Delta y] M(x, y)\left[\begin{array}{l} \Delta x \\ \Delta y \end{array}\right] c(x,y;Δx,Δy)w(Ix(u,v)Δx+Iy(u,v)Δy)2=[Δx,Δy]M(x,y)[ΔxΔy]

具体的简化过程如下:

∑ [ I ( x + u , y + v ) − I ( x , y ) ] 2 ≈ ∑ [ I ( x , y ) + u I x + v l y − I ( x , y ) ] 2 = ∑ u u 2 l x 2 + 2 u v l x l y + v 2 l y 2 = ∑ [ u v ] [ l 1 2 l x l y l x l y l y 2 ] [ u v ] = [ u v ] ( ∑ ( l x 2 l 1 l y l x l y l y 2 ] ) [ u v ] \begin{aligned} & \sum[I(x+u, y+v)-I(x, y)]^2 \\ \approx & \sum\left[I(x, y)+u I_x+v l_y-I(x, y)\right]^2 \\ = & \sum u^{u^2 l_x^2}+2 u v l_x l_y+v^2 l_y^2 \\ = & \sum\left[\begin{array}{ll} u & v \end{array}\right]\left[\begin{array}{cc} l_1^2 & l_x l_y \\ l_x l_y & l_y^2 \end{array}\right]\left[\begin{array}{l} u \\ v \end{array}\right] \\ = & {\left[\begin{array}{ll} u & v \end{array}\right]\left(\sum\left(\begin{array}{cc} l_x^2 & l_1 l_y \\ l_x l_y & l_y^2 \end{array}\right]\right)\left[\begin{array}{l} u \\ v \end{array}\right] } \end{aligned} ===[I(x+u,y+v)I(x,y)]2[I(x,y)+uIx+vlyI(x,y)]2uu2lx2+2uvlxly+v2ly2[uv][l12lxlylxlyly2][uv][uv]((lx2lxlyl1lyly2])[uv]

其中,

M ( x , y ) = ∑ w [ I x ( x , y ) 2 I x ( x , y ) I y ( x , y ) I x ( x , y ) I y ( x , y ) I y ( x , y ) 2 ] = [ ∑ w I x ( x , y ) 2 ∑ w I x ( x , y ) I y ( x , y ) ∑ w I x ( x , y ) I y ( x , y ) ∑ w I y ( x , y ) 2 ] = [ A C C B ] M(x, y)=\sum_w\left[\begin{array}{cc} I_x(x, y)^2 & I_x(x, y) I_y(x, y) \\ I_x(x, y) I_y(x, y) & I_y(x, y)^2 \end{array}\right]=\left[\begin{array}{cc} \sum_w I_x(x, y)^2 & \sum_w I_x(x, y) I_y(x, y) \\ \sum_w I_x(x, y) I_y(x, y) & \sum_w I_y(x, y)^2 \end{array}\right]=\left[\begin{array}{ll} A & C \\ C & B \end{array}\right] M(x,y)=w[Ix(x,y)2Ix(x,y)Iy(x,y)Ix(x,y)Iy(x,y)Iy(x,y)2]=[wIx(x,y)2wIx(x,y)Iy(x,y)wIx(x,y)Iy(x,y)wIy(x,y)2]=[ACCB]

也就是说图像 I ( x , y ) \mathrm{I}(\mathrm{x}, \mathrm{y}) I(x,y) 在点 ( x , y ) (\mathrm{x}, \mathrm{y}) (x,y) 处平移 ( Δ x , Δ y ) (\Delta \mathrm{x}, \Delta \mathrm{y}) (Δx,Δy) 后的自相关函数可以近似为二项函数:

c ( x , y ; Δ x , Δ y ) ≈ A Δ x 2 + 2 C Δ x Δ y + B Δ y 2 c(x, y ; \Delta x, \Delta y) \approx A \Delta x^2+2 C \Delta x \Delta y+B \Delta y^2 c(x,y;Δx,Δy)AΔx2+2CΔxΔy+BΔy2

其中,

A = ∑ w I x 2 , B = ∑ w I y 2 , C = ∑ w I x I y A=\sum_w I_x^2, B=\sum_w I_y^2, C=\sum_w I_x I_y A=wIx2,B=wIy2,C=wIxIy

二次项函数本质上就是一个椭圆函数。粗圆的扁率和尺寸是由 M ( x , y ) \mathrm{M}(\mathrm{x}, \mathrm{y}) M(x,y) 的特征值 λ 1 、 λ 2 \lambda_1 、 \lambda_2 λ1λ2决定的,椭贺的方向是由 M ( x , y ) \mathrm{M}(\mathrm{x}, \mathrm{y}) M(x,y) 的特征矢量决定的,如下图所示,椭圆方程为:

[ Δ x , Δ y ] M ( x , y ) [ Δ x Δ y ] = 1 [\Delta x, \Delta y] M(x, y)\left[\begin{array}{l} \Delta x \\ \Delta y \end{array}\right]=1 [Δx,Δy]M(x,y)[ΔxΔy]=1
在这里插入图片描述

椭圆函数特征值与图像中的角点、直线(边缘)和平面之间的关系如下图所示。共可分

为三种情况:

  • 图像中的直线。一个特征值大,另一个特征值小,λ1≫λ2 或 λ2≫λ1。自相关函数值在

某一方向上大,在其他方向上小。(某个方向上灰度变化很大)

  • 图像中的平面。两个特征值都小,且近似相等;自相关函数数值在各个方向上都小。(各个方向上灰度变化很小)

  • 图像中的角点。两个特征值都大,且近似相等,自相关函数在所有方向都增大。(各个方向上灰度变化很大)

根据二次项函数特征值的计算公式, 可以求得 M ( x , y ) \mathrm{M}(\mathrm{x}, \mathrm{y}) M(x,y) 矩阵的特征值。但是 Harris 给出的角点差别方法并不需要计算具体的特征值, 而是计算一个角点响应值 R R R 来判断角点。 R R R 的计算公式为:

R = det ⁡ M − α ( trace ⁡ M ) 2 R=\operatorname{det} \boldsymbol{M}-\alpha(\operatorname{trace} \boldsymbol{M})^2 R=detMα(traceM)2

式中, det ⁡ M \operatorname{det} \mathrm{M} detM 为矩阵 M = [ A B B C ] { }^{M=}\left[\begin{array}{ll}{ }^A & B \\ B & C\end{array}\right] M=[ABBC] 的行列式; traceM 为矩阵 M 的直迹; α \alpha α 为经常常数,取值范围为 0.04 ∼ 0.06 0.04 \sim 0.06 0.040.06 。事实上, 特征是隐含在 det ⁡ M \operatorname{det} M detM 和 traceM 中的, 因为,

det ⁡ M = λ 1 λ 2 = A C − B 2  trace  M = λ 2 + λ 2 = A + C \begin{gathered} \operatorname{det} \boldsymbol{M}=\lambda_1 \lambda_2=A C-B^2 \\ \text { trace } \boldsymbol{M}=\lambda_2+\lambda_2=A+C \end{gathered} detM=λ1λ2=ACB2 trace M=λ2+λ2=A+C

2.2.1.2 Harris计算流程

Harris角点检测是一种用于图像处理和计算机视觉的特征检测方法,主要用于识别图像中的角点(即局部特征点)。

1. 图像梯度

首先,计算图像的梯度。对于灰度图像 I ( x , y ) I(x, y) I(x,y),可以使用Sobel算子或其他方法计算水平和垂直方向的梯度:

I x = ∂ I ∂ x , I y = ∂ I ∂ y I_x = \frac{\partial I}{\partial x}, \quad I_y = \frac{\partial I}{\partial y} Ix=xI,Iy=yI

2. 结构张量

接下来,构造结构张量(也称为自相关矩阵) M M M,它包含了图像梯度的信息。结构张量的定义为:

M = [ I x 2 I x I y I x I y I y 2 ] M = \begin{bmatrix} I_x^2 & I_x I_y \\ I_x I_y & I_y^2 \end{bmatrix} M=[Ix2IxIyIxIyIy2]

为了减少噪声的影响,通常会对结构张量进行平滑处理,使用高斯滤波器对 I x I_x Ix I y I_y Iy 进行平滑:

M = [ G ∗ I x 2 G ∗ I x I y G ∗ I x I y G ∗ I y 2 ] M = \begin{bmatrix} G * I_x^2 & G * I_x I_y \\ G * I_x I_y & G * I_y^2 \end{bmatrix} M=[GIx2GIxIyGIxIyGIy2]

其中, G G G 是高斯核。

3. Harris响应函数

Harris角点检测的关键是计算Harris响应函数 R R R,它用于衡量每个像素点的角点强度。Harris响应函数的定义为:

R = det ( M ) − k ⋅ trace ( M ) 2 R = \text{det}(M) - k \cdot \text{trace}(M)^2 R=det(M)ktrace(M)2

其中, det ( M ) \text{det}(M) det(M) 是矩阵 M M M 的行列式, trace ( M ) \text{trace}(M) trace(M) 是矩阵 M M M 的迹(即对角线元素之和), k k k 是一个经验常数,通常取值在 0.04 0.04 0.04 0.06 0.06 0.06 之间。

4. 非极大值抑制

计算完响应函数 R R R 后,需要进行非极大值抑制,以确保只保留局部最大值作为角点。非极大值抑制的过程是检查每个像素的响应值,如果它是其邻域内的最大值,则保留该点。

5. 阈值化

最后,通过设定一个阈值来进一步筛选角点。只有当响应值 R R R 大于设定的阈值时,才将其视为角点。

2.2.1.3 Harris性质

好的,下面将详细讲解Harris角点检测的性质,并强调每个性质是如何通过原理中的具体公式推导得出的。

1. 旋转不变性

推导

  • Harris响应函数 R R R 的计算依赖于结构张量 M M M,其定义为:

M = [ I x 2 I x I y I x I y I y 2 ] M = \begin{bmatrix} I_x^2 & I_x I_y \\ I_x I_y & I_y^2 \end{bmatrix} M=[Ix2IxIyIxIyIy2]

  • 由于 M M M 是基于图像梯度 I x I_x Ix I y I_y Iy 构造的,而这些梯度在图像旋转时会相应变化,但其特征值和特征向量的计算方式保持不变。因此, R R R 的计算也保持不变:

R = det ( M ) − k ⋅ trace ( M ) 2 R = \text{det}(M) - k \cdot \text{trace}(M)^2 R=det(M)ktrace(M)2

  • 由于行列式和迹的计算与旋转无关, R R R 对图像的旋转具有不变性。

性质:Harris角点检测对图像的旋转不敏感,能够在不同方向上检测到相同的角点。


2. 对光照变化的鲁棒性
  • Harris响应函数 R R R基于梯度信息而非原始像素值计算的。梯度的计算公式为:

I x = ∂ I ∂ x , I y = ∂ I ∂ y I_x = \frac{\partial I}{\partial x}, \quad I_y = \frac{\partial I}{\partial y} Ix=xI,Iy=yI

  • 由于梯度反映的是局部区域的变化,因此在一定范围内,光照变化不会显著影响梯度的方向和大小。这意味着即使在光照条件变化的情况下, I x I_x Ix I y I_y Iy 的相对关系仍然保持,从而影响 M M M 的行列式和迹的计算。因此, R R R 的值在光照变化下仍然能够有效地反映角点的强度。

性质:Harris角点检测对光照变化具有一定的鲁棒性,能够在不同光照条件下有效检测角点。


3. 局部特征的敏感性

推导

  • Harris响应函数 R R R 的计算依赖于行列式和迹的组合:

R = det ( M ) − k ⋅ trace ( M ) 2 R = \text{det}(M) - k \cdot \text{trace}(M)^2 R=det(M)ktrace(M)2

  • 当局部区域的梯度在两个方向上都有显著变化时, det ( M ) \text{det}(M) det(M) 会较大,表明该区域可能是角点。具体来说:

det ( M ) = I x 2 I y 2 − ( I x I y ) 2 \text{det}(M) = I_x^2 I_y^2 - (I_x I_y)^2 det(M)=Ix2Iy2(IxIy)2

  • 如果 I x I_x Ix I y I_y Iy 都较大, det ( M ) \text{det}(M) det(M) 将会很大,说明该点是一个角点;如果 I x I_x Ix I y I_y Iy 都接近于零,说明该点是平坦区域, R R R 的值会较小。

性质:Harris角点检测能够有效地识别图像中的局部特征,如边缘和角点。

image-20240902155401523


4. 非极大值抑制的有效性

推导

  • 在计算完响应函数 R R R 后,Harris算法通过非极大值抑制来确保只保留局部最大值作为角点。这一过程是通过检查每个像素的响应值是否是其邻域内的最大值来实现的。

  • 具体来说,对于每个像素 R ( x , y ) R(x, y) R(x,y),如果它是其邻域内的最大值,则保留该点;否则,将其值设为零。

性质:非极大值抑制使得Harris角点检测能够准确定位角点,减少误检。


5. 参数k的依赖性

推导

  • Harris响应函数中的参数 k k k 对检测结果有重要影响。 R R R 的计算公式为:

R = det ( M ) − k ⋅ trace ( M ) 2 R = \text{det}(M) - k \cdot \text{trace}(M)^2 R=det(M)ktrace(M)2

  • 不同的 k k k 值会导致不同的角点检测结果。例如,较大的 k k k 值会使得算法更倾向于检测边缘而非角点,而较小的 k k k 值则可能导致更多的误检。

性质:Harris角点检测的性能在一定程度上依赖于参数的选择,需根据具体应用进行调整。

5. 不具有尺度不变性

Harris角点检测算法不具有尺度不变性,主要是由于其依赖于固定大小的窗口进行局部特征提取、梯度计算的局限性、结构张量的敏感性以及缺乏多尺度分析的机制。这些因素导致算法在处理不同尺度的特征时表现不佳。在实际应用中,为了克服这一限制,通常需要结合其他方法来实现尺度不变性。

  • 固定窗口大小,Harris角点检测算法在计算图像的梯度和构造结构张量时,通常使用固定大小的窗口(或邻域)来进行局部特征的提取。这意味着算法在检测角点时依赖于特定的局部区域大小。如果图像中的特征以不同的尺度出现,固定的窗口大小可能无法有效捕捉到这些特征

  • 梯度计算的局限性,Harris算法通过计算图像的梯度来识别角点。梯度计算是基于局部像素的变化,如果特征的尺度变化,原始的梯度信息可能会丢失。例如,当特征缩小到比窗口大小更小的尺度时,梯度可能会变得非常微弱,导致算法无法检测到这些特征。

  • 结构张量的敏感性,结构张量 M M M 的构造依赖于局部梯度信息:

M = [ I x 2 I x I y I x I y I y 2 ] M = \begin{bmatrix} I_x^2 & I_x I_y \\ I_x I_y & I_y^2 \end{bmatrix} M=[Ix2IxIyIxIyIy2]

由于 M M M 是基于固定窗口内的梯度计算的,因此当特征的尺度变化时, M M M 的计算结果也会受到影响。特征的尺度变化可能导致 M M M​ 的行列式和迹的值无法准确反映特征的真实情况。

  • 缺乏多尺度分析:Harris算法本身不包含多尺度分析机制,无法在不同尺度上进行特征提取和检测。为了实现尺度不变性,通常需要结合其他技术,如金字塔图像或尺度空间方法。
2.2.1.4 多尺度Harris角点

多尺度Harris角点检测方法旨在克服传统Harris角点检测算法在尺度不变性方面的不足。通过在不同的尺度上进行特征检测,可以有效地捕捉到图像中不同大小的角点。Harris 角点检测中二阶矩的表示方法, 使用 M = μ ( x , σ I , σ D ) M=\mu(x, \sigma I, \sigma D) M=μ(x,σI,σD) 为尺度自适应的二阶矩:
M = μ ( x , σ I , σ D ) = σ D 2 g ( σ I ) ⊗ [ L x 2 ( x , σ D ) L x L y ( x , σ D ) L x L y ( x , σ D ) L y 2 ( x , σ D ) ] \boldsymbol{M}=\mu\left(x, \sigma_I, \sigma_D\right)=\sigma_D^2 g\left(\sigma_I\right) \otimes\left[\begin{array}{cc} L_x^2\left(x, \sigma_D\right) & L_x L_y\left(x, \sigma_D\right) \\ L_x L_y\left(x, \sigma_D\right) & L_y^2\left(x, \sigma_D\right) \end{array}\right] M=μ(x,σI,σD)=σD2g(σI)[Lx2(x,σD)LxLy(x,σD)LxLy(x,σD)Ly2(x,σD)]

其中, g ( σ I ) \mathrm{g}\left(\sigma_I\right) g(σI) 表示尺度为 s i g m a I \mathrm{sigma}_I sigmaI 的高斯卷积核, x 表示图像的位置。与高斯测度空间类似,使用 L ( x ) \mathrm{L}(\mathrm{x}) L(x) 表示经过高斯平滑后的图像,符号 ⊗ \otimes 表示卷积, L x ( x , σ D ) \mathrm{L}_x\left(\mathrm{x}, \sigma_D\right) Lx(x,σD) L y ( x , σ D ) \mathrm{L}_y\left(\mathrm{x}, \sigma_D\right) Ly(x,σD) 表示对图像使用高斯 g ( σ D ) \mathrm{g}\left(\sigma_D\right) g(σD) 函数进行平滑后,在 x 或 y 方向取其微分的结果,即 L x = ∂ x L \mathrm{Lx}=\partial_{\mathrm{x}} \mathrm{L} Lx=xL L y = ∂ y L \mathrm{Ly}=\partial_{\mathrm{y}} \mathrm{L} Ly=yL 。通常将 σ I \sigma_I σI 称为积分尺度, 它是决定 Harris 角点当前尺度的变量, σ D \sigma_D σD 为微分尺度或局部尺度,它是决定角点附近微分值变化的变量。显然, 积分尺度 σ I \sigma_I σI 应该大于微分尺度 σ D \sigma_D σD

1.多尺度Harris角点检测的计算流程
  1. 构建图像金字塔

    • 首先,构建图像金字塔(Image Pyramid),即对原始图像进行多次下采样,生成一系列不同分辨率的图像。每一层图像都是前一层图像的缩小版本。
    • 例如,对于一个图像 I I I,可以生成 I 0 , I 1 , I 2 , … , I n I_0, I_1, I_2, \ldots, I_n I0,I1,I2,,In,其中 I 0 I_0 I0 是原始图像, I 1 I_1 I1 I 0 I_0 I0 的缩小版本,依此类推。
  2. 在每个尺度上应用Harris角点检测

    • 对于金字塔中的每一层图像,使用传统的Harris角点检测算法进行角点检测。具体步骤包括:
      • 计算图像梯度 I x I_x Ix I y I_y Iy
      • 构造结构张量 M M M
      • 计算Harris响应函数 R R R
      • 进行非极大值抑制和阈值化。
  3. 合并检测结果

    • 在所有尺度上检测到的角点需要进行合并。可以通过设置一个阈值来筛选出强角点,并去除重复的角点(例如,使用距离阈值来判断角点是否重叠)。
    • 也可以根据角点的响应值进行排序,选择响应值较高的角点。
  4. 尺度信息的保留

    • 在合并角点时,可以保留每个角点的尺度信息,以便后续处理(如特征匹配或物体识别)时使用。
2. 多尺度Harris角点检测的优点
  • 尺度不变性:通过在不同尺度上进行检测,能够有效捕捉到不同大小的角点,增强了算法的尺度不变性。
  • 鲁棒性:多尺度检测提高了对图像中各种特征的鲁棒性,能够在不同条件下保持较好的检测性能。
  • 适用性广:适用于多种计算机视觉任务,如特征匹配、物体识别和图像拼接等。
2.2.2 Shi-Tomasi算法

Shi-Tomasi算法通过直接使用结构张量的最小特征值作为响应函数,并利用特征值的性质来更有效地识别角点,从而在角点检测的准确性和鲁棒性上相较于Harris算法有了显著的改进。

Shi-Tomasi 算法是 Harris 算法的改进。Harris 算法最原始的定义是将矩阵 M 的行列式值与 M 的迹相减,再将差值同预先给定的阈值进行比较。后来 Shi 和 Tomasi 提出改进的方法,若两个特征值中较小的一个大于最小阈值,则会得到强角点。在Harris角点检测算法上的主要改进体现在以下几个方面:

  1. 响应函数的定义

    • Harris算法使用的响应函数为:
      R = det ( M ) − k ⋅ trace ( M ) 2 R = \text{det}(M) - k \cdot \text{trace}(M)^2 R=det(M)ktrace(M)2

    • Shi-Tomasi算法则直接使用结构张量 M M M 的最小特征值作为响应函数:
      R = min ⁡ ( λ 1 , λ 2 ) R = \min(\lambda_1, \lambda_2) R=min(λ1,λ2)
      这种改进使得Shi-Tomasi算法更直接地反映了局部区域的变化程度,能够更好地识别角点。

  2. 特征值的利用

    • Shi-Tomasi算法通过计算结构张量的两个特征值 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2,并选择最小值来判断角点的强度。这种方法比Harris算法中的行列式和迹的组合更为简洁和有效。
  3. 对边缘的抑制

    • Shi-Tomasi算法在特征值的选择上更能有效区分角点和边缘,减少了对边缘的误检。Harris算法在某些情况下可能会将边缘误判为角点,而Shi-Tomasi算法通过最小特征值的选择更好地避免了这一问题。
2.2.3 FAST 算法原理

FAST算法通过使用圆形邻域和强度比较的方式,快速判断图像中的角点。其高效性和实时性能使其在计算机视觉应用中非常受欢迎,尤其是在需要快速特征检测的场景中,如实时视频处理和机器人视觉。尽管FAST算法在速度上具有优势,但在某些情况下可能会受到噪声和光照变化的影响,因此在实际应用中,通常会与其他特征描述子或检测算法结合使用。

FAST(Features from Accelerated Segment Test)算法是一种高效的角点检测算法,旨在快速检测图像中的特征点。它的设计目标是实现实时性能,同时保持较高的检测准确性。

2.2.3.1. 计算原理和步骤
1. 基本思想

FAST算法的核心思想是通过对像素周围的邻域进行快速测试来判断该像素是否为角点。具体来说,算法选择一个中心像素,并检查其周围的像素是否满足特定的条件。

2. 圆形邻域

FAST算法使用一个包含16个像素的圆形邻域(通常半径为3个像素)来进行角点检测。这个邻域的像素位置相对于中心像素 p p p 的坐标如下:

(0, -3), (1, -3), (2, -3), (3, -3)
(-3, 0),                 (3, 0)
(-3, 1),                 (3, 1)
(-3, 2), (1, 3), (2, 3), (3, 3)

在这里插入图片描述

3. 强度比较

对于中心像素 p p p,算法首先选择一个阈值 T T T。然后,算法检查邻域中的像素,以确定是否存在足够数量的像素比中心像素的强度值 I ( p ) I(p) I(p) 大于 I ( p ) + T I(p) + T I(p)+T 或小于 I ( p ) − T I(p) - T I(p)T

  • 条件:如果在邻域中有至少 N 个像素满足以下条件之一:
    • I ( q ) > I ( p ) + T I(q) > I(p) + T I(q)>I(p)+T (亮点)
    • I ( q ) < I ( p ) − T I(q) < I(p) - T I(q)<I(p)T (暗点)

其中, q q q 是邻域中的像素。

4. 角点判定

如果满足上述条件,中心像素 p p p 被认为是一个角点。为了提高检测的准确性,FAST算法通常会设置一个最小数量的像素(如9个)来确认该点为角点。

5. 非极大值抑制

与其他角点检测算法类似,FAST算法也可以结合非极大值抑制来确保只保留局部最大值作为最终的角点。这一步骤可以进一步提高检测的准确性。

6. 加速优化

FAST算法的一个重要特点是其速策略。通过预先计算像素强度的阈值,算法能够快速排除不可能是角点的像素,从而提高检测速度。此外,FAST算法可以通过使用简单的整数运算而不是浮点运算来进一步加速。

2.2.3.2 缺点与不足

尽管FAST算法在速度上具有明显优势,但其对噪声和光照变化的敏感性、缺乏尺度不变性、无法区分边缘和角点等缺点限制了其在某些应用中的有效性。在实际应用中,通常需要将FAST与其他特征描述子或检测算法结合使用,以提高检测的准确性和鲁棒性。以下是FAST算法的一些主要缺点:

1. 对噪声敏感

FAST算法在进行强度比较时,依赖于像素的强度值。这使得算法对图像中的噪声非常敏感。在噪声较大的图像中,可能会错误地检测到角点,导致误检。

2. 光照变化的鲁棒性差

由于FAST算法基于强度比较,它对光照变化的鲁棒性较差。在不同光照条件下,像素的强度值可能会发生显著变化,从而影响角点的检测结果。

3. 缺乏尺度不变性

FAST算法本身不具备尺度不变性。它使用固定大小的圆形邻域来检测角点,因此在处理不同尺度的特征时,可能会漏掉某些角点。为了实现尺度不变性,通常需要结合其他方法,如图像金字塔。

4. 无法区分边缘和角点

FAST算法仅依赖于强度比较来判断角点,这可能导致算法在边缘区域产生误检。边缘像素可能满足角点的条件,但实际上并不是角点。

5. 对角点的重复性检测

在某些情况下,FAST算法可能会检测到多个相近的角点,导致冗余特征。这需要后续的非极大值抑制步骤来处理,但这也可能会增加计算复杂性。

6. 参数选择的影响

FAST算法的性能在一定程度上依赖于阈值 T T T​ 和邻域内像素数量的选择。不同的参数设置可能会导致不同的检测结果,因此在实际应用中需要进行调优。

2.2.4 FAST-ER算法

FAST-ER 是 FAST 算法原作者在 2010 年提出的,它在原来算法里提高特征点检测的重复度,重复意味着第一张图片内的检测的点,也可以在第二张图片上的相应位置被检测出来.

FAST-ER(Features from Accelerated Segment Test with Enhanced Robustness)算法在提高特征点检测的重复度方面做了多项改进。

2.2.4.1 计算原理和步骤
1. 自适应阈值

FAST-ER算法引入自适应阈值机制,使得阈值能够根据局部图像的强度分布动态调整。自适应阈值的计算可以表示为:

T = α ⋅ std ( I ) + β T = \alpha \cdot \text{std}(I) + \beta T=αstd(I)+β

其中:

  • T T T 是自适应阈值。
  • std ( I ) \text{std}(I) std(I) 是局部区域强度的标准差,反映了局部强度的变化程度。
  • α \alpha α β \beta β 是可调参数,用于控制阈值的灵敏度。

通过这种方式,算法能够在不同光照条件下保持特征点的检测能力,从而提高在不同图像中检测到相同特征点的可能性。

2. 增强的强度比较

FAST-ER算法在强度比较中使用多个阈值,而不仅仅是一个单一的阈值。对于中心像素 p p p,算法检查邻域中的像素 q q q 是否满足以下条件之一:

I ( q ) > I ( p ) + T 1 或 I ( q ) < I ( p ) − T 2 I(q) > I(p) + T_1 \quad \text{或} \quad I(q) < I(p) - T_2 I(q)>I(p)+T1I(q)<I(p)T2

其中:

  • T 1 T_1 T1 T 2 T_2 T2 是自适应阈值,可以根据局部强度分布进行调整。

这种方法使得算法能够更灵活地判断某个像素是否为角点,从而提高在不同图像中检测到相同特征点的能力。

3. 多尺度处理

FAST-ER算法结合了多尺度处理技术,以提高对不同尺度特征的检测能力。在不同尺度上,算法可以独立运行,检测特征点。对于图像 I I I,在尺度 s s s 下的图像可以表示为:

I s = Scale ( I , s ) I_s = \text{Scale}(I, s) Is=Scale(I,s)

通过在不同尺度上应用FAST-ER算法,可以有效捕捉到图像中不同大小的特征,从而提高特征点的检测率和重复度。

4. 特征选择的增强

FAST-ER算法可能会考虑更多的邻域像素,以提高角点的检测率。假设选定的邻域像素集合为:

N = { q 1 , q 2 , … , q n } N = \{q_1, q_2, \ldots, q_n\} N={q1,q2,,qn}

其中 n n n 是邻域内的像素数量。通过增加特征点的数量,算法可以提高在不同图像中检测到相同特征点的概率。

5. 非极大值抑制

FAST-ER算法使用非极大值抑制来确保只保留局部最大值作为最终的角点。非极大值抑制的过程可以表示为:

R ( p ) = { R ( p ) if  R ( p )  is a local maximum 0 otherwise R(p) = \begin{cases} R(p) & \text{if } R(p) \text{ is a local maximum} \\ 0 & \text{otherwise} \end{cases} R(p)={R(p)0if R(p) is a local maximumotherwise

其中 R ( p ) R(p) R(p) 是响应值,只有当 R ( p ) R(p) R(p)​​ 是其邻域内的最大值时,才保留该点。这一过程可以进一步提高检测的准确性,减少冗余特征,从而使得在不同图像中检测到的特征点更加一致。

参考

www.gwylab.com

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

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

相关文章

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(4)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层&#xff08;3&#xff09; 7.1 数据链路层的组成结构 7.1.1 数据链路层的状态 数据链路层需要通过物理层监控PCIe链路的状态&#xff0c;并维护数据链路层的“控制与…

厂房电气火灾现场勘验要点

0前言 随着我国社会的发展&#xff0c;电气化水平提升&#xff0c;但随之而来的是频繁的电气火灾事故&#xff0c;对生活和生产造成重大危害。电气火灾是最常见的火灾类型&#xff0c;通常由电路短路、电压过高、电阻过大或电路超负荷引起&#xff0c;这些因素都可能导致火花并…

电脑怎么录屏?探索电脑录屏工具,三款高效工具推荐及使用指南

在数字化时代&#xff0c;电脑录屏已成为日常工作和学习中不可或缺的一部分。无论是制作教程、记录会议还是捕捉游戏精彩瞬间&#xff0c;一个好的录屏工具都能让这一切变得简单高效。今天&#xff0c;我们将为您介绍三款备受推崇的录屏软件&#xff1a;Windows自带的步骤记录器…

面向对象程序设计之链表 list 的简析(C++)

简介&#xff1a;链表是一个双向的结构&#xff0c;与string与vector不同的是他不支持[]访问&#xff0c;因为链表是由一个节点一个节点连接而成的&#xff0c;并不连续。我们可以在常数量级内对于链表进行插入与删除数据 1.构造函数 我们在cplusplus.com中可以查到链表总共有四…

无人机遥控器的材料组成!!!

1. 外壳 材料&#xff1a;遥控器外壳通常采用高强度塑料&#xff08;如ABS、PC等&#xff09;或轻质金属&#xff08;如铝合金&#xff09;制成。这些材料具有良好的抗冲击性、耐磨性和一定的耐腐蚀性&#xff0c;能够保护内部电子元件免受外界环境的影响。 特点&#xff1a;…

智能优化算法-秃鹰优化算法(BES)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍&#xff1a; 秃鹰搜索算法‌&#xff0c;它是一种基于自然界中秃鹰觅食行为启发的优化算法&#xff0c;旨在解决优化问题。该算法模仿了秃鹰在寻找猎物时的策略&#xff0c;结合了随机搜索和逐步优化的特点&#…

AGI系列(9)手把手带你玩转 Coze 画板节点

本文以智能体“日签卡片生成器”的制作来阐述 Coze 画板节点的使用方法。 效果演示 核心流程 日签卡片生成器工作流整体分为两部分&#xff1a; 工作流&#xff1a;其核心流程为通过用户输入的主题词生成卡片的标题、内容 图像流&#xff1a;通过LLM输出的内容在图像流完成卡…

【C++ Primer Plus习题】9.3

问题: 解答: #include <iostream> using namespace std;struct chaff {char dross[20];int slag; };int set_chaff(chaff& f, char* c, int n) {if (strlen(c) > 0){strcpy_s(f.dross, c);f.slag n;return 1;}return 0;}void show_cahff(const chaff& f) {c…

rabbitmq高可用集群搭建

需求分析基本情况 在进行RabbitMQ搭建时&#xff0c;我们基于现有的连接数据和业务需求进行了深入分析。目前的统计数据显示&#xff0c;连接数为631&#xff0c;队列数为80418。为了确保业务需求的顺利满足&#xff0c;我们需要在云产品和自建RabbitMQ消息队列服务之间做出选…

最新软件测试面试题,常见面试题及答案汇总,不怕拿不到offer

面试题包括以下十六个模块&#xff1a;软件测试基础&#xff0c;liunx基础&#xff0c;MySQL基础&#xff0c;web测试&#xff0c;APP测试&#xff0c;性能测试&#xff0c;selenium&#xff0c;Python基础&#xff0c;接口测试&#xff0c;lordrunner&#xff0c;计算机网络&a…

chapter11-枚举和注解——(注解)——day14

目录 433-override注解 434-Deprecated注解 435-SupressWarnings注解 436-JDK的元注解 433-override注解 434-Deprecated注解 435-SupressWarnings注解 436-JDK的元注解

华为云征文 | 华为云Flexus云服务器X实例之Docker环境下部署JmalCloud个人网盘

华为云征文 | 华为云Flexus云服务器X实例之Docker环境下部署JmalCloud个人网盘 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、JmalCloud介绍2.1 JmalCloud简介2.2 JmalCloud优点2.3 JmalCloud使…

Android Camera系列(一):SurfaceView+Camera

心行慈善&#xff0c;何需努力看经—《西游记》 本系列主要讲述Android开发中Camera的相关操作、预览方式、视频录制等&#xff0c;项目结构代码耦合性低&#xff0c;旨在帮助大家能从中有所收获&#xff08;方便copy :&#xff09; &#xff09;&#xff0c;对于个人来说也是一…

【Next】2. 项目构建

打开 Next.js 的官方文档&#xff1a;https://nextjs.org/docs/getting-started/installation&#xff08;国内文档不够新&#xff09; Next.js 版本 14.2 &#xff0c; Node.js 的版本要求必须 > 18.18。 Next 有两种开发模式&#xff0c;下面讲新的 APP Router。 创建项…

VS2022 C++ 控制台中文乱码解决方案

最近写读文件的代码时&#xff0c;遇到了VS控制台读取中文时出现乱码&#xff0c;看了网上主要有两种方法 &#xff1a; 1、在VS菜单栏里点击"文件"选项&#xff0c;然后选择"高级保存选项"来设置文件格式&#xff0c;但是我的文件选项里没有"高级保存…

COT报告:美国期货市场持仓情况分析

市场情绪的晴雨表 COT报告揭示了美国期货市场中不同参与者的持仓情况&#xff0c;尤其是净多头和净空头头寸。这份报告发布时会有约三天的滞后&#xff0c;因此提供的是过往数据。通常&#xff0c;该报告在星期五发布&#xff0c;反映的是截至前一星期二的数据&#xff0c;因此…

蓝牙地址BD Addr烧录

关于蓝牙地址,有很多文章有介绍,主要要知道下面一个图: 蓝牙设备地址(或BD_ADDR)是制造商分配给每个蓝牙设备的唯一48位标识符。蓝牙地址通常显示为以十六进制书写的6个字节,用冒号分隔(例如-00:11:22:FF:EE)。蓝牙地址的上半部分(最重要的24位)被称为组织唯一标识符…

MASM32+ HTML JavaScript,好搭档

哪个编程工具让你的工作效率翻倍&#xff1f; 在日益繁忙的工作环境中&#xff0c;选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度&#xff0c;甚至让团队协作更加顺畅。那么&#xff0c;哪款编程工具让你…

「Python数据分析」Pandas进阶,使用merge()函数合并数据

在使用python语言进行数据分析的过程中&#xff0c;我们的数据&#xff0c;有很大一部分是结构化数据&#xff0c;也就是比较整齐的数据。 这里&#xff0c;我不展开讲什么是结构化数据&#xff0c;因为这个范围太过于庞大。但是&#xff0c;有一个知识点&#xff0c;必须要讲…

前端代码注释风格 - CSS篇

本文基于《阿里巴巴CSS编程规约》、stylelint rules进行编写&#xff0c;涉及预编译语言&#xff08;Sass、Less&#xff09;的编码风格和最佳实践。 1.1 编码风格 空格的使用 选择器和{之间保留一个空格。.selector-disabled { 在使用逗号分隔的属性中&#xff0c;逗号后保…