【OpenCV-Python】教程:4-5 SURF (Speeded-Up Robust Features) 介绍

OpenCV Python SURF (Speeded-Up Robust Features) 介绍

【目标】

  • SURF的基础

【理论】

SURF 是 SIFT 的提速版本;

在SIFT中,Lowe用 DoG 近似 LoG;SURF 走的更远一点,用 box filter 近似 LoG 。下图显示了这种近似的演示。这种近似的一个很大的优点是,在积分图像的帮助下,可以很容易地计算 box filter 的卷积。它可以在不同的尺度上并行进行。此外,SURF还依赖于海森矩阵的行列式来确定尺度和位置。

【OpenCV-Python】教程:4-5 SURF (Speeded-Up Robust Features) 介绍_第1张图片

SURF在水平方向和垂直方向上对大小为6的邻域使用小波响应进行方向分配。充分的高斯权值也应用于它。然后他们被绘制在一个空间,如下图所示。通过计算60度滑动方向窗口内所有响应的和来估计主方向。有趣的是,小波响应可以很容易地在任何尺度上用积分图像求出来。对于许多应用程序,旋转不变性是不需要的,因此不需要找到这个方向,这加快了过程。SURF提供了这样的功能,称为 Upright-SURF 或 U-SURF。它提高了速度,并且在±15最大限度下都是有效的。OpenCV支持这两种,取决于标志,upright。如果是0,则计算方向。如果是1,则不计算方向,速度更快。

【OpenCV-Python】教程:4-5 SURF (Speeded-Up Robust Features) 介绍_第2张图片

对于特征描述,SURF使用水平和垂直方向上的小波响应(同样,使用积分图像使事情更容易)。大小为20sx20的邻域以关键点为中心,其中s为尺寸。它被分为4x4个子区域。对每个子区域分别取水平方向和垂直方向的小波响应,向量形式为 v = ( ∑ d x , ∑ d y , ∑ ∣ d x ∣ , ∑ ∣ d y ∣ ) v=(∑dx,∑dy,∑|dx|,∑|dy|) v=(dxdydxdy)。当表示为向量时,给出了总共64维的SURF特征描述符。降低了维数,提高了计算和匹配的速度,但提供了更好的特征显著性。

为了更加有区分性,SURF 特征描述符有一个扩展的128维版本。当 d y < 0 dy<0 dy<0 d y ≥ 0 dy≥0 dy0时, d x dx dx ∣ d x ∣ |dx| dx分别计算。类似地, d y dy dy ∣ d y ∣ |dy| dy的和根据 d x dx dx的符号被分割,从而使特征的数量翻倍。它不会增加太多的计算复杂度。OpenCV通过分别为 64-dim 和 128-dim 设置 0 和 1 扩展的标志值来支持这两种情况(默认是 128-dim )

另一个重要的改进是使用拉普拉斯符号(黑森矩阵迹)来表示潜在的兴趣点。它不会增加计算成本,因为它在检测时已经计算过了。拉普拉斯符号将黑暗背景上的明亮斑点与相反的情况区分开来。在匹配阶段,我们只比较具有相同类型对比度的特征(如下图所示)。这种最小的信息允许更快的匹配,而不会降低描述符的性能。

【OpenCV-Python】教程:4-5 SURF (Speeded-Up Robust Features) 介绍_第3张图片

总之,SURF 在每一步中都增加了很多功能来提高速度。分析表明,它比SIFT快3倍,而性能与SIFT相当。SURF 擅长处理有模糊和旋转的图像但不擅长处理仿射变化和光照变化

【代码】

4.5.5 版本 暂不提供

【参考】

  1. OpenCV官方文档
  2. SURF: Speeded Up Robust Features

你可能感兴趣的:(#,OpenCV-Python,教程,python,opencv,人工智能)