当前位置 博文首页 > 微信号:Custom-Software:ORB - (Oriented Fast and Rotated BR

    微信号:Custom-Software:ORB - (Oriented Fast and Rotated BR

    作者:[db:作者] 时间:2021-06-24 15:15

    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

    下一篇:没有了