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

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

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈phd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值