rust-cv / cv

Rust CV mono-repo. Contains pure-Rust dependencies which attempt to encapsulate the capability of OpenCV, OpenMVG, and vSLAM frameworks in a cohesive set of APIs.
820 stars 63 forks source link

SIFT #7

Open vadixidav opened 4 years ago

vadixidav commented 4 years ago

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.

aalekhpatel07 commented 3 years ago

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 :)

vadixidav commented 3 years ago

@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).

aalekhpatel07 commented 3 years ago

@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!