cv icon indicating copy to clipboard operation
cv copied to clipboard

SIFT

Open vadixidav opened this issue 4 years ago • 3 comments

The patents on SIFT have recently expired and we can now do a Rust implementation of the algorithm. This algorithm is a detector and descriptor which is known for its high robustness. Currently we have AKAZE, but we would want to use this when doing non real-time tasks to maximize matching accuracy.

vadixidav avatar Jul 18 '20 19:07 vadixidav

Hi there! This project looks really neat. Do you have an idea for when might SIFT be available? Or if you'd like others to contribute, I don't mind trying :)

aalekhpatel07 avatar Aug 27 '21 23:08 aalekhpatel07

@aalekhpatel07 You can absolutely contribute a SIFT detector. Right now we don't have proper abstractions for feature detectors and extractors, however that shouldn't stop you from implementing it if you would like. AKAZE is currently used directly in cv-sfm and vslam-sandbox, so everything currently assumes akaze. The primary abstraction there is that it works entirely with binary features and the ImagePoint trait today. Theoretically, we could also binarize SIFT features as well using various techniques, and then it would fit into the pipeline nicely, but that is a nice-to-have. Initially, just being able to extract the SIFT features and draw them as an option with the kpdraw crate would be fantastic.

If you would like to start working on this, feel free to create a working draft PR on this repository with the new crate added. It seems that the name sift is taken. We could just use cv-sift and that would work fine. We also could use ORB features (which are simpler to implement) as well if you would be interested, but I think that SIFT is needed the most.

Let me know if you need any help. I am always available in the Rust CV discord (see the URL at the top of the main org page: https://github.com/rust-cv).

vadixidav avatar Aug 28 '21 01:08 vadixidav

@vadixidav Thanks for the detailed explanation! I'd be more than thrilled to work on SIFT. Recently, I came across a neat and clean Numpythonic implementation of SIFT that I hope to use as a guide. I'd like to be honest and disclose I'm no expert (barely even an amateur in Rust) but the concepts fascinate me and I love the language. This particular task will be daunting but a very rewarding/frustrating adventure for me and I will gladly get my hands dirty!

aalekhpatel07 avatar Aug 28 '21 02:08 aalekhpatel07