我正在尝试使用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。我不知道参数描述符应该是什么类型以及如何打印二进制字符串。能够感谢一些帮助,谢谢。
答案 0 :(得分:2)
descriptors
参数应该是二维矩阵Mat
(来自org.opencv.core.Mat
):
NxD
其中N = number of keypoints
(行)和D = descriptor dimension = 32
(列),CV_8UC1
,即每个矩阵值都是一个字节(a.k.a 8位单通道矩阵)。每个描述符可以通过将32个字节连接成由256位组成的字节数组来表示,这就是为什么论文将其称为二进制字符串。
有关详细信息,请参阅ORBDescriptorExtractorTest.java
。