OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
BRIEF (二进制鲁棒独立基本特征)

目标

在本章中

  • 我们将了解 BRIEF 算法的基础知识

理论

我们知道 SIFT 使用 128 维向量作为描述符。因为它使用浮点数,所以基本上需要 512 字节。类似地,SURF 也至少需要 256 字节(对于 64 维)。为数千个特征创建这样的向量需要大量内存,这对于资源受限的应用程序(尤其是嵌入式系统)来说是不可行的。内存越大,匹配所需的时间就越长。

但所有这些维度可能并非实际匹配所必需的。我们可以使用多种方法(如 PCA、LDA 等)对其进行压缩。甚至可以使用其他方法(如使用 LSH(局部敏感哈希)进行哈希)将这些 SIFT 描述符中的浮点数转换为二进制字符串。这些二进制字符串用于使用汉明距离匹配特征。这提供了更好的加速,因为找到汉明距离只是应用 XOR 和位计数,这在具有 SSE 指令的现代 CPU 中非常快。但是在这里,我们需要首先找到描述符,然后才能应用哈希,这并不能解决我们最初的内存问题。

BRIEF 在此时发挥作用。它提供了一种快捷方式,可以直接找到二进制字符串,而无需找到描述符。它采用平滑的图像块,并以独特的方式(在论文中解释)选择一组 \(n_d\) (x,y) 位置对。然后对这些位置对进行一些像素强度比较。例如,让第一个位置对为 \(p\) 和 \(q\)。如果 \(I(p) < I(q)\),则其结果为 1,否则为 0。这适用于所有 \(n_d\) 位置对,以获得 \(n_d\) 维位串。

这个 \(n_d\) 可以是 128、256 或 512。OpenCV 支持所有这些,但默认情况下它将是 256(OpenCV 以字节表示它。所以这些值将是 16、32 和 64)。因此,一旦你得到这个,你就可以使用汉明距离来匹配这些描述符。

一个重要的点是 BRIEF 是一种特征描述符,它不提供任何查找特征的方法。因此,您将必须使用任何其他特征检测器,如 SIFT、SURF 等。该论文建议使用 CenSurE,它是一种快速检测器,并且 BRIEF 在 CenSurE 点上的效果甚至略好于 SURF 点。

简而言之,BRIEF 是一种更快的特征描述符计算和匹配方法。除非存在较大的面内旋转,否则它也提供高识别率。

OpenCV 中的 STAR(CenSurE)

STAR 是一种从 CenSurE 派生的特征检测器。然而,与 CenSurE 使用正方形、六边形和八边形等多边形来接近圆形不同,Star 使用 2 个重叠的正方形来模拟圆形:1 个是直立的,1 个是旋转 45 度的。这些多边形是双层的。它们可以被视为具有粗边框的多边形。边框和封闭区域具有相反符号的权重。与其他尺度空间检测器相比,这具有更好的计算特性,并且能够进行实时实现。与 SIFT 和 SURF 在子采样像素处找到极值从而损害较大尺度下的准确性不同,CenSurE 在金字塔中的所有尺度上使用完整的空间分辨率创建特征向量。

OpenCV 中的 BRIEF

以下代码显示了在 CenSurE 检测器的帮助下计算 BRIEF 描述符。

注意,你需要 opencv contrib) 才能使用它。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('simple.jpg', cv.IMREAD_GRAYSCALE)
# 初始化 FAST 检测器
star = cv.xfeatures2d.StarDetector_create()
# 初始化 BRIEF 提取器
brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
# 使用 STAR 查找关键点
kp = star.detect(img,None)
# 使用 BRIEF 计算描述符
kp, des = brief.compute(img, kp)
print( brief.descriptorSize() )
print( des.shape )
CV_EXPORTS_W Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
从文件加载图像。

函数 brief.getDescriptorSize() 给出了以字节为单位使用的 \(n_d\) 大小。 默认情况下是 32。接下来是匹配,这将在另一章中完成。

附加资源

  1. Michael Calonder, Vincent Lepetit, Christoph Strecha, 和 Pascal Fua, "BRIEF: 二进制鲁棒独立基本特征", 第 11 届欧洲计算机视觉会议 (ECCV), Heraklion, Crete. LNCS Springer, 2010 年 9 月。
  2. LSH (局部敏感哈希) 在维基百科上。