ORB - (Oriented Fast and Rotated BRIEF)算法

ORB - (Oriented Fast and Rotated BRIEF)

ORB detector 使用 FAST detector 和 BRIEF descriptor 基本思路。在介绍 ORB 之前,首先对 FAST 与 BRIEF 进行说明。

1 FAST

FAST(Featrues from Accelerated Segment Test),其基本思想是比较当前点与周边点差异,当周边有连续不少于一半的点均比中间点亮或者暗,则认为该点为一个特征点。其中,亮或暗的定义为:

使用以上定义,可以迅速找到图像中候选特征点。

由于需要满足不少于一半的连续周边点亮于或暗于中间点,可以首先检测水平与垂直方向上四个点,当少于两个连续点满足条件,则该点一定不是候选特征点。如此可以提升计算效率。

当完成候选特征点扫描后,会发现存在许多临近特征点,可以使用如下评分进行非极大值抑制:

以上即为FAST的基本思想,opencv实现在cv::FastFeatureDetector中,参数threshold 定义了亮或暗,nonmaxSuppression确定是否排除临近点。

 2 BRIEF

BRIEF 对特征点生成描述特征向量。在 SIFT 与 SURF 中均使用了块特征描述方案,使用不同小块的方向梯度直方图构成特征向量。BRIEF 使用点特征描述特征点,基本思想为:

1)在特征点区域内随机生成 N 个点对,这N个点对生成方式有很多种,但一旦生成,对于所有特征点描述均使用相同的点对模式;

2)由于需要对孤立点进行比较,所以首先平滑图像以抑制噪声;

3)构造 N 位向量,第 k 个点对生成第 k 位向量,当点对中前一个点大于后一个点,其值为  1,反之为 0;

opencv 实现在 cv::BriefDescriptorExtractor 中,参数 bytes 确定特征点描述向量长度为 bytes * 8。

 结合 FAST 与 BRIEF,可以实现类似 SIFT 与 SURF 的功能,以下给出简单使用代码:

cv::FastFeatureDetector detector(20);

std::vector<cv::KeyPoint> keypoints1, keypoints2;

detector.detect(img1, keypoints1);

detector.detect(img2, keypoints2);


cv::BriefDescriptorExtractor brief;

cv::Mat descriptors1, descriptors2;

brief.compute(img1, keypoints1, descriptors1);

brief.compute(img2, keypoints2, descriptors2);


// 不同于SIFT与SURF,这里使用汉明距离

cv::BFMatcher matcher(cv::NORM_HAMMING);

std::vector<DMatch> matches;

matcher.match(descriptors1, descriptors2, matches);

其匹配结果如下:

3 ORB

ORB 主要思想如下:

1)使用 FAST 提取候选特征点;

2)为了克服 FAST 可能产生的边缘响应,使用 Harris corner measure 保留角点响应,剔除边缘响应(边缘响应不利于匹配);

3)按以上方法在不同层级图像金字塔上搜索候选特征点;

 4)使用归一化图像描述特征点方向  uploading.4e448015.gif

ORB采用FAST(features from accelerated segment test)算法来检测特征点。FAST核心思想就是找出那些卓尔不群的点即拿一个点跟它周围的点比较,如果它和其中大部分的点都不一样就可以认为它是一个特征点

备注:每个小方格代表一个像素,方格内的颜色只是为了便于区分,不代表该像素点的颜色。

FAST具体计算过程:

1. 从图片中选取一个像素点P,下面我们将判断它是否是一个特征点。我们首先把它的密度(即灰度值)设为Ip。

2. 设定一个合适的阙值t :当2个点的灰度值之差的绝对值大于t时,我们认为这2个点不相同。

3. 考虑该像素点周围的16个像素。(见上图) 

4. 现在如果这16个点中有连续的n个点都和点不同,那么它就是一个角点。 这里n设定为12。       

5. 我们现在提出一个高效的测试,来快速排除一大部分非特征点的点。该测试仅仅检查在位置1、9、5和13四个位置的像素(首先检查1和9,看它们是否和点相同。如果是,再检查5和13)。如果是一个角点,那么上述四个像素点中至少有3个应该和点相同。如果都不满足,那么不可能是一个角点。

图中红色的点为使用FAST算法找到的特征点。

BRIEF的优点在于速度,缺点也相当明显:

1:不具备旋转不变性。

2:对噪声敏感

3:不具备尺度不变性。

ORB就是试图解决上述缺点中的1和2.

1、算法介绍

ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出。ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FAST(Features from  Accelerated Segment Test)算法发展来的,特征点描述是根据BRIEF(Binary Robust IndependentElementary Features)特征描述算法改进的。ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上做了改进与优化。据说,ORB算法的速度是sift的100倍,是surf的10倍

角点(Corner Point)

通常意义上来说,角点就是极值点,即在某方面属性特别突出的点,是在某些属性上强度最大或者最小的孤立点、线段的终点。 对于图像而言,如图所示圆圈内的部分,即为图像的角点,其是物体轮廓线的连接点。

ORB特征提取实验

实验代码用opencv中的ORB特征提取和匹配实验

(1)

(2)

(3)

ORB特征匹配

从上图(1)(2)(3)可以看出,ORB算法的特征匹配效果比较理想,并且具有较稳定的旋转不变性。但是,ORB算法在尺度方面效果较差,在增加算法的尺度变换的情况下仍然没有取得较好的结果

ORB是一种快速的特征提取和匹配的算法。它的速度非常快,但是相应的算法的质量较差。和sift相比,ORB使用二进制串作为特征描述,这就造成了高的误匹配率。

参考文献,文章内容参考以下,仅做知识点记录使用

https://www.cnblogs.com/luofeiju/p/13578179.html

https://blog.csdn.net/yang843061497/article/details/38553765

https://blog.csdn.net/sunanger_wang/article/details/7949202

https://blog.csdn.net/zouzoupaopao229/article/details/52625678

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值