什么是 ORB
- 定义与由来
- ORB = Oriented FAST and Rotated BRIEF:用 FAST 取角点、用 BRIEF 做描述子,并加入方向与尺度处理,使 BRIEF 具备旋转不变性、FAST 具备尺度鲁棒性,整体速度快、精度高、开源免费。
- 核心组成
- 关键点检测(FAST)
- 在多层金字塔上用 FAST 找角点;为避免弱角点,常用 Harris 响应对候选点排序筛选。
- 方向估计(Intensity Centroid)
- 通过图像块的灰度质心估计角点方向,计算矩中心 ,方向为 。
- 描述子(rBRIEF)
- 在以角点为中心的图像块内进行二值比较对采样,得到 256-bit 等长度的二进制描述子;
- 将比较对按角点方向进行旋转(steering),实现旋转不变;比较对集合通过学习挑选,降低维间相关性。
- 金字塔与尺度
- 构建图像金字塔(多层缩放),在各层提点并记录层级与尺度,获得近似尺度不变性。
- 关键点检测(FAST)
- 匹配与度量
- 使用汉明距离(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/回环检索的标配特征。
- ORB = Oriented FAST + Rotated BRIEF
- 典型参数与实践提示
- 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/sORBextractor.nLevels = L:总层数
- 关键点会带有“尺度层级”信息;匹配和投影时会使用该尺度(如金字塔层间的尺度校正)。
- 与“检测不同大小物体”的区别
- 物体检测(如目标检测)用金字塔的直觉类似:多尺度提高对不同尺寸目标的召回。
- 特征检测/SLAM 更关心“同一场景在不同距离、焦距变化下,局部特征仍能被一致地提取和匹配”。本质是对“尺度变化的同一物体”的鲁棒,不是分类意义上的“不同大小物体”。
- 细节与注意
如何理解:降采样前做 高斯平滑 可减轻混叠
-
直觉版
- 缩小图片时,很多“很细的纹理/边缘”已经细到不足一个像素表示,直接采样会把这些高频细节误读成“锯齿、莫尔纹、闪烁”等伪图案(混叠)。
- 先把图像“轻轻糊一下”(高斯平滑),把过细的细节变成平缓变化,再采样就不会产生这些伪低频图案,画面更稳定。
-
频域版(采样定理)
- 下采样 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)较稳。
- 强纹理/高频场景更要预滤波;否则特征抖动、匹配不稳。