ORB特征点检测

ORB(Oriented FAST and Rotated BRIEF)特征是一种用于图像中的关键点检测和描述的算法,它是由Oriented FAST和Rotated BRIEF组合而成的,因此叫做ORB。目前来说是一个速度较快,稳定性较高的特征点检测和提取算法,许多关于图像拼接还有目标追踪技术都会使用ORB特征进行实现。

1 ORB快速了解

ORB特征具有以下特点:

  • 它是一种二进制的特征向量,只包含0和1,可以节省内存空间和计算时间。
  • 它是一种旋转不变和尺度不变的特征,可以处理图像的旋转和缩放变换。
  • 它是一种快速和稳定的特征,可以在实时和动态的场景中运行。

ORB特征的生成过程可以分为以下几个步骤:

  • 使用FAST算法在图像金字塔的每个层级上检测关键点,FAST算法是一种基于像素灰度差异的角点检测方法,可以快速筛选出候选的特征点。
  • 使用灰度质心法为每个关键点分配一个方向,灰度质心法是一种根据关键点周围的灰度分布计算出一个方向向量的方法,可以使特征具有旋转不变性。
  • 使用rBRIEF算法为每个关键点生成一个二进制的特征描述符,rBRIEF算法是一种根据关键点的方向旋转随机像素对,并比较它们的灰度值的方法,可以使特征具有尺度不变性。

ORB = Oriented FAST(特征点) + Rotated BRIEF(特征描述)

2 FAST 快速寻找特征点

FAST,那么显而易见的是这个算法主要解决的是算法的速度问题。那么FAST解决方案的核心思想是:某像素值与周围领域内的像素值若存在较大差异,则该像素可能是特征点。

其具体做法如下:确定候选焦点、使用非极大值抑制算法

2.1 确定候选角点 (Segment Test)

来自:https://zhuanlan.zhihu.com/p/91479558

(1)选择一个像素点P,其像素值为I_p,以P为圆心,半径为3,确立一个圆,圆的边界可能会经过16个像素,记为p_1, p_2, ... p_{16}
(2)确定一个阈值:t,例如:t = 0.2 * I_p
(3)判断P 与 p_n 像素值之间的差值是否大于t,如果连续有m个像素的差满足条件,则该点被选为候选点。m的取值通常为:9, 11, 12

补充:
由于在检测特征点时是需要对图像中所有的像素点进行检测,然而图像中的绝大多数点都不是特征点,如果对每个像素点都进行上述的检测过程,那显然会浪费许多时间,因此FAST采用了一种进行非特征点判别的方法。对于每个点都检测第1、5、9、13号(即上下左右)像素点,如果这4个点中至少有3个满足条件,则继续对该点进行16个邻域像素点都检测的方法,否则则判定该点是非特征点(也不可能是角点,如果是一个角点,那么上述四个像素点中至少有3个应该和点相同),直接剔除即可。

2.2 非极大值抑制

经过2.1的角点筛选,相邻的像素点是极有可能被认为是角点,所以需要将相邻的角点进行删除。这和机器视觉中的非极大值抑制是一样的。

  • 假设有两个相邻的像素:P, Q。分别计算两个像素及其16个像素点之间的插值,计算所有像素值之差的和,记为sigma_v。
  • 如果sigma_v小于阈值V,则说明两块像素之间极为相似。则将其中一个点去除。

2.3 Oriented FAST

Fast角点本不具有方向,由于特征点匹配需要,ORB对Fast角点进行了改进,改进后的 FAST 被称为 Oriented FAST,具有旋转和尺度的描述。
总体来说:

  • 尺度不变性(缩放不变性):使用图像金字塔解决
  • 旋转不变性:使用质心标定方向

(1)尺度不变性


来自:https://zhuanlan.zhihu.com/p/261966288

如上图所示就是一个图像金字塔,每一层就是经过一次下采样的结果,将图像缩小。ORB 创建好图像金字塔后,会使用 FAST 算法从每个级别不同大小的图像中快速找到关键点。因为金字塔的每个级别由原始图像的更小版本组成,因此原始图像中的任何对象在金字塔的每个级别也会降低大小。
(2)旋转不变性


来自:https://blog.csdn.net/ldk3679/article/details/105370443

假设得到了一个关键点p,和一个半径为3的圆。如上图所示,O就是关键点,C就是质心。圆圈圈出来的区域就是一个图像块,于是在这个图像块中,我们可以计算图像块的矩:


其中x,y表示像素坐标,I( x, y ) 表示此像素坐标的灰度值

最后图像块的方向就能够通过一个角度描述。

3 BRIEF 使用二进制对检测到的特征点描述

RIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度直方图描述特征点的传统方法,采用二级制、位异或运算,大大的加快了特征描述符建立的速度,同时也极大的降低了特征匹配的时间,是一种非常快速,很有潜力的算法。

ORB 现在使用修改后的 BRIEF 版本创建特征向量,这个修改后的 BRIEF 版本称为 rBRIEF,即 Rotation-Aware BRIEF。无论对象的方向如何,它都可以为关键点创建相同的向量,使得 ORB 算法具有旋转不变性,意味着它可以在朝着任何角度旋转的图像中检测到相同的关键点。
和 BRIEF 一样 rBRIEF 首先在给定关键点周围的已界定区域中随机选择 256 个像素对,以构建 256 维的位向量。然后根据关键点的方向角度旋转这些随机像素对,使随机点的方向与关键点的一致。最后, rBRIEF 对比随机像素对的亮度并相应地分配 1 和 0 创建对应的特征向量。

4 代码示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:lowkeyway time:11/13/2019

import sys
import cv2 as cv
import numpy as np

def main_func(argv):
    imgCat = cv.imread("cat.png")
    imgSmallCat = cv.imread("smallCat.png")

    orb = cv.ORB_create()

    kpCat, desCat = orb.detectAndCompute(imgCat,None)
    kpSmallCat, desSmallCat = orb.detectAndCompute(imgSmallCat, None)

    bf = cv.BFMatcher_create(cv.NORM_HAMMING, crossCheck=True)

    matches = bf.match(desCat, desSmallCat)
    matchImg = cv.drawMatches(imgCat, kpCat, imgSmallCat, kpSmallCat, matches, None)

    cv.imshow("Cat", imgCat)
    cv.imshow("SmallCat", imgSmallCat)
    cv.imshow('match', matchImg)

    cv.waitKey(0)

if __name__ == '__main__':
    main_func(sys.argv)

由此可见ORB算法在相同的物体和相同的状态下的关键点选取和特征匹配是较好的,但是在光线和状态不同的情况下的匹配是较差的。

参考博客:
【1】https://zhuanlan.zhihu.com/p/91479558
【2】https://zhuanlan.zhihu.com/p/261966288
【3】https://zhuanlan.zhihu.com/p/481373935

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容