1

我正在尝试使用 JavaCV 使用 ORB 算法实现图像识别。根据一些论文[1][2],ORB 关键点描述符是一个二进制字符串。那么,在获取图像的关键点后如何获取这个二进制字符串呢?

这是我获得关键点的代码

KeyPoint keypoints = new KeyPoint();
ORB orb = new ORB(MAX_FEATURES, (float) 1.2, 8, 1, 0, 2, 5, 31);
orb.detect(originalImg, greyScaleImg, keypoints);

获取描述符的代码应该是:

DescriptorExtractor descriptor = orb.getDescriptorExtractor();
descriptor.compute(greyScaleImg, keypoints, descriptors);

由于没有关于描述符函数的文档,javadocs 也没有。我不知道参数描述符应该是什么类型以及如何打印二进制字符串。不胜感激,谢谢。

4

1 回答 1

2

descriptors参数应该是一个二维矩阵Mat(来自org.opencv.core.Mat):

  • 维度:NxD哪里N = number of keypoints(行)和D = descriptor dimension = 32(列),
  • type: CV_8UC1,即每个矩阵值都是一个字节(又名 8 位单通道矩阵)。

每个描述符可以通过将 32 个字节连接成一个由 256 位组成的字节数组来表示,这就是论文将其称为二进制字符串的原因。

有关ORBDescriptorExtractorTest.java更多详细信息,请参阅。

于 2012-10-02T17:01:07.067 回答