【图像处理】FAST、BRIEF、ORB算法原理

news2024/10/6 8:37:45

整理FAST、BRIEF、ORB算法的原理。

FAST算法

一、FAST简介

FAST(features from accelerated segment test)是一种角点检测算法,可以用于提取特征点,后来也长用于目标跟踪等计算机视觉任务中。FAST角点检测算法最初由 Edward Rosten 和 Tom Drummond 提出,并于2006年正式发表。如名字所示,FAST算法最大的优势就是计算效率,相比于其他特征检测算法(例如SIFT、SUSAN、Harris和DOG等)更加快速。此外,通过应用机器学习方法,FAST可以在计算时间和资源等方面得到进一步的性能提升。由于快速高效的性能,FAST角点检测算法非常适合实时视频处理应用。

二、FAST算法原理

FAST角点检测算法主要考虑像素点邻域的圆形窗口上的16个像素。如下图所示,作者认为,以像素 p 为中心的周围圆环上的16个像素中,如果有连续 n 个像素点的灰度值都比 p 点的灰度值大或都小,则认为 p 是一个角点

实际上,在比较像素灰度值时,需要加上一个阈值 t
S p → x = { d , I p → x ≤ I p − t ( d a r k e r ) s , I p − t < I p → x < I p + t ( s i m i l a r ) b , I p − t ≤ I p → x ( b r i g h t e r ) 其 中 , p → x   表 示 像 素 点 p 周 围 圆 环 上 的 像 素 点 x , ( x = 1 , 2 , . . . , 16 ) , S p → x 表 示 p 点 灰 度 对 应 的 区 间 类 别 S_{p \rightarrow x} = \begin{cases} d, \quad I_{p \rightarrow x} \leq I_{p}-t \quad (darker)\\ s, \quad I_{p}-t < I_{p \rightarrow x} < I_{p}+t \quad (similar)\\ b, \quad I_{p}-t \leq I_{p \rightarrow x} \quad (brighter) \end{cases}\\ 其中,p \rightarrow x\ 表示像素点p周围圆环上的像素点x,(x=1,2,...,16),S_{p \rightarrow x}表示p点灰度对应的区间类别 Spx=d,IpxIpt(darker)s,Ipt<Ipx<Ip+t(similar)b,IptIpx(brighter)px px(x=1,2,...,16),Spxp
也就是说,如果 p 点邻域有连续 n 个点比较的结果为 S p → x = d   或   b S_{p \rightarrow x} = d \ 或 \ b Spx=d  b,则认为 p 是角点。一般情况下, n 取12,称为FAST-12;实际中, n=9 的效果会更好一些。

由上面的分析可知,对于图像上的每个像素点,我们都需要遍历其邻域圆环上的16个像素点。实际的运用中,我们可以采用一种更加高效的检测方法,只需要检测第1,9,5和13四个位置的像素,就可以剔除掉一大部分非角点的像素。具体的做法是:

先检测第1和第9个像素,如果它们都与中心像素点 p 相似(即 S p → x = s S_{p \rightarrow x} = s Spx=s),说明点 p 不是角点;否则继续检测第5和第13个像素点,如果这4个像素点中至少有3个像素点不相似( S p → x = d   或   b S_{p \rightarrow x} = d \ 或 \ b Spx=d  b),则可以认为点 p 是角点,否则 p 肯定不是角点。

如果你已经理清楚了上面的4点检测思想,可以跳过下面这段补充理解:

  1. 首先,上面的4点检测方法是针对 n=12 而言的,对于 n=9 不适用
  2. 另外,对于 n=12 的情况,即需要保证连续12个像素点的灰度值均大于或小于中心像素点才是角点。因此,如果第1和第9个像素都与中心像素相似,则无论如何都不可能保证连续12个像素满足角点的条件,即此时的p不可能是角点;
  3. 若继续考虑第5和第13个像素(即1,5,9,13一起考虑),如果不能满足至少3个像素与 p 不相似,显然 p 就无法保证连续12个点与它不相似的条件, p 就肯定不是角点;
  4. 否则,可以认为 p 是一个角点。事实上这是一种粗略的角点筛选,检测这4个点只能保证剔除不是角点的像素,还无法保证这个点就是角点。如果想要提高检测精度,可以继续检测完全部的16个像素,毕竟在剔除大部分非角点像素后,即使再检测完16个像素的计算量也会比原来少了很多。

上述方法的缺点:

  1. n<12 时,上述的高效检测方法不再适用
  2. 检测的效率依赖于选择的4个点的检测顺序和角点附近的分布
  3. 多个特征点检测的结果可能彼此相邻(可以通过非极大值抑制来解决)

三、非极大值抑制

  1. 计算每个特征点的score(定义为中心像素与其周围16个像素点灰度值的差的绝对值之和)
  2. 对于相邻的特征点,比较它们的score值,对score值较小的特征点会被删除

四、FAST算法总结

  1. FAST角点检测算法最大的特点就是速度快
  2. FAST检测角点的数量依赖于一个 t 值,需要人为设置, t 越大,检测到的角点数量越少
  3. 受图像噪声影响大
  4. FAST没有尺度不变性和旋转不变性

BRIEF算法

一、BRIEF简介

BRIEF(Binary Robust Independent Elementary Features)是一种特征描述子,而不是一种特征提取算法,因此不同于Harris、FAST、SIFT、SURF等特征检测算法。BRIEF算法由Michael Calonder等人在ECCV2010上上提出,采用了二进制串来描述特征,相比于SIFT的浮点型描述子而言,BRIEF描述子生成的速度更快,且其特征匹配速度也大大提升。

二、BRIEF算法原理

BRIEF算法的主要思想是,在特征点邻域的 s×s 窗口内随机选取 n 个点对,通过比较这些点对来生成一个二进制串作为该特征点的特征描述子。

注意:BRIEF只是特征描述子,特征点的提取要靠别的特征提取算法来完成,如FAST等。

具体的步骤:

  1. 先对整幅图像提取特征点

  2. 为了减少噪声影响,对图像进行高斯滤波(因为BRIEF随机选取点对,对噪声比较敏感)

  3. 对于某个特征点,在其 s×s 的邻域内随机选取一个点对,比较两个点的大小
    T ( x , y ) = { 1 , i f   p ( x ) < p ( y ) 0. o t h e r w i s e 其 中 , p ( x ) 、 p ( y ) 分 别 为 随 机 点 对 ( x , y ) 的 灰 度 值 T(x,y)=\begin{cases} 1, \quad if\ p(x)<p(y)\\ 0. \quad otherwise\end{cases}\\ 其中,p(x)、p(y)分别为随机点对(x,y)的灰度值 T(x,y)={1,if p(x)<p(y)0.otherwisep(x)p(y)(x,y)

  4. 重复第3步 n 次,将 n 次比较的结果组合一个二进制串作为该特征点的特征描述子。一般 n 取128,256或512。

三、随机点对的选取

假设在特征点 s×s 的邻域内随机选取的某个点对为(x,y),作者提供了5种方法:

  1. x和y都采用均匀分布采样
  2. x和y都采用 ( 0 , s 2 25 ) (0,\frac{s^{2}}{25}) (0,25s2) 的高斯分布各向同性采样
  3. x服从高斯分布 ( 0 , s 2 25 ) (0,\frac{s^{2}}{25}) (0,25s2) ,y服从高斯分布 ( 0 , s 2 100 ) (0,\frac{s^{2}}{100}) (0,100s2)
  4. x和y均在空间量化极坐标下的离散位置随机采样
  5. x固定在(0,0)位置,y在邻域内随机选取

这里写图片描述

这里写图片描述

四、BRIEF特征匹配

因为是很简单的二进制串,BRIEF算法直接采用汉明距离来匹配两个特征点。(注意:汉明距离是指两个二进制串中对应位置不同元素的个数)

经过大量实验数据测试,对于 n=256 即256维的BRIEF特征描述子,不匹配特征点的描述子的汉明距离在128左右,匹配点对描述子的汉明距离则远小于128。

因此,可以通过以下方法来判断特征点是否匹配:

  1. 两个特征点的二进制串对应位置相同元素个数小于128的,一定不配对;
  2. 一幅图上特征点与另一幅图上二进制串对应位置相同元素的个数最多的特征点配成一对。

五、BRIEF优缺点

优点: 算法简单,时间和空间复杂度较低,特征匹配快

缺点: 容易受噪声影响,不具有尺度不变性和旋转不变性

ORB算法

一、ORB简介

ORB(Oriented Fast and Rotated Brief)是一种特征提取算法,它将FAST和BRIEF算法结合起来并做了改进。ORB算法的速度非常快,并且解决了BRIEF描述子不具备旋转不变性的问题,ORB算法是最常见的传统特征检测算法之一。

二、ORB算法原理

ORB算法的核心就是,使用FAST算法进行特征检测,然后使用BRIEF算法来进行特征描述。

当然,如果ORB算法就仅仅到此为止,那就没什么特点了,所以它在此基础上做了一些改进。由前面的介绍知道,FAST和BRIEF算法并没有解决图像旋转不变性和尺度不变性的问题。ORB算法其实也没有解决尺度不变性的问题,但是在OpenCV的ORB算法的实现中通过引入图像金字塔来改善了这方面的性能。ORB算法主要解决了BRIEF描述子不具备旋转不变性的问题,具体的做法是:

ORB算法提出了灰度质心法,即计算特征点邻域内所有像素的灰度质心,而通过特征点与质心就可以得到一个向量,将这个向量作为特征点的方向,当图像发生旋转时,通过计算主方向旋转的角度就可以得到图像的旋转变换信息,从而实现旋转不变性。

img

如上图所示,P为特征点,Q为邻域内的灰度质心,向量PQ就是特征点的方向。质心的计算方法如下:
m 00 = ∑ x = − r r ∑ y = − r r I ( x , y ) m 10 = ∑ x = − r r ∑ y = − r r x I ( x , y ) m 01 = ∑ x = − r r ∑ y = − r r y I ( x , y ) 将 上 面 公 式 统 一 起 来 就 是 : m i j = ∑ x = − r r ∑ y = − r r x i y j I ( x , y ) 其 中 , I ( x , y ) 是 像 素 点 ( x , y ) 的 灰 度 值 , i , j 只 取 0 或 1 , r 为 邻 域 半 径 。 于 是 , 灰 度 质 心 可 以 表 示 为 : Q = ( m 10 m 00 , m 01 m 00 ) 因 此 , P Q ⃗ 就 是 特 征 点 的 方 向 , 特 征 点 的 角 度 表 示 为 : θ = a r c t a n ( m 01 , m 10 ) m_{00}=\sum_{x=-r}^{r}\sum_{y=-r}^{r} I(x,y)\\ m_{10}=\sum_{x=-r}^{r}\sum_{y=-r}^{r} xI(x,y)\\ m_{01}=\sum_{x=-r}^{r}\sum_{y=-r}^{r} yI(x,y)\\ 将上面公式统一起来就是:m_{ij}=\sum_{x=-r}^{r}\sum_{y=-r}^{r} x^{i}y^{j}I(x,y)\\ 其中,I(x,y)是像素点(x,y)的灰度值,i,j只取0或1,r为邻域半径。于是,灰度质心可以表示为:\\ Q=(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}})\\ 因此,\vec{PQ}就是特征点的方向,特征点的角度表示为:\\ \theta = arctan(m_{01},m_{10}) m00=x=rry=rrI(x,y)m10=x=rry=rrxI(x,y)m01=x=rry=rryI(x,y)mij=x=rry=rrxiyjI(x,y)I(x,y)(x,y)i,j01,rQ=(m00m10,m00m01)PQ θ=arctan(m01,m10)
Steer BRIEF:

得到了特征点的角度 θ \theta θ,接下来任务就是如何让BRIEF具备旋转不变性了,实现这个目标的方法就是 “Steer BRIEF”。我们知道,BRIEF是通过n个点对来产生一个描述向量的。我们将这n个点对组成一个矩阵S:
S = [ x 1 x 2 . . . x 2 n y 1 y 2 . . . y 2 n ] S=\begin{bmatrix} x_{1} & x_{2} &... & x_{2n}\\ y_{1} & y_{2} & ... & y_{2n}\end{bmatrix} S=[x1y1x2y2......x2ny2n]
然后构造一个旋转矩阵,将S旋转到相应的方向上:
S θ = R θ S 其 中 , R θ 为 旋 转 矩 阵 : R θ = [ c o s θ s i n θ − s i n θ c o s θ ] S_{\theta} = R_{\theta}S\\ 其中,R_{\theta}为旋转矩阵:R_{\theta}=\begin{bmatrix} cos\theta & sin\theta\\ -sin\theta & cos\theta\end{bmatrix} Sθ=RθSRθRθ=[cosθsinθsinθcosθ]
然后就可以用 S θ S_{\theta} Sθ 作为校正后的BRIEF描述子了。

参考资料

第十四节、FAST角点检测(附源码) https://www.cnblogs.com/zyly/p/9542164.html

BRIEF 特征点描述算法 https://blog.csdn.net/Chenyukuai6625/article/details/75195935

第十六节、基于ORB的特征检测和特征匹配 https://www.cnblogs.com/zyly/p/9622873.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LL(1)文法分析程序

一、实验目的 设计一个非递归预测分析器&#xff0c;实现对表达式语言的分析&#xff0c;理解自上而下语法 分析方法的基本思想&#xff0c;掌握设计LL&#xff08;&#xff09;文法分析程序设计的基本原理和方法。 根据给定LL&#xff08;1&#xff09;分析表&#xff0c;输入…

22-31-spark-核心编程-RDD概念及理解

22-spark-核心编程-RDD概念&#xff1a; 分布式计算基础测试&#xff1a; big-data-study\Spark-demo\src\main\java\spark\core\com\zh\test02 Spark 核心编程 Spark 计算框架为了能够进行高并发和高吞吐的数据处理&#xff0c;封装了三大数据结构&#xff0c;用于处理不同的…

vscode 离线安装ssh

首先打开官方插件地址&#xff1a;https://marketplace.visualstudio.com/VSCode 然后输入ssh 下载这两个插件&#xff1a; 安装这两个插件&#xff1a; 这样便在windows下安装成功了ssh。 接下来需要在服务器端进行配置。 首先查看windows上的vscode版本&#xff1a; 这…

Arduino 崩溃或挂起的 7 种方式及如何防止

Arduino 崩溃或挂起的 7 种方式&#xff08;以及如何防止它发生&#xff09; 作者&#xff1a;Chris in Arduino 查看原文 为了帮助防止Arduino崩溃或挂起&#xff0c;我进行了一系列实验&#xff0c;以确定Arduino崩溃&#xff0c;挂起&#xff0c;重置&#xff0c;冻结&am…

5.大型电商项目之创建前端展示模板并调用

1. templates前端模板的使用 1.1 templates前端模板的创建 首先&#xff0c;我们页面很多地方是相似的&#xff0c;这里就创建一个基础模板&#xff0c;不同的地方&#xff0c;对模板内容的block进行修改即可&#xff1b;对于相同的地方&#xff0c;我们就使用include包含即可…

B. Hossam and Friends #837 div2

Problem - B - Codeforces 题意就是给你m个数对&#xff0c;这两个人不是好朋友&#xff0c;其他的所有人都是好朋友&#xff0c;问1~n里面有多少个区间里面所有数都是好朋友 分析: 这题我分析的没错&#xff0c;但是在计算区间的时候&#xff0c;想的复杂了&#xff0c;用模…

JS中,a标签里的javascript:;和 javascript:void(0)还有##

目录 1. javascript:;【常用】点击链接之后不会刷新页面&#xff0c;不会跳转链接&#xff0c;也不会传递参数 2. javascript:void(0) 【少用】点击链接后不会刷新页面&#xff0c;不会跳转链接&#xff0c;也不会传递参数 3. a标签中的# 点击链接后会刷新页面…

Spring Batch批处理-作业Job简介

引言 书接上篇Spring Batch 批处理入门案例解析&#xff0c;上篇带小伙伴们写了一个Spring Batch 入门案例解析&#xff0c;本篇就开始批处理正文啦&#xff0c;今天先对作业Job做个全面了解。 作业介绍 目前很多项目都流程的概念&#xff0c;比如web应用&#xff0c;集成应…

Java基础03_数据类型

数据类型 强类型语言 要求变量的使用要严格符合规定&#xff0c;所有的变量必须先定义后使用&#xff1b;安全性高但是速度低&#xff1b; 弱类型语言 例如&#xff1a;‘12’ 3 123 或者 ‘12’ 3 ‘123’ 在强类型语言中是有明显的区别的。而在弱类型语言中是不区分的…

算符优先分析器的构造

一、实验目的 &#xff08;1&#xff09;理解自底向上的语法分析的基本思想。 &#xff08;2&#xff09;理解算符优先文法的概念。 &#xff08;4&#xff09;掌握算符优先分析器的工作原理和工作流程。 &#xff08;3&#xff09;掌握算符分析表和优先函数的构造。 二、实验…

函数式接口

Lambda表达式的本质&#xff1a;作为函数式接口的实例 如果一个接口中&#xff0c;只声明一个抽象方法&#xff0c;则此接口就称为函数式接口 FunctionalInnterface public interface MyInterface{void method1(); }要想用Lambda表达式就一定要在函数式接口的条件下使用 相当于…

微信小程序直播状态接口如何获取

现如今&#xff0c;小程序直播非常的红火&#xff0c;越来越多的商家开通了微信小程序直播&#xff0c;但是在直播的过程中&#xff0c;偶尔会出现一些小问题&#xff0c;如禁播&#xff0c;异常状态等等&#xff0c;下面小编就来介绍一下微信小程序直播状态接口如何获取。 一、…

echarts5.4立体柱状图

资源下载&#xff1a;https://www.jsdelivr.com/package/npm/echarts 效果图&#xff1a; 借鉴资源&#xff1a;echarts 如何绘制三维 3D 立体柱状图 - 简书 代码示例&#xff1a; <!DOCTYPE html> <head><meta charset"utf-8"><title>ECh…

基于51单片机的智能小车系统设计

原理图&#xff1a; 程序运行图&#xff1a; 部分程序&#xff1a; /******************************************************************************* * 文件名称&#xff1a;main.c * 说明&#xff1a;本文件为小车控制的主函数 * 功能&…

分布式websocket探索

单体式架构 根据基于golang的gin框架开发的web项目所展开 如果一个Web项目采用单体式架构且配备了websocket通讯的功能&#xff0c;那么在单个实例中是能够正常运行的 在我的项目中&#xff0c;用户可以通过websocket来进行实时通讯和实时消息通知&#xff0c;同时如果在web业务…

AcrelEMS-IDC数据中心综合能效管理系统解决方案-Susie 周

1、概述 安科瑞电气紧跟数据中心发展形式&#xff0c;推出AcrelEMS-IDC数据中心综合能效管理解决方案&#xff0c;包含有电力监控、动环监控、消防监控、能耗统计分析、智能照明控制以及新能源监测几个子系统。集成了变配电监测、电源备自投、电气接点测温、智能照明控制、电能…

yearning搭建及使用

yearning搭建及使用 数据库审计管理&#xff0c;是数据安全规范中不可或缺的一环&#xff0c;通过审计管理我们能够把控、追溯sql执行情况。yearning作为一款开源的数据库审计软件&#xff0c;是我们开发运维工作中经常打交道的一个“伙伴”。 yearning提供的核心功能就是sql…

mysql 自增字段、属性

mysql自增属性 参考文章 https://www.php.cn/mysql-tutorials-489209.html https://blog.csdn.net/qq_41045806/article/details/108310772 在Mysql中&#xff0c;可以为某一属性设置自增属性&#xff0c;可以很好地为我们解决属性值重复的问题。 在mysql中&#xff0c;使用au…

DevExpress Universal全面的软件开发包

DevExpress Universal全面的软件开发包 DevExpress Universal帮助您使用所有DevExpress单平台控件等为Windows、Web、移动和平板电脑构建应用程序。它包括桌面控件(WinForms、WPF、UWP和桌面报告)、Web控件(ASP.NET、ASP.NET MVC和Core、Bootstrap Web Forms、JavaScript-jQuer…

第十章用Python获取sqlite、MySQL、Excel、csv、json中的数据

这里写目录标题项目背景获取sqlite3中的数据sqlite3库获取sqlite数据pandas库获取sqlite数据获取MySQL中的数据pymsql库获取MySQL数据pandas库获取mysql数据获取Excel中的数据xlrd库获取Excel数据pandas库获取Excel数据获取csv中的数据csv库读取csv数据pandas读取csv数据获取js…