# BRIEF（Binary Robust Independent Elementary Features）

## 目标

在这一章当中

- 我们将看到 BRIEF 算法的基础知识

## 理论

我们知道 SIFT 使用 128 维向量作为描述子。由于它使用浮点数，因此需要 512 个字节。类似地，SURF 也至少需要 256 个字节（对于 64 维描述子）。为数千个特征点创建这样的向量需要大量的内存，这在资源有限的情况下是不可行的，特别是嵌入式系统。内存越大，匹配所需的时间越长。

但实际匹配时可能不需要所有的维度。我们可以使用 PCA，LDA 等几种方法对其进行压缩。甚至使用 LSH（Locality Sensitive Hashing，局部敏感哈希）等其他方法也可以将浮点数格式的这些 SIFT 描述子转换为二进制字符串。对这些二进制字符串使用汉明距离进行匹配。这样速度更快，因为计算汉明距离只需要进行异或和位计数，这在具有 SSE 指令的现代 CPU 中非常快。但是我们仍然需要先找到描述符，然后才能应用哈希方法，这并不能解决我们在内存上的初始问题。

这就需要 BRIEF 算法。它提供了直接查找二进制字符串而无需找到描述子的快捷方式。它采用平滑后的图像，并以特定的方式（在文中解释）选择一组$$n_d$$(x,y)位置对。然后在这些位置对上进行一些像素强度比较。例如，让第一个位置对为$$p$$和$$q$$。如果$$I(p)\lt I(q)$$，则其结果为 1，否则为 0。对所有$$n_d $$位置对进行对比以获得$$n_d$$维二进制字符串。

$$n_d$$可以是 128，256 或 512\。OpenCV 支持所有这些值，但默认情况下，它是 256（OpenCV 以字节表示它，所以这些值将对应 16，32 和 64）。获得这些二进制字符串后就可以使用汉明距离进行匹配。

重要的一点是，BRIEF 是一个特征点描述子，它没有提供任何方法来查找这些特征点。所以你必须使用任何其他特征检测器，如 SIFT，SURF 等。本文建议使用 CenSurE，这是一个快速检测器，而且 BREIF 算法对于 CenSurE 特征点的效果比 SURF 特征点稍微好。

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

## OpenCV 中的 BRIEF

下面的代码展示了在 CenSurE 检测器的帮助下计算 BRIEF 描述子的方法。 （CenSurE 探测器在 OpenCV 中被称为 STAR 探测器）

请注意，您需要 [opencv contrib](https://github.com/opencv/opencv_contrib) 来使用它。

```python
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('simple.jpg',0)
# Initiate FAST detector
star = cv.xfeatures2d.StarDetector_create()
# Initiate BRIEF extractor
brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
# find the keypoints with STAR
kp = star.detect(img,None)
# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)
print( brief.descriptorSize() )
print( des.shape )
```

函数 brief.getDescriptorSize()给出以字节为单位的$$n_d$$大小。默认情况下为 32。下一步是匹配，这将在另一章中完成。

## 其他资源

1. Michael Calonder, Vincent Lepetit, Christoph Strecha, and Pascal Fua, 
   "BRIEF: Binary Robust Independent Elementary Features", 11th European Conference on 
   Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010.
2. 维基百科的[LSH（Locality Sensitive Hashing）](https://en.wikipedia.org/wiki/Locality-sensitive_hashing)。
