Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

What exactly are ORB Descriptors

First of all I am completely new to openCV so I am sorry if this has an obvious answer.

Having the following code in Java:

FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);


Mat img1 = Highgui.imread("img1.png");
Mat img2 = Highgui.imread("img2.png");

Mat descriptors1 = new Mat();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();

detector.detect(img1, keypoints1);
descriptor.compute(img1, keypoints1, descriptors1);

Mat descriptors2 = new Mat();
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();

detector.detect(img2, keypoints2);
descriptor.compute(img2, keypoints2, descriptors2); 
//... Do stuff

I understand that the keypoints1 and keypoints2 are 500x7 arrays that each of these columns indicate x-y coordinates, size, angle, response, octave, class_id.

Each of the descriptors1 and descriptors2 are 500x32 arrays. My question is what does each of these 32 columns represent?

click to hide/show revision 2
retagged

updated 2015-02-03 08:17:49 -0600

berak gravatar image

What exactly are ORB Descriptors

First of all I am completely new to openCV so I am sorry if this has an obvious answer.

Having the following code in Java:

FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);


Mat img1 = Highgui.imread("img1.png");
Mat img2 = Highgui.imread("img2.png");

Mat descriptors1 = new Mat();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();

detector.detect(img1, keypoints1);
descriptor.compute(img1, keypoints1, descriptors1);

Mat descriptors2 = new Mat();
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();

detector.detect(img2, keypoints2);
descriptor.compute(img2, keypoints2, descriptors2); 
//... Do stuff

I understand that the keypoints1 and keypoints2 are 500x7 arrays that each of these columns indicate x-y coordinates, size, angle, response, octave, class_id.

Each of the descriptors1 and descriptors2 are 500x32 arrays. My question is what does each of these 32 columns represent?