inspirit / jsfeat

JavaScript Computer Vision library.
MIT License
2.74k stars 372 forks source link

BRISK Feature Descriptor #26

Open FreakTheMighty opened 10 years ago

FreakTheMighty commented 10 years ago

It would be really cool if we could implement BRISK in javascript. http://www.robots.ox.ac.uk/~vgg/rg/papers/brisk.pdf

Your library already has a FAST implementation which could be extended as described in the paper linked to above, to estimate the scale of features.

Having a local feature descriptor would be a great addition to jsfeat.

inspirit commented 10 years ago

i do have plans to implement several descriptors in jsfeat. still BRISK no in the priority due its performance expenses. i would most likely start with FREAK and ORB. u also can use image pyramid and detect FAST points at different scale levels to imitate scale invariant features.

FreakTheMighty commented 10 years ago

In the brisk paper they mention using intra octives for scale detection, that confused me. Without that it seemed somewhat straight forward. Get the FAST score at 3 different octaves. Fit A curve to the observed scores the use the maximum to interpolate scale and position.

FREAK looks interesting, but why do you say it performs better? As near as I can tell its greatest improvement is ordering the most significant bits first in the descriptor which could be used to speed up matching. Is this signficant?

inspirit commented 10 years ago

doing scale pyramid in BRISK manner is really expensive when it comes to JS. so i think creating pyramid the way ORB is doing is good enough.

FREAK computation cost is less compared to BRISK and according to my tests it produces better descriptors when it comes to matching (more true positive matches).

FreakTheMighty commented 10 years ago

Does ORB create features for interest points found at each scale in the pyramid instead of producing one set normalized features?

josundin commented 10 years ago

I am also very interested in image keypoint descriptor implementation in javascript. Indeed ORB seams a promising candidate in JS environment but why not implement SIFT or "SIFT like" key point descriptor?

inspirit commented 10 years ago

try it and u will know why ;)

FreakTheMighty commented 10 years ago

I have a working version of BRISK. I'm sure there will be design and implementation issues with what I have but I will push what's I've got soon. On Feb 18, 2014 6:26 AM, "Eugene Zatepyakin" notifications@github.com wrote:

try it and u will know why ;)

Reply to this email directly or view it on GitHubhttps://github.com/inspirit/jsfeat/issues/26#issuecomment-35388561 .

inspirit commented 10 years ago

that would be great

josundin commented 10 years ago

Cool, I am definitely up for trying out your BRISK descriptor in the image alignment tool I am working on. For SIFT I'll might try to implement it :) but I guess the problem would be to build the scale space, it might be a bit heavy for js.

inspirit commented 10 years ago

it will be magnitudes slower compared to ORB/FREAK/BRISK i'm not sure why people still choose that descriptor for their projects... if u want floating point descriptor so much then just do SURF it is at least has better features and more stable

FreakTheMighty commented 10 years ago

One benefit of binary descriptors is that they can use Hamming as a distance metric. This means that the distance between two vectors can be calculated by summing the bits after applying an XOR to the two vectors.

Also, SIFT and SURF descriptors contain floating point values so they are less memory efficient.

Regarding the various binary descriptors. ORB isn't scale invariant. I'm not sure you would consider my version of BRISK scale invariant either. I simply calculate descriptors at a number of discreet scales.

As for matching quality, I believe the respective papers indicate that the mentioned binary descriptors don't out perform floating point descriptors. Nonetheless, they are quite good. Also, I've recently been made aware of 'binboost', which claims to be even better than previous binary descriptors.

http://cvlab.epfl.ch/research/detect/binboost

On Tue, Feb 18, 2014 at 8:32 AM, josundin notifications@github.com wrote:

Cool, I am definitely up for trying out your BRISK descriptor in the image alignment tool I am working on. For SIFT I'll might try to implement it :) but I guess the problem would be to build the scale space, it might be a bit heavy for js.

Reply to this email directly or view it on GitHubhttps://github.com/inspirit/jsfeat/issues/26#issuecomment-35402777 .

Jesse Vander Does 401-226-8251 | jvanderdoes@gmail.com

inspirit commented 10 years ago

yes SURF and SIFT still claims to be more robust if we compare on very different dataset still the difference is not that big.

i'm aware of binboost and i was also very optimistic about it but authors don't really calculate the time required to compute each descriptor and it turned to be several times slower compared to other binary descriptors. of course matching is fast since we got bit-based vector. also binboost has big problems with noisy/bad quality images. still i really like the idea of it and probably there is a way to avoid some issues by replacing some routines or some preprocessing. i didnt try much yet with it

martindale commented 4 years ago

Did any progress get made on this issue?

wardhanster commented 4 years ago

@martindale the repo seems to be dead @inspirit please correct me if I am wrong