什么是 ORB

  • 定义与由来
    • ORB = Oriented FAST and Rotated BRIEF:用 FAST 取角点、用 BRIEF 做描述子,并加入方向与尺度处理,使 BRIEF 具备旋转不变性、FAST 具备尺度鲁棒性,整体速度快、精度高、开源免费。
  • 核心组成
    • 关键点检测(FAST)
      • 在多层金字塔上用 FAST 找角点;为避免弱角点,常用 Harris 响应对候选点排序筛选。
    • 方向估计(Intensity Centroid)
      • 通过图像块的灰度质心估计角点方向,计算矩中心 ,方向为
    • 描述子(rBRIEF)
      • 在以角点为中心的图像块内进行二值比较对采样,得到 256-bit 等长度的二进制描述子;
      • 将比较对按角点方向进行旋转(steering),实现旋转不变;比较对集合通过学习挑选,降低维间相关性。
    • 金字塔与尺度
      • 构建图像金字塔(多层缩放),在各层提点并记录层级与尺度,获得近似尺度不变性。
  • 匹配与度量
    • 使用汉明距离(Hamming)进行快速二进制向量匹配;
    • 可加交叉验证、比例测试(ratio test)等提高鲁棒性。
  • 不变性与特性
    • 旋转不变:由方向化 BRIEF(rBRIEF)保证;
    • 尺度鲁棒:由图像金字塔近似实现;
    • 仿射/强透视变化不变性有限,但在多数 SLAM/VIO 应用中足够;
    • 计算高效、内存友好,适合实时系统(例如 ORB-SLAM 系列)。
  • 在 ORB-SLAM3 中的关联
    • ORB 是默认特征与描述子;与 DBoW2(BoW)天然匹配(二进制描述子,Hamming 距离);
    • Settings.cc 里可看到 ORB 参数读取:
      • ORBextractor.nFeatures:每帧特征点数
      • ORBextractor.scaleFactor:金字塔层间尺度因子
      • ORBextractor.nLevels:金字塔层数
      • ORBextractor.iniThFAST / minThFAST:FAST 初始/最小阈值(弱纹理时自动降阈)
    • 单目针孔若有畸变,通常先去畸(或立体统一走校正),以便特征提取稳定。
  • 优缺点速记
    • 优点:快、稳、开源、不依赖专利,适合实时 SLAM/回环/重定位(配合 DBoW2)。
    • 局限:极端仿射/光照剧变、强模糊场景性能下降;对极端同质纹理环境易混淆(需几何验证兜底)。
  • 实用小贴士
    • 室内/弱纹理可适当调低 iniThFAST 或提高 nFeatures
    • 动态/大视角变化视频可适当增大 nLevels 或减小 scaleFactor
    • BoW 检索依赖描述子分布质量,尽量保证图像不被严重裁剪/拉伸与过度噪声处理。

Q&A

什么是 FAST、BRIEF

  • FAST(Features from Accelerated Segment Test)
    • 做什么:一种极快的角点(corner)检测器。
    • 原理要点:以候选像素为圆心,检查周围 Bresenham 圆上的 16 个像素;若存在长度≥N(常用 9 或 12)的连续弧,全部比中心亮度高 t 或低 t,即判为角点。
    • 加速技巧:用“高速判别器”(先检查 4 个对位点)快速排除非角点;训练出的决策树进一步减少比较次数。
    • 角点打分与筛选:可用非极大值抑制(NMS)保留局部最强角点;常见阈值 iniThFAST/minThFAST 控制角点数量与鲁棒性。
    • 不变性:对平移鲁棒;原生不具备尺度/旋转不变性(需金字塔与方向估计弥补)。
  • BRIEF(Binary Robust Independent Elementary Features)
    • 做什么:一种极快的二进制局部描述子。
    • 原理要点:在以关键点为中心的小块(如 31×31)里,对若干像素对 (p_i, q_i) 做强度比较 I(p_i) < I(q_i) → bit_i=1/0,拼接成一个二进制串(常见 128/256/512 位)。
    • 采样设计:像素对通常按高斯分布随机/学习挑选,以降低维度相关性、提高区分度;先对图像块做轻度平滑抑制噪声。
    • 距离度量:使用汉明距离(Hamming)快速匹配。
    • 不变性:原生不具备旋转不变性;对尺度也不鲁棒(需图像金字塔与方向校正弥补)。
  • 两者关系与组合
    • FAST 提供关键点位置(哪里值得描述),BRIEF 提供描述子(如何表示该点周围外观)。
    • 都以“速度优先”为设计目标,非常适合实时视觉任务。
    • 局限性互补:FAST/BRIEF 原生不旋转/尺度不变,常通过额外机制(方向估计 + 图像金字塔)获得实用不变性。
  • 与 ORB 的联系(为什么常一起被提)
    • ORB = Oriented FAST + Rotated BRIEF
      • 用 FAST 多尺度取点(获得近似尺度鲁棒性);
      • 用图像块灰度质心法估计角点方向;
      • 将 BRIEF 的采样对按该方向进行旋转(steering),得到旋转不变的 rBRIEF;
      • 通过学习挑选比较对,降低相关性并提升匹配稳定性。
    • 结果:在保持高速的前提下,具备较强的旋转/尺度鲁棒性,是 SLAM/回环检索的标配特征。
  • 典型参数与实践提示
    • FAST:阈值 t 越小,点越多但更噪;弱纹理环境可降低阈值或放宽 N(如 FAST-9)。
    • BRIEF:位数常用 256 位(速度/区分度折中);务必做轻度平滑,否则对噪声敏感。
    • 匹配:二进制描述子用汉明距离;可配合交叉校验与比率测试提升鲁棒性。
    • 若对旋转/尺度变化大,优先使用 ORB(即带方向与金字塔的 FAST+BRIEF 组合)。

角点本质是什么,是否就是边界点

简要回答:角点不是“所有边界点”。角点是局部邻域在多个方向上都存在显著强度变化的点;而一般的边界点(边缘)只在一个主方向上强变化。

  • 数学刻画(以 Harris 为例)
    • 计算结构张量(自相关矩阵):
    • 其特征值记为
      • 平坦区:
      • 边缘点:一大一小(只在一方向变化显著)
      • 角点:两者都大(在两个正交方向都变化显著)
  • 直观理解
    • 角点常出现在两条或多条边相交的地方(L/T/+ 交点),或边界曲率突然变化处。
    • 边界点是“区域边缘上的任意一点”,绝大多数只是沿法线方向变化,在切向方向变化弱,不是角点。
    • 因此“角点 ⊂ 兴趣点”,但“边界点 ⊄ 角点”;二者有交集,但不等同。
  • 示例与反例
    • 棋盘格交点、建筑物窗框拐角:角点(两个方向都能约束)
    • 一条清晰直线边缘上的普通像素:边界点,但不是角点
    • 边界上出现尖拐(曲率突变):该点可能是角点
    • 纹理内部的十字纹交汇:可形成角点,不一定在物体边界上
  • 为什么角点更适合匹配/定位
    • 在二维上都有强约束,亚像素定位稳定、重复性高;几何估计(PnP/位姿优化)收敛更好
    • 纯边缘点容易发生沿边方向的匹配歧义(“沿边滑动”)
  • 与常见检测器的关系
    • Harris/Shi-Tomasi:显式用结构张量判别角点(看 或其函数)
    • FAST:用“圆周连续亮/暗弧”快速规则近似角点,速度极快(后续可加 NMS 与打分)
    • ORB:用多尺度 FAST 取点 + 方向估计 + rBRIEF 描述子,获得旋转/尺度鲁棒性
  • 尺度与噪声注意
    • 角点是相对概念,依赖观察尺度与平滑;多尺度金字塔与适度平滑能提高稳定性
    • 弱纹理或强噪声会影响角点检测,需调阈值(如 FAST 的 iniTh/minTh)与金字塔参数

一句话:角点是“在两个方向都能被像素强度显著约束的点”,不等于“边界上的任意点”。

这里说的图形金字塔是否就是将图形分别缩放不同层度,以达到检测不同大小的物体的情况

  • 简短回答:是的。图像金字塔就是把同一张图按固定尺度因子逐层缩小(有时先做高斯平滑再降采样),在每一层做相同的检测/描述,从而获得对尺度变化的鲁棒性。
  • 在特征检测中的意义(以 ORB/FAST+BRIEF 为例)
    • 目的不是“检测不同大小的物体”,而是“同一物体在不同观测尺度下,关键点仍能被稳定检测与匹配”(尺度不变性)。
    • 每层的补丁大小固定,但因为图像被缩小,低层(更小的图)相当于在原图看更大的实际区域,因此能覆盖更大尺度的结构。
    • ORB 的参数里常见:
      • ORBextractor.scaleFactor = s(如 1.2):第 l 层的尺寸约为原图的 1/s
      • ORBextractor.nLevels = L:总层数
    • 关键点会带有“尺度层级”信息;匹配和投影时会使用该尺度(如金字塔层间的尺度校正)。
  • 与“检测不同大小物体”的区别
    • 物体检测(如目标检测)用金字塔的直觉类似:多尺度提高对不同尺寸目标的召回。
    • 特征检测/SLAM 更关心“同一场景在不同距离、焦距变化下,局部特征仍能被一致地提取和匹配”。本质是对“尺度变化的同一物体”的鲁棒,不是分类意义上的“不同大小物体”。
  • 细节与注意
    • 常配合 非极大值抑制(空间与尺度上)避免多层重复响应。
    • 降采样前做 高斯平滑 可减轻混叠(高斯金字塔 vs. 简单缩放)。
    • 计算 - 精度权衡:层数越多、尺度因子越小(层间更密),鲁棒性更强但计算开销更大。
    • 方向不变性是另一件事(由 ORB 的方向估计 + 旋转 BRIEF 处理),与金字塔的尺度鲁棒互补。

如何理解:降采样前做 高斯平滑 可减轻混叠

  • 直觉版

    • 缩小图片时,很多“很细的纹理/边缘”已经细到不足一个像素表示,直接采样会把这些高频细节误读成“锯齿、莫尔纹、闪烁”等伪图案(混叠)。
    • 先把图像“轻轻糊一下”(高斯平滑),把过细的细节变成平缓变化,再采样就不会产生这些伪低频图案,画面更稳定。
  • 频域版(采样定理)

    • 下采样 s 倍后,新的奈奎斯特频率变为原来的 1/s。原图中高于该新奈奎斯特的频率成分会“折叠”到低频,形成混叠。
    • 高斯平滑≈低通滤波:卷积在时域对应频域相乘,高斯在频域仍是高斯,会温和地衰减高频,把“超过新带宽”的能量提前压下去,相当于做抗混叠滤波,再下采样就干净了。
  • 为什么用高斯

    • 频域响应平滑,减少锐利截止带来的振铃/伪影;
    • 可分离(先横向再纵向)计算快;
    • 多次小 σ 叠加≈一次较大 σ(方差可加),便于构建金字塔。
  • 小例子

    • 黑白相间的 1 像素宽条纹直接 2× 下采样,可能整块变黑或变白(完全混叠);先高斯再下采样,会得到稳定的灰度条,不会闪烁/锯齿。
  • 参数选取(经验)

    • 2× 下采样常用 σ ≈ 0.8–1.0 像素,核大小 ≈ 6σ+1(取奇数)。
    • 连续金字塔(每层缩放 s,如 1.2):层间附加 σ 使累计 σ 满足 σ_total(l)^2 = σ_total(l-1)^2 + σ_step^2。
    • OpenCV 的 pyrDown 自带合适的预滤波;ORB 提特征前也会在各层做轻度平滑,提升重复性与匹配稳定性。
  • 注意取舍

    • σ 太小:混叠仍明显;σ 太大:边缘被过度软化、定位精度下降。要在“抑制混叠”和“保留细节”间折中。
    • “直接缩放不预滤波”在强纹理场景下会导致特征抖动、匹配不稳,影响 SLAM。

什么是降采样

  • 定义

    • 降采样(downsampling/decimation):降低采样率/分辨率的过程。对图像就是把一张高分辨率图缩小到更小尺寸(像素更少);对一维信号就是减少每秒样本点数。
  • 为什么要做

    • 降低数据量和计算开销(实时算法、移动端/嵌入式)。
    • 构建多尺度表示(图像金字塔、金字塔特征),获得尺度鲁棒性。
    • 匹配不同分辨率的数据源或显示设备。
  • 怎么做(关键步骤)

    • 先低通滤波(抗混叠),常用高斯平滑,把高于新奈奎斯特频率的高频成分压下去。
    • 再按比例重采样:
      • 2× 降采样常见做法:先高斯再每隔 2 个像素取一个(行列各取 1/2)。
      • 任意比例:用插值/重采样(双线性/双三次等)实现连续域采样。
  • 频域直觉(采样定理)

    • 直接降采样会把高频“折叠”到低频形成混叠(锯齿、莫尔纹、闪烁)。
    • 先低通再采样可显著减轻混叠;高斯核平滑、可分离,工程上常用。
  • 常见术语对照

    • Subsampling/Decimation:间隔取样(不一定预滤波)。
    • Downsampling:通常指“低通 + 重采样”的规范流程。
    • Mipmap/金字塔:逐层降采样的多尺度影像集(SLAM/渲染中常见)。
  • 在 ORB/SLAM 里的用法

    • ORB 金字塔:每层对上一层高斯平滑后降采样,得到更小的图;各层提特征实现近似尺度不变性。
    • 参数如 scaleFactor(层间缩放因子)、nLevels(层数)共同决定金字塔结构与计算量。
  • 实用建议

    • 2× 降采样配 σ≈0.8–1.0 的高斯核(核宽 ~ 6σ+1)较稳。
    • 强纹理/高频场景更要预滤波;否则特征抖动、匹配不稳。