Ask Your Question

Bob W's profile - activity

2018-08-14 02:02:38 -0500 received badge  Popular Question (source)
2017-08-02 07:23:21 -0500 received badge  Teacher (source)
2016-06-23 17:07:46 -0500 received badge  Necromancer (source)
2015-11-15 21:27:53 -0500 asked a question Feature Detection Use Cases

I've just spent a week exploring the various Feature Detection algorithms in OpenCV 3.0. I've tried: ORB, BRISK, and SURF with various combinations of Descriptor Extractors (ORB, BRIEF, SURF, FREAK). I've experimented with knnMatches, the ratio test, cross-check match validation and fine tuning the maximum distance calculation.

I'm doing this on Android so have not explored the slower algos like SIFT.

What I've found is disappointing: Once I've trained the algo on a given object it can only reliably find the object if it is alone in an image on plain background. Which is pretty useless. If the target image has any additional feature points, which it will on a non-solid background of if other objects are present, then the algos have no reliable way of matching feature points such that the object the algo was trained on can be located. Basically feature points are matched in a semi-random way it seems. I know it is not random, but it is certainly not accurate either.

So I'm curious what success anyone has had using these algorithms in real-world situations. I notice that all the examples in the documentation are very simple and highly controlled.

Perhaps I misunderstand what the point of these feature detectors are. Can they be used to locate objects? If you have used them successfully, I'd like to know what your 'use cases' were and how these algos added value.

2015-11-13 11:03:27 -0500 answered a question Java: How to set parameters to ORB FeatureDetector?

To save time for the next person who stumbles across this post, the workaround described above does not work for ORB in OpenCV 3.0, as described here:

2015-11-12 21:57:03 -0500 commented question Send parameters to ORB Feature Detector, Android

Thanks for your feedback. So if I understand correctly, read/write is the only way to set/get params in Java but read/write is not implemented in ORB in C++. However it is implemented for other feature detectors in C++ so read/write will work with them from Java. Do I have that right?

2015-11-11 22:48:43 -0500 asked a question Send parameters to ORB Feature Detector, Android

I need to send parameters to the ORB Feature Detector from my Android app. The workaround mentioned here no longer seems to work. I am using OpenCV 3.0.

If I try to set parameters by writing a temp file, they seem to be ignored. If I deliberately mis-type a parameter name, it doesn't do anything. If I write out the parameters using the write() method, a file is indeed created but all it has is a 1-line header "%YAML: 1.0". XML fails too.

// try setting some params.
// first write a file (this is indeed created and can be viewed with 'adb shell')
String tempFileName = writeToFile("tempFile", "%YAML:1.0\nscaleFactor: 1.1\nnLevels: 5\nfirstLevel: 0\nedgeThreshold: 31\npatchSize: 31\n");;  // seems to have no effect.

// try writing out params.
String fileName = myDir.getPath() + "/orb_params.yml";
_detector.write(fileName);  // try yaml
fileName = myDir.getPath() + "/orb_params.xml";
_detector.write(fileName);  // try xml
2015-11-11 22:48:42 -0500 commented answer Java: How to set parameters to ORB FeatureDetector?

I agree - this is not working. If I deliberately mis-type a parameter name in the YML flie, nothing happens. If I try to use the write() function to verify the internal state of the detector, I do get a File with a '%YAML 1.0' header, but no other content.