Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is ORB depending on image resolution?

I'm trying to use OpenCV to detect and extract ORB features from images.

However, the images I'm getting are not normalized (different size, different resolutions, etc...).

I was wondering if I need to normalize my images before extracting ORB features to be able to match them across images?

I know the feature detection is scale invariant, but I'm not sure about what it means for images resolution (for example, 2 images of the same size, with 1 object close, and far in the other should result in a match, even if they have a different scale on the images, but what if the images don't have the same size?).

Should I adapt the patchSize from ORB based on the image size to have (for example if I have an image of 800px and take a patchSize of 20px, should I take a patchSize of 10px for an image of 400px?).

Thank you.

Update: I tested different algorithms (ORB, SURF and SIFT) with high and low resolution images to see how they behave. In this image, objects are the same size, but image resolution is different:

enter image description here

We can see that SIFT is pretty stable, although it has few features. SURF is also pretty stable in terms of keypoints and feature scale. So My guess is that feature matching between a low res and high res images with SIFT and SURF would work, but ORB has much larger feature in low res, so descriptors won't match those in the high res image.

(Same parameters have been used between high and low res feature extraction).

So my guess is that it would be better to SIFT or SURF if we want to do matching between images with different resolutions.

like image 667
whiteShadow Avatar asked Oct 07 '18 14:10

whiteShadow


People also ask

What is ORB in image processing?

Oriented FAST and rotated BRIEF (ORB) is a fast robust local feature detector, first presented by Ethan Rublee et al. in 2011, that can be used in computer vision tasks like object recognition or 3D reconstruction.

Is ORB better than sift?

We showed that ORB is the fastest algorithm while SIFT performs the best in the most scenarios. For special case when the angle of rotation is proportional to 90 degrees, ORB and SURF outperforms SIFT and in the noisy images, ORB and SIFT show almost similar performances.

How does ORB feature detector work?

By detecting keypoints at each level orb is effectively locating key points at a different scale. In this way, ORB is partial scale invariant. After locating keypoints orb now assign an orientation to each keypoint like left or right facing depending on how the levels of intensity change around that keypoint.

What is ORB feature matching?

ORB is an efficient alternative to SIFT or SURF algorithms used for feature extraction, in computation cost, matching performance, and mainly the patents. SIFT and SURF are patented and you are supposed to pay them for its use.


1 Answers

According to OpenCV documentation, ORB also use pyramid to produce multiscale-features. Although details are not clear on this page.
If we look at the ORB paper itself, at section 6.1 it is mentioned that images with five different scales are used. But still we are not sure whether you need to compute descriptors on images with different scale manually, or it is already implemented in OpenCV ORB.
Finally, from source code(line 1063 while I write this answer) we see that images with different resolution is computed for keypoint/descriptor extraction. If you track variables you see that there is a scale factor for ORB class which you can access with getScaleFactor method.

In short, ORB tries to perform matching at different scales itself.

like image 84
unlut Avatar answered Sep 23 '22 10:09

unlut