![]() |
OpenCV 4.12.0
开源计算机视觉
|
在本章中
我们知道 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 是一种更快的特征描述符计算和匹配方法。除非存在较大的面内旋转,否则它也提供高识别率。
STAR 是一种从 CenSurE 派生的特征检测器。然而,与 CenSurE 使用正方形、六边形和八边形等多边形来接近圆形不同,Star 使用 2 个重叠的正方形来模拟圆形:1 个是直立的,1 个是旋转 45 度的。这些多边形是双层的。它们可以被视为具有粗边框的多边形。边框和封闭区域具有相反符号的权重。与其他尺度空间检测器相比,这具有更好的计算特性,并且能够进行实时实现。与 SIFT 和 SURF 在子采样像素处找到极值从而损害较大尺度下的准确性不同,CenSurE 在金字塔中的所有尺度上使用完整的空间分辨率创建特征向量。
以下代码显示了在 CenSurE 检测器的帮助下计算 BRIEF 描述符。
注意,你需要 opencv contrib) 才能使用它。
函数 brief.getDescriptorSize() 给出了以字节为单位使用的 \(n_d\) 大小。 默认情况下是 32。接下来是匹配,这将在另一章中完成。