计算机视觉之图像处理-----SIFT、SURF、FAST、ORB 特征提取算法深度解析
SIFT、SURF、FAST、ORB 特征提取算法深度解析
前言
在图像处理领域亦或是计算机视觉中,首先我们需要先理解几个名词:
什么是尺度不变?
在实际场景中,同一物体可能出现在不同距离(如远处的山和近处的树),导致其在图像中的尺度不同,也引出了多尺度的概念。算法检测到的特征在图像缩放(放大或缩小)后仍能被正确识别和匹配,即尺度不变性。
什么是旋转不变?
物体在现实中的朝向可能任意(如手机横屏/竖屏拍摄同一物体)。算法检测到的特征在图像旋转后仍能被正确识别和匹配,即旋转不变性。
什么是角点:
角点是图像中具有显著变化的点,通常位于边缘的交汇处。它们在计算机视觉中扮演着重要角色,是许多任务的基础特征。通过角点检测算法(如Harris、FAST等),可以有效地提取和利用这些特征。在数学上通过梯度变化和自相关矩阵进行判断。
什么是斑点:
在图像处理和计算机视觉中,斑点(Blob)是指图像中与周围区域在亮度、颜色或纹理上存在显著差异的连通区域。斑点的检测通常基于二阶导数或高斯滤波响应,核心思想是寻找局部极值区域。
斑点 vs. 角点 vs. 边缘
特征类型 | 定义 | 数学表征 | 示例场景 |
---|---|---|---|
斑点 | 闭合的均匀区域,周围强度突变 | 二阶导数极值(LoG/DoG) | 医学图像中的肿瘤 |
角点 | 多方向强度变化的交点 | 一阶导数的双方向极值 | 棋盘格的交叉点 |
边缘 | 单方向强度突变的线状结构 | 一阶导数的极值 | 物体的轮廓线 |
什么是图像金字塔?
是一种多尺度表示方法,通过对图像进行多次下采样(缩小)或上采样(放大),生成一系列分辨率逐渐降低或升高的图像集合。
SIFT(尺度不变特征变换)
SIFT(尺度不变特征变换)是一种用于图像处理的特征检测与描述算法,具有尺度、旋转、光照不变性,广泛应用于图像匹配、物体识别等领域。其核心步骤分为四个阶段:
1. 尺度空间的极值检测:
算法通过构建高斯金字塔并计算高斯差分(DoG)来模拟不同尺度下的图像模糊效果,在DoG空间中检测局部极值点作为候选关键点。
2. 关键点定位:
在不同尺寸空间下可能找出过多的关键点,有些关键点可能相对不易辨识或易受噪声干扰。通过泰勒展开插值修正位置和尺度,并剔除低对比度点与边缘响应点以保留稳定的关键点,借此消除位于边上或是易受噪声干扰的关键点。
3. 方向分配:
为每个关键点分配主方向:在其邻域内计算像素梯度幅值和方向,生成方向直方图,取峰值作为主方向以实现旋转不变性,若存在次峰则分配多个方向以增强鲁棒性。
4. 生成关键点描述子:
围绕关键点生成描述子:将邻域旋转至主方向后划分为4×4子区域,每个子区域统计8个方向的梯度直方图,形成128维向量,并通过归一化和截断抑制光照变化的影响。
具体可以参考这篇博客:https://www.cnblogs.com/liuchaogege/p/5155739.html
SURF**(加速稳健特征)**
SURF(Speeded-Up Robust Features)是一种高效且鲁棒的特征检测与描述算法,旨在解决SIFT算法计算复杂度高的问题,同时保持对尺度、旋转和光照变化的鲁棒性。以下是SURF的核心思想与流程:
1. 特征点检测: SURF利用积分图像加速计算,通过近似Hessian矩阵检测关键点:在图像的多尺度空间中,采用不同尺寸的盒式滤波器替代传统高斯卷积,直接调整滤波器大小而非降采样图像来构建尺度空间,显著减少计算量。 对于每个像素点,计算其Hessian矩阵的行列式值(近似为det(H)=LxxLyy−(0.9Lxy)2),若该值在三维邻域(空间与尺度)内为极值,则标记为候选关键点。
**2.关键点方向分配:**使用Haar小波响应来确定关键点的主方向:在关键点周围半径为6σ的圆形区域内,计算水平和垂直方向的Haar小波响应,用高斯加权函数对这些响应值进行加权。将360°划分为多个扇形区域,计算各扇区内响应向量的总和,最后选择最长向量的方向作为主方向,从而实现旋转不变性。
3. 特征描述子生成: 算法首先将关键点邻域旋转至主方向对齐,确保坐标系与主方向一致;接着将邻域划分为4×4的子区域,每个子区域内统计水平与垂直Haar小波响应的值及其绝对值之和,形成4维局部特征向量,最终将所有子区域的特征串联为64维或128维描述子(SURF-64或SURF-128)。
**4. 描述子归一化:**对描述子进行归一化处理以消除光照变化影响,并通过阈值截断(如限制最大分量值为0.2)进一步提升鲁棒性。
具体可以参考这篇博客:https://www.cnblogs.com/zyly/p/9531907.html
SURF vs. SIFT 核心差异
- 效率提升:SURF利用积分图像和盒式滤波器,计算速度比SIFT快数倍,适用于实时应用。
- 尺度空间构建:SIFT通过图像降采样生成多Octave,而SURF直接调整滤波器尺寸,减少图像重建开销。
- 方向分配:SURF使用Haar小波响应统计方向,SIFT基于梯度直方图。
- 描述子维度:SURF默认64维(可扩展至128维),低于SIFT的128维,但通过优化统计方式保持区分性。
应用与局限性
- 优势:实时性高,对模糊、旋转和光照变化鲁棒,适用于移动端或实时匹配场景(如SLAM、目标跟踪)。
- 局限性:对视角变换和非刚性形变的适应性弱于SIFT,高纹理重复场景易误匹配。
SURF通过算法优化在速度与性能间取得平衡,成为传统特征提取方法中的经典选择,后续算法(如ORB)进一步结合二进制描述子,推动实时性提升。
FAST(Features from Accelerated Segment Test)
FAST 是一种高效的关键点检测算法,专注于在实时系统中快速识别图像中的角点(Corner)。其核心思想是通过局部像素强度的快速比对筛选候选点,牺牲部分鲁棒性以换取极高的计算速度。具体流程如下:
首先,以候选像素 p 为中心,在其周围半径为3像素的圆形邻域(共16个像素)中选择一组固定点(通常取12或9个点),通过阈值 T 判断这些点与中心点的强度差异。若邻域中存在连续 N 个点(通常 N=9)的强度均显著高于或低于中心点(即 I邻域点>Ip+T 或 I邻域点<Ip-T),则判定 p 为候选角点。为进一步优化结果,FAST 采用非极大值抑制(Non-Maximum Suppression)去除响应较弱的重复点,保留最具显著性的角点。
特点与局限性:
- 优势:计算复杂度极低,适合实时应用(如视频跟踪、移动端SLAM)。
- 缺点:仅检测角点位置,不提供尺度与方向信息,且对噪声敏感,需依赖后续算法(如ORB)补全描述子。
ORB(Oriented FAST and Rotated BRIEF)
ORB 是对 FAST 和 BRIEF 算法的融合与改进,通过引入方向性与旋转不变性,解决了 FAST 缺乏描述能力及 BRIEF 对旋转敏感的问题,成为轻量级特征提取的经典方法。其流程分为以下阶段:
- 关键点检测(oFAST):在 FAST 检测的基础上,通过灰度质心法(Intensity Centroid)为每个关键点分配主方向。具体而言,计算关键点邻域内像素的灰度质心(即加权平均坐标),将质心到关键点的向量方向作为主方向,实现旋转不变性。此外,ORB 通过构建图像金字塔检测多尺度关键点,支持尺度不变性。
- 特征描述(rBRIEF):传统的 BRIEF 描述子通过随机选取关键点邻域内的像素对进行强度比较,生成二进制字符串(如256位),但直接应用会因旋转导致匹配失效。ORB 改进为 旋转鲁棒的BRIEF(rBRIEF):根据关键点的主方向旋转像素对的采样位置,确保描述子与方向对齐。同时,ORB 通过统计学习优化像素对的选择,使得生成的二进制描述子具有高区分度和低相关性。
- 匹配优化:ORB 描述子通过汉明距离(Hamming Distance)进行快速匹配,利用二进制异或操作加速计算,显著提升匹配效率。
特点与应用:
- 效率:全程基于二进制操作,计算速度远超 SIFT/SURF,适用于嵌入式设备或实时场景(如无人机导航、AR)。
- 鲁棒性:通过方向补偿和尺度金字塔,支持旋转与尺度不变性,但对透视形变和光照剧烈变化的适应性较弱。
- 典型应用:ORB-SLAM、移动端图像匹配、低功耗场景下的物体识别。
具体可以参考以下博客:
- FAST特征点检测:https://www.cnblogs.com/ronny/p/4078710.html
- BRIEF特征描述子:https://www.cnblogs.com/ronny/p/4081362.html
FAST 与 ORB 的关系
- FAST 是纯粹的关键点检测器,仅定位角点位置。
- ORB 是完整的特征提取框架,包含检测(oFAST)与描述(rBRIEF)两部分,本质是 FAST + 方向/尺度扩展 + 旋转鲁棒的二进制描述子。
总结
- FAST 以"快"为核心,牺牲描述能力换取毫秒级检测速度,适用于对实时性要求极高的场景。
- ORB 在 FAST 基础上融合方向、尺度与二进制描述,平衡速度与鲁棒性,成为轻量级特征提取的标杆算法,尤其适合资源受限的实时系统。
- 局限性:二者均依赖局部强度分布,对模糊、大视角变化或非刚性形变的处理能力有限,在此类场景中仍需依赖深度学习特征(如SuperPoint、D2-Net)。
可视化效果
sift len of des: 458, size of des: 128
surf len of des: 1785, size of des: 64
orb len of des: 500, size of des: 32
可以看出:
- sift虽然提取的特征点最少,但是效果最好。
- sift提取的特征点维度是128维,surf是64维,orb是32维。
BruteForce Matcher特征匹配(BFMatcher总是尝试所有可能的匹配,从而使得它总能够找到最佳匹配,这也是Brute Force(暴力法)的原始含义。)
sift size of kp: 59, after filtering: 20
surf size of kp: 197, after filtering: 35
orb size of kp: 390, after filtering: 47
从输出的结果来看,orb的效果最好。感兴趣的话还可以用其他图片看看效果,pic文件夹还提供其他两组比较的图片。
总结:
计算速度: ORB>>SURF>>SIFT(各差一个量级)
旋转鲁棒性:SURF>ORB~SIFT(表示差不多)
模糊鲁棒性:SURF>ORB~SIFT
尺度变换鲁棒性: SURF>SIFT>ORB(ORB并不具备尺度变换性)
算法 | 关键点类型 | 强度变化形式 | 典型应用场景 |
---|---|---|---|
SIFT | 边缘/斑点 | 一阶或二阶导数极值 | 高精度匹配、三维重建 |
SURF | 斑点 | 二阶导数极值(Hessian) | 实时性要求较高的匹配 |
FAST | 角点 | 局部强度突变 | 实时跟踪、SLAM |
ORB | 角点(带方向) | 局部强度突变 + 强度分布统计 | 嵌入式设备、移动端应用 |
相关文章:

计算机视觉之图像处理-----SIFT、SURF、FAST、ORB 特征提取算法深度解析
SIFT、SURF、FAST、ORB 特征提取算法深度解析 前言 在图像处理领域亦或是计算机视觉中,首先我们需要先理解几个名词: 什么是尺度不变? 在实际场景中,同一物体可能出现在不同距离(如远处的山和近处的树)…...

DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署 **DeepSeek** 是一款专注于深度学习和人工智能的工具或平台,通常与人工智能、机器学习、自动化分析等领域有关。它的主要功能可能包括:深度学习模型搜索&…...

elabradio入门第八讲——帧同步技术
一、帧同步的相关知识 数字通信中, 为了使接收到的码元能够被理解,需要知道其如何分组。一般说来,接收端需要利用帧同步码去划分接收码元序列。将标志码组开始位置的帧同步码插入于一个码组的前面,如图所示。 这里的帧同步码是一…...

站长工具SEO综合查询是什么?怎么利用站长工具SEO综合查询
你的网站是否像一辆没有仪表盘的车?明明在狂奔却不知道油耗、时速、故障灯状态?2025年SimilarWeb数据显示,83%的站长因缺乏数据化诊断工具,导致50%以上的流量白白流失。今天我们用“修车师傅”的视角,拆解SEO综合查询工…...

超简单理解KMP算法(最长公共前后缀next数组、合并主子串、子串偏移法)
KMP算法理解 最长公共前后缀next合并主子串子串偏移 参考b站:子串偏移、合并主子串 最长公共前后缀next 这个概念是一个trick,帮助我们记录遍历了一遍的数组的相似特性,想出来确实很nb,我也不理解逻辑是怎么想出来的。 字符串的…...
【每日论文】TESS 2: A Large-Scale Generalist Diffusion Language Model
下载PDF或阅读论文,请点击:LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory 摘要 我们推出了TESS 2,这是一种通用的指令跟随扩散语言模型,其性能优于当代的指令调整扩散模型,有…...
如何在 React 中测试高阶组件?
在 React 中测试高阶组件可以采用多种策略,以下是常见的测试方法: 1. 测试高阶组件返回的组件 高阶组件本身是一个函数,它返回一个新的组件。因此,可以通过测试这个返回的组件来间接测试高阶组件的功能。通常使用 Jest 作为测试…...
设计模式学习笔记
说了一万遍!学习要做笔记! 时间一长,就会忘了,后面再来学,又要从头学起 关键是重难点!!!当初学的时候就是因为攻克难点、寻找重点花费时间 不做笔记每次复习都要浪费时间在重难点上…...

写论文技巧 :Word文档插入图片,实现自动对齐
插入表格,调整大小 取消自动适应 插入图片,去掉边框...

VSCode - VSCode 切换自动换行
VSCode 自动换行 1、基本介绍 在 VSCode 中,启用自动换行可以让长行代码自动折行显示,避免水平滚动条频繁使用,提升代码阅读体验 如果禁用自动换行,长行代码就需要手动结合水平滚动条来阅读 2、演示 启用自动换行 禁用自动换…...

postman传query一个数组类型的参数,并且数组里面只有一个值的时候
1.在所加的检索项目后面加上[0], 例: item[0]2.数组里面多个值的时候,写两个相同的项目名,值不相同 itemvalue1 itemvalue2再看不懂,我也没办法了。...

【智能客服】ChatGPT大模型话术优化落地方案
本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 一、项目背景 1.1 行业背景 1.2 业务现…...
vue3 文件类型传Form Data数据格式给后端
在 Vue 3 中,如果你想将文件(例如上传的 Excel 文件)以 FormData 格式发送到后端,可以通过以下步骤实现。这种方式通常用于处理文件上传,因为它可以将文件和其他数据一起发送到服务器。 首先,创建一个 Vue…...
高考或者单招考试需要考物理这科目
问题:帮忙搜索一下以上学校哪些高考或者单招考试需要考物理这科目的 回答: 根据目前获取的资料,明确提及高考或单招考试需考物理的学校为湖南工业职业技术学院,在部分专业单招时要求选考物理;其他学校暂未发现明确提…...
深入剖析 DeepSeek:张量计算范式全解析
一、引言 在 AI 技术迅猛发展的当下,DeepSeek 以其卓越的性能成为研究热点。清华大学的《DeepSeek:从入门到精通》这一珍贵资料,为我们深入挖掘 DeepSeek 核心原理提供了指引,其中张量计算范式更是关键所在,它构建起整…...

VSCode集成deepseek使用介绍(Visual Studio Code)
VSCode集成deepseek使用介绍(Visual Studio Code) 1. 简介 随着AI辅助编程工具的快速发展,VSCode作为一款轻量级、高度可扩展的代码编辑器,已成为开发者首选的工具之一。DeepSeek作为AI模型,结合Roo Code插件&#x…...

【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库
一、总体方案 目前在使用 DeepSeek 在线环境时,页面经常显示“服务器繁忙,请稍后再试”,以 DeepSeek R1 现在的火爆程度,这个状况可能还会持续一段时间,所以这里给大家提供了 DeepSeek R1 RAG 的本地部署方案。最后实现…...

vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive
keepalive没有效果,无法缓存页面? 问题大概是组件的name值不对应,vue2修改组件文件的name值,vue3保持组件文件名称和路由页面配置的name一致就可以了,如果vue3不想保持一致,必须手动在文件后面添加export..…...
Windows逆向工程入门之指针类型
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 1. 指针特性 1.1 指针的优点 1.2 指针的缺点 2. 智能指针 2.1 智能指针的优点 2.2 智能指针的缺点 3. 指针的安全攻防 3.1 指针使用 3.2 指针运算 3.3 指针引用 3.4 参数传递 …...

PHP+Apache+MySQL安装(Windows)
一、安装教程 参考链接1 参考链接2 二、问题描述 PHP安装目录下找不到php8apache2_4.dll PHP安装包下载错误 Apache Service Monitor: request operation has failed! 定位问题: 查看【事件查看器】 解决问题 安装或更新与PHP版本相对应的Visual C Redistribu…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...