用于计算机视觉的 ORB 数据:连续的项目是什么?

ORB data for computer vision: What are the items in a row?

我正在查看 MediaEval 2018 记忆力挑战 (here)。

他们描述的功能之一是 ORB 功能。我从挑战中获得了数据,我正在尝试了解 ORB 数据的工作原理。

如果我运行这个代码:

with open('/Memorability_data/ORB/video10-0.p', 'rb') as f: ##change the file name; just an example
  data = pickle.load(f)
  print(len(data))
  print(data[0])
  print(len(data[0]))
  print('*')
  for i in data[0]:
    print(i)

输出为:

500
((1143.0, 372.0), 31.0, 169.99649047851562, 0.001837713411077857, 0, -1, array([228, 118, 156,  58, 232, 237,  21, 206, 219, 127,  33,  56, 134,
       216,  79,  27, 129,  17, 234,  19,  39, 103, 202, 112,  20,  18,
        85, 127, 216,  89, 203,   7], dtype=uint8))
7
*
(1143.0, 372.0)
31.0
169.99649047851562
0.001837713411077857
0
-1
[228 118 156  58 232 237  21 206 219 127  33  56 134 216  79  27 129  17
 234  19  39 103 202 112  20  18  85 127 216  89 203   7]

所以我了解到每个视频都有一个文件,每个文件有 500 行,每一行看起来与上面类似。我想了解这些行的含义。

我找到了 this,他们描述:

static Ptr<ORB> cv::ORB::create (   int     nfeatures = 500,
float   scaleFactor = 1.2f,
int     nlevels = 8,
int     edgeThreshold = 31,
int     firstLevel = 0,
int     WTA_K = 2,
int     scoreType = ORB::HARRIS_SCORE,
int     patchSize = 31,
int     fastThreshold = 20 
)       

我不明白我文件中的数据是什么。它显然与我找到的示例不匹配(因为例如上面说行中的最后一个东西应该是一个 int (fastThreshold=20),而我行中的最后一个项目是一个列表)。

有人可以解释一下我的列表中的项目是什么,或者提供包含它的参考吗? (或者我收到的数据是否以某种方式 pre-processed,谁能告诉我)?我的最终目标是将这些数据转换为 CSV 文件,但我不知道标题应该是什么?

我发现了类似的SO问题(例如here and here),我看了其中一个答案中的论文,我仍然不清楚。

我不能确定每个字段的含义,但我想我可以猜到一些:

  • 第一个元组是特征的 x,y 位置(最可能的像素坐标)
  • 31 是特征的大小,由补丁大小给出
  • 169 应该是以度为单位的特征方向
  • 末尾的列表给出了该功能的描述。这是由 BRIEF 描述符生成的。它是 32 个 8 位值的列表。如果您为这些数字中的每一个生成位模式,您最终会得到 256 个 1 或 0。这是用于匹配的二进制特征描述。

您的 data[0] 变量的 7 个特征按顺序列出如下:

  1. _pt: 关键点的 x & y 坐标
  2. _size: 关键点直径
  3. _angle: 关键点方向
  4. _response:关键点检测器对关键点的响应(即关键点的强度)
  5. _octave:检测到关键点的金字塔八度
  6. _class_id: 对象 ID
  7. 描述符:关键点描述符特征

信息取自here