opencv FLANN with ORB descriptors?
Solution 1
It's a bug. It will be fixed soon.
http://answers.opencv.org/question/503/how-to-use-the-lshindexparams/
Solution 2
Flann needs the descriptors to be of type CV_32F so you need to convert them! find_object/example/main.cpp:
if(dbDescriptors.type()!=CV_32F) {
dbDescriptors.convertTo(dbDescriptors, CV_32F);
}
may work ;-)
Solution 3
When using ORB you should construct your matcher like so:
FlannBasedMatcher matcher(new cv::flann::LshIndexParams(5, 24, 2));
I've also seen this constructor suggested:
FlannBasedMatcher matcher(new flann::LshIndexParams(20,10,2));
Solution 4
Binary-string descriptors - ORB, BRIEF, BRISK, FREAK, AKAZE etc.
Floating-point descriptors - SIFT, SURF, GLOH etc.
Feature matching of binary descriptors can be efficiently done by comparing their Hamming distance as opposed to Euclidean distance used for floating-point descriptors.
For comparing binary descriptors in OpenCV, use FLANN + LSH index or Brute Force + Hamming distance.
http://answers.opencv.org/question/59996/flann-error-in-opencv-3/
By default FlannBasedMatcher works as KDTreeIndex with L2 norm. This is the reason why it works well with SIFT/SURF descriptors and throws an exception for ORB descriptor.
Binary features and Locality Sensitive Hashing (LSH)
Performance comparison between binary and floating-point descriptors
dynamic
__ _ ____/ /_ ______ ____ _____ ___ (_)____ / __ / / / / __ \/ __ `/ __ `__ \/ / ___/ / /_/ / /_/ / / / / /_/ / / / / / / / /__ \__,_/\__, /_/ /_/\__,_/_/ /_/ /_/_/\___/ /____/ avatar from http://www.pinterest.com/pin/504332858244739013/
Updated on June 20, 2022Comments
-
dynamic almost 2 years
I am trying to use FLANN with ORB descriptors, but opencv crashes with this simple code:
vector<vector<KeyPoint> > dbKeypoints; vector<Mat> dbDescriptors; vector<Mat> objects; /* load Descriptors from images (with OrbDescriptorExtractor()) */ FlannBasedMatcher matcher; matcher.add(dbDescriptors); matcher.train() //> Crash!
If I use
SurfDescriptorExtractor()
it works well.How can I solve this?
OpenCV says:
OpenCV Error: Unsupported format or combination of formats (type=0 ) in unknown function, file D:\Value\Personal\Parthenope\OpenCV\modules\flann\sr c\miniflann.cpp, line 299
-
xarlymg89 about 11 yearsIf somebody reaches this question but uses the OpenCV for Java, it might be CvType.CV_32F instead of CV_32F. This is due the structure that the OpenCV project decided to do the migration of code from C/C++.
-
Void Main over 10 yearsThanks jstr, this really helped me!
-
happy_marmoset over 10 yearsis FLANNMatcher<L2> will be faster than BFMatcher<NORM_HAMMING> if I convert descriptors?
-
Santiago Gil almost 7 yearsI have opened another question to ask about an error obtained with this supposed fix.