Computer Vision-Feature points and their descriptors
特征点及其性质
特征点定义
图像中具有独特局部性质的点。
特征点性质
- 局部性:特征是局部的,对遮挡和混乱场景鲁棒
- 数量:一幅图像中可以产生足够数量的特征点,比如成百上
- 独特性:可以和其他图像中大多数点相区分
- 高效性:能够进行实时的检测和比较
- 可重复性:对图像进行旋转平移等操作后,仍能被检测到
特征点检测
角点定义
在一个以角点为中心的局部窗口内沿着 任意方向移动都会给亮度带来显著变化。
局部窗口内的亮度变化
某个以$(x,y)$为中心的局部窗口$𝑊$经过$(𝑢,𝑣)$的微小偏移后,窗口 内部亮度发生的变化量,可以用梯度近似$SSD$表示为
对图像 $I$ 进行一阶泰勒展开,
其中,$I_x,I_y$ 分别是图像在 $x,y$ 方向的梯度,可以用Sobel算子等来计算,将其代入上式,可以得到
如果将上式中的二阶矩矩阵的元素表示为:
那么,亮度变化可以近似为:
对该二阶矩矩阵的理解
水平方向的边缘
竖直方向的边缘
与特征值的关系
我们知道,二次型对应一个椭圆。
当 $A$ 和 $C$ 都非 $0$ 时,对曲面 $E$ 进行横切,形成一个椭圆如下:
椭圆的长短轴长度由二阶矩矩阵的特征值来决定,椭圆的角度由二阶矩矩阵的特征向量来决定:
特征值与角点检测
概括来说,就是:
- $\lambda_1$ 和 $\lambda_2$ 都很大,且相差不大,$\rightarrow$ 角点
- $\lambda_1$ 远远大于 $\lambda_2$ $\rightarrow$ 水平方向的边
- $\lambda_2$ 远远大于 $\lambda_1$ $\rightarrow$ 竖直方向的边
- $\lambda_1$ 和 $\lambda_2$ 都很小,且相差不大,$\rightarrow$ 平坦区域
Harris角点检测器
Harris角点响应函数
定义如下:
其中,$k$ 一般取 $[0.04,0.06]$
实际计算 $H$ 时还可以根据与中心的距离进行加权
用Harris角点响应函数检测
判据
- $R>0$ ,角点
- $R<0$ ,边
- $|R|$ 很小,平坦区域
角点检测流程
- 计算图像梯度,比如Sobel算子
- 根据图像梯度为每个点计算二阶矩矩阵特征值或者Harris角点 响应函数
- 寻找具有较大响应的点($\lambda_\min$ 或 $R$ 大于阈值)
- 选择那些 $\lambda_\min$ 或 $R$ 是局部最大值的点作为关键点(非最大值抑 制)
角点检测性质
旋转不变性 (Rotation Invariance)
性质:Harris角点检测器对图像旋转具有不变性。这是因为角点的检测依赖于局部梯度的变化,而旋转不会改变局部结构的梯度大小或方向分布。因此,即使图像发生旋转,角点仍会被准确检测。
举例:如果图像旋转了90度,角点的位置仍然能准确检测。
平移不变性 (Translation Invariance)
- 性质:Harris角点检测器对图像的平移有很好的不变性。如果图像整体平移,局部的梯度信息和结构不会发生改变,因此角点的位置相对于图像区域会保持不变。
- 举例:图像中某个局部区域的角点不会因为图像平移而丢失。
局部抗噪性 (Local Robustness to Noise)
- 性质:通过高斯滤波平滑图像,Harris角点检测器在一定程度上能够减少噪声的影响,但并不完全对噪声不变。局部抗噪性是基于图像平滑处理的效果。
但是,不具备下列性质
- 尺度不变性 (Scale Invariance)
- 不足:Harris角点检测器不具备尺度不变性。当图像的尺度发生变化时,角点的检测结果会发生改变。原因在于其检测依赖于固定窗口的局部结构,而窗口大小不随尺度变化调整。因此,图像缩放会导致原来的角点被漏检或新角点被误检。
- 举例:如果将图像缩小或放大,原本的角点可能会消失,或在不同位置检测到新的角点。
- 仿射不变性 (Affine Invariance)
- 不足:Harris角点检测器不具备对仿射变换(如旋转加缩放、剪切等复杂变换)的不变性。仿射变换会改变图像中的几何结构,从而影响角点检测的结果。
- 举例:在拍摄角度发生改变或者图像进行了仿射变换后,角点的检测结果可能不一致。
- 光照不变性 (Illumination Invariance)
- 不足:Harris角点检测器对光照变化较为敏感。如果图像的光照条件发生明显变化(如亮度增加或减少、对比度变化等),角点的检测效果可能会受到影响。
- 举例:在光照较暗或较亮的场景中,相同位置的角点可能会因为光照变化而检测不到
尺度不变特征变换 (Scale-Invariant Feature Transform, SIFT)
公式基础
在图像处理和信号处理领域,unit impulse、Gaussian、Laplacian of Gaussian (LoG) 以及高斯差分 (DoG) 这些函数之间有紧密的联系。它们都涉及对图像的边缘、特征等信息的提取。以下是它们之间的联系和公式总结:
1. Unit Impulse 函数 (δ函数)
- 定义:单位脉冲函数,记作 (\delta(x)),在数学上是一个理想化的函数,具有无限高的尖峰,并且在 (x = 0) 处为1,其积分为1。它的作用是挑出函数中特定点的值。
- 公式:
[
\delta(x) =
\begin{cases}
0, & x \neq 0 \
\infty, & x = 0
\end{cases}, \quad \int_{-\infty}^{\infty} \delta(x) dx = 1
] - 与其他函数的联系:可以看作是信号或图像在某点上的“瞬间激发”。Gaussian 函数和 LoG、DoG 都可以看作是对信号的平滑或差分,能够从信号中提取出更丰富的信息,而脉冲函数是这些操作的基础。
2. Gaussian 函数
- 定义:高斯函数是一种平滑函数,广泛应用于图像模糊、降噪等操作。它通过卷积来平滑图像,并压制噪声,使得边缘更加明显。
- 公式(一维高斯函数):
[
G(x) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{x^2}{2\sigma^2}\right)
]
二维高斯函数:
[
G(x, y) = \frac{1}{2\pi\sigma^2} \exp\left(-\frac{x^2 + y^2}{2\sigma^2}\right)
] - 与Unit Impulse的联系:高斯函数可以看作是单位脉冲函数在空间域中进行平滑处理的结果,通过调节参数 (\sigma) 来控制平滑程度。
- 与LoG和DoG的联系:Gaussian 是构建 LoG 和 DoG 的基础。它通过卷积核的形式应用于图像平滑,之后可以用于提取边缘信息。
3. Laplacian of Gaussian (LoG)
- 定义:Laplacian of Gaussian 是先对图像应用高斯平滑,然后计算其拉普拉斯算子,用于检测图像的边缘。Laplacian 是二阶微分算子,敏感于亮度快速变化的位置(即边缘)。
- 公式:
结合高斯函数和拉普拉斯算子,二维 LoG 可以写作:
[
\text{LoG}(x, y) = \nabla^2 G(x, y) = \left(\frac{x^2 + y^2 - 2\sigma^2}{\sigma^4}\right) \exp\left(-\frac{x^2 + y^2}{2\sigma^2}\right)
]
其中,(\nabla^2) 表示拉普拉斯算子,它是二阶导数的和:
[
\nabla^2 f(x, y) = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}
] - 与Gaussian的联系:LoG 是对高斯函数先平滑图像,再用拉普拉斯算子来检测图像中的变化(如边缘)。通过高斯平滑抑制噪声,再使用拉普拉斯算子找到边缘位置。
4. 高斯差分 (Difference of Gaussian, DoG)
- 定义:DoG 是通过对图像分别应用两个不同尺度的高斯模糊(不同 (\sigma) 值),然后计算它们的差分。DoG 是一种近似LoG的边缘检测方法,但计算更高效。
- 公式:
给定两个不同尺度的高斯函数 (G(x, y, \sigma_1)) 和 (G(x, y, \sigma_2)),高斯差分为:
[
\text{DoG}(x, y) = G(x, y, \sigma_1) - G(x, y, \sigma_2)
]
在频域上,可以近似为:
[
\text{DoG}(x, y) \approx k \cdot \nabla^2 G(x, y)
]
其中 (k) 是常数。 - 与Gaussian的联系:DoG 是两个不同尺度的高斯函数之差。它通过高效的差分操作,近似计算 LoG,从而实现快速边缘检测。
几个函数之间的联系总结:
- Unit Impulse (δ函数) 是理想的“点”操作基础,在信号处理中常用于理论分析。
- Gaussian (高斯函数) 是平滑滤波函数,通过模糊处理减小噪声,常作为卷积核进行信号平滑。
- Laplacian of Gaussian (LoG) 是对高斯平滑后的图像进行二阶导数,找到图像中快速变化的区域(即边缘),可以更准确地检测边缘。
- Difference of Gaussian (DoG) 是通过两个不同尺度的高斯函数求差,近似实现了 LoG 的边缘检测,但计算效率更高。
因此,Gaussian 是构建 LoG 和 DoG 的基础函数,而 LoG 和 DoG 都可以用来进行边缘检测,不同之处在于 LoG 是通过二阶导数直接计算边缘,而 DoG 是通过不同尺度的高斯函数相减来近似这种效果。
SIFT流程
SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)是一种经典的计算机视觉算法,能够检测图像中的关键点,并生成不受尺度、旋转等影响的特征描述子。SIFT描述子的流程分为几个主要步骤,详细说明如下:
SIFT描述子的完整流程
1. 构建尺度空间 (Scale-Space Construction)
- 目的:为了检测图像在不同尺度下的关键点,SIFT通过在图像的不同尺度下检测极值点,确保关键点对尺度变化具有不变性。
- 步骤:
- 通过高斯核对原始图像进行不同程度的模糊处理,生成一系列具有不同模糊程度的图像,称为“高斯金字塔”。
- 在每个尺度上,用差分高斯(Difference of Gaussian, DoG)图像来近似Laplacian算子,以此找到图像中的关键点。这些差分高斯图像是通过在不同模糊图像之间相减得到的。
2. 关键点检测 (Keypoint Detection)
- 目的:通过在尺度空间中寻找局部极值点来检测关键点,确保这些点是图像中的显著特征。
- 步骤:
- 在DoG图像的每一个像素,SIFT会在其相邻的尺度层次和空间上搜索局部极值点。
- 如果一个像素点在它的8个邻域(同一尺度)以及上下两个尺度的相邻区域内都是最大或最小值,那么该像素点就被标记为潜在的关键点。
3. 关键点精确定位 (Keypoint Localization)
- 目的:对初步检测出的关键点进行精确定位和过滤,排除那些低对比度的点和边缘响应较强的点(这些点通常不稳定)。
- 步骤:
- 使用泰勒展开式对检测到的局部极值点进行精确拟合,以确定其亚像素级别的精确位置。
- 计算该点的对比度值,如果低于设定的阈值,则将其去除。
- 同时,通过主曲率的比值来判断该点是否是边缘点,若边缘响应较强也将其去除。
4. 关键点方向分配 (Orientation Assignment)
- 目的:为每个关键点分配一个主方向,确保关键点描述子对图像的旋转具有不变性。
- 步骤:
- 对每个关键点周围区域的图像梯度进行计算,包括梯度的幅度和方向。
- 统计梯度方向的直方图,并在360度范围内划分36个方向区间,找到具有最多数量的方向区域(主方向),并将其分配给该关键点。若有多个方向的响应接近主方向,则该关键点可以拥有多个方向。
5. 关键点描述子生成 (Keypoint Descriptor Generation)
- 目的:生成具有旋转、尺度不变性的特征描述子,用于后续的图像匹配和识别。
- 步骤:
- 在每个关键点周围的区域内,取16x16的像素块作为窗口,计算每个窗口内的梯度信息,并将其划分为4x4的子块,每个子块为4x4像素。
- 对每个子块计算梯度方向直方图,通常将360度分成8个方向区间,每个子块生成一个8维的方向直方图。
- 对所有的4x4子块生成的8维直方图组合成128维的特征向量,称为SIFT描述子。
6. 特征向量归一化 (Descriptor Normalization)
- 目的:对特征向量进行归一化处理,增强其对光照变化和对比度变化的鲁棒性。
- 步骤:
- 将每个描述子的128维向量进行归一化,使其总长度为1(通常使用L2范数)。
- 通过归一化,SIFT描述子对光照变化具有更好的不变性。对于梯度幅度较大的值会进行截断(通常将最大值截断到0.2),然后再进行一次归一化。
总结
SIFT描述子生成的主要流程包括:
- 构建尺度空间:使用高斯模糊和差分高斯图像检测图像的多尺度特征。
- 关键点检测:找到图像中的局部极值点作为初步的关键点。
- 关键点精确定位:精确确定关键点的位置并过滤掉不稳定点。
- 方向分配:为每个关键点分配一个或多个主方向,确保旋转不变性。
- 描述子生成:通过关键点周围的梯度方向信息生成128维的特征描述子。
- 归一化处理:对特征向量进行归一化,以提升其对光照和对比度变化的鲁棒性。
SIFT描述子生成的整个过程旨在确保关键点和描述子具有尺度、旋转、平移等不变性,广泛应用于图像匹配、物体识别等领域。


