二进制鲁棒独立的基本特征(BRIEF)
BRIEF它二进制描述子。即是一段二进制串。BRIEF的作用是提取某个特征点周围像素信息。如果你不懂特征点是什么请参见FAST特征点提取与匹配算法教程Python实践。特征点提取算法只是知道了哪个像素点是特征点,但是我们提取特征点一般是用来目标跟踪三维重建之类的任务。而这些任务中有一个必备环节就是:找前后两帧图片哪两个特征点是同一个特征点。而为了找同一个特征点那就必须比较这些特征点周围像素信息是否相同。这个周围像素信息就是描述子,提取某个特征点周围像素信息就是BRIEF的作用。
BRIEF描述子有什么用?:判断两个特征点是否相同时的唯一标准是比较描述子是否相同。
BRIEF描述子怎么计算得到的?:
它在特征点周围取多对点。比如取128对点。每对点有两个像素点。举个例子:第i对点有两个p,q像素点,如果p比q大则前面提到的二进制串第i位取1,否则取0. 最终可以得到128位二进制串。
那怎么取这128对点呢?随机取。当然这个随机不是运行的时候随机取。而是预先设定好随机取哪些点。下面是ORB-SLAM这个开源项目的取点的代码截图。它们预先设定好很多对点相对当前点的位置,比如下面第一对点的相对位置为(8,-3),(9,5)。假如当前关键点的位置是(x,y)。那么我现在就确定找(x+8,y-3)和(x+9,y+5)这两个点的像素,然后比较它们像素值大小,如果前者大那BRIEF提取到的二进制串第一个值就是1,否则是0.
优点:随机取,而且是二进制。不管是生成二进制串描述子,还是进行串比较速度都是非常快。
缺点: 同一个特征点旋转后描述子就不同了,即不具有旋转不变性。
改进:ORB利用在FAST特征点提取阶段获取了关键点的方向,它改进后的Steer BRIEF具有较好的旋转不变性,和尺度不变性(放大缩小没影响)。
额外小知识
本文介绍了如何提取某个关键点周围像素信息。那我们怎么利用这些信息进行匹配找两张图片那些是同一个特征点呢?答:由于它是二进制描述子所以采用汉明距离进行匹配。什么是汉明距离?两个二进制串的汉明距离就是这两个串中对应位的二进制值不同的个数。即两者异或XOR后的结果中的1的个数。匹配的策略少量可以暴力搜索。量大的话则用快速近似最近邻(FLANN)
专注写认真的教程,你的赞和关注是支持我用心分享的动力!
参考文献:
[1] https://zhuanlan.zhihu.com/aitom
[2] https://medium.com/software-incubator/introduction-to-orb-oriented-fast-and-rotated-brief-4220e8ec40cf