Comments (9)
The image processing online journal has an open-access article about the SURF method, along with a sample implementation in c: http://www.ipol.im/pub/art/2015/69/
However, it may be best to avoid SURF here, as it is technically patented in the US: http://dsp.stackexchange.com/questions/1288/what-are-some-free-alternatives-to-sift-surf-that-can-be-used-in-commercial-app.
... I hate software patents.
from imageproc.
Ah, I didn't realise SURF was patented too. That's a shame. I'm pretty clueless on the restrictions on using patented algorithms - there are already several high profile open source implementations of both algorithms online. Maybe we'll shelve this for now and when we have a need for something SIFT-like find a definitely-not-patented alternative.
from imageproc.
BRISK perhaps? http://www.asl.ethz.ch/people/lestefan/personal/iccv2011.pdf
from imageproc.
Based on that discussion from the SO thread I linked earlier and some discussion from the OpenCV forum, publishing code for the patented technique is fine... but you'd need a license from the patent-holders to use it in any commercial application. Online advice about legal matters is obviously best taken with a grain (or chunk) of salt. Probably best avoided.
In addition to BRISK, I've heard that (A)KAZE is supposed to be good: http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html
It's something I'd like to get to eventually, but it may be a while. So if anybody else wants to implement a good feature detector, they should do it!
from imageproc.
If you include SIFT/SURF, I'd suggest putting it in a "nonfree" module like OpenCV, to indicate that it is not safe for general use.
That aside, I'd be interested in adding a binary feature descriptor like BRIEF, ORB, AKAZE, or LATCH. BRIEF or ORB are probably the easiest to start with, since you already have a FAST detector implemented. AKAZE, I believe, needs it's own specialized detector.
By far the fastest method is just to directly port some of the detectors over from OpenCV, since Rust is a more-or-less similar language. The MIT license imageproc uses should be compatible with the 3-clause BSD one in OpenCV.
Clean-room reimplementation from the original research papers also works, but would take a bit longer.
from imageproc.
Good suggestions. BRIEF sounds like a great choice.
I think we should avoid both SIFT and SURF for now, and stick with non-patented stuff.
I'm strongly against just directly copying the OpenCV code, but their implementation of the core numerical bits might give some helpful guidance.
If you fancy implementing any of these methods that would be fantastic. The current implementation of FAST detectors in this library isn't as fast as it could be, but if this causes any issues I'm happy to help speed it up.
from imageproc.
As fast Hamming distance appears to be crucial, we might want to use this crate: https://crates.io/crates/hamming/.
from imageproc.
I'll create an issue for adding BRIEF features and see how things go. The algorithm itself seems straightforward, mostly lookup tables of pixel pairs with some pre-smoothing.
Thanks for mentioning the hamming distance crate. Feature matching is orthogonal to descriptor extraction, so I'll create a separate issue to track it.
from imageproc.
Great! Let me know if there's anything you need from me.
from imageproc.
Related Issues (20)
- intersection_points function in hough.rs has bug if intersection point is in image corner. HOT 1
- Some arithmetic overflow bugs found by libfuzzer HOT 1
- `rusttype` dependency is unmaintained, consider migrating to `ab_glyph`
- Add 2D Butterworth HOT 1
- Expose more private functions HOT 4
- BresenhamLineIter crash HOT 2
- make interpolate_* public HOT 2
- Maintenance discussion HOT 6
- Gate merges on passing tests HOT 1
- the trait `image::image::GenericImage` is not implemented for `ImageBuffer<Rgb<{integer}>, Vec<{integer}>>` HOT 1
- Template matching with a mask HOT 3
- Add threshold mode for image contrast like opencv threshold HOT 3
- support grayscale morphology operators HOT 2
- `Laplacian` is incorrect HOT 8
- Release version 0.25 HOT 4
- optimisation of grayscale morphology operators HOT 18
- Merge with `cv` crate? HOT 2
- initialization of `morphology::Mask` HOT 6
- Rename arguments of `assert_pixels_eq` HOT 6
- "cannot find trait `FontRef` in this scope" HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from imageproc.