Ask Your Question

rylexr's profile - activity

2013-03-28 05:56:55 -0600 received badge  Teacher (source)
2013-03-27 17:25:39 -0600 received badge  Self-Learner (source)
2013-03-27 17:23:00 -0600 answered a question DescriptorExtractor.compute() is not removing keypoints

I submitted the bug report http://code.opencv.org/issues/2912 and they fixed it. Thanks!

2013-03-24 19:52:24 -0600 commented question DescriptorExtractor.compute() is not removing keypoints

For whatever pair of stereo images you'll see that the number of computed descriptors (df1 and df2) is less than the number of keypoints after extractor.compute() is called. The problem is that you'll not know what descriptors belongs to what keypoints because the relation keypoint i to descriptor i doesn't hold and "uncomputed" keypoints are never removed no matter what. I've tested the exact same code on c++ and it works perfectly. Keypoints are removed just after the extractor.compute() call but unfortunately fails in Java.

2013-03-23 17:06:53 -0600 asked a question DescriptorExtractor.compute() is not removing keypoints

According to this documentation: http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html#descriptorextractor-compute "Keypoints for which a descriptor cannot be computed are removed." but in this code:

Mat c1 = Highgui.imread("kf1.png");
Mat c2 = Highgui.imread("kf2.png");

Mat f1 = new Mat();
Mat f2 = new Mat();

Imgproc.cvtColor(c1, f1, Imgproc.COLOR_BGR2GRAY);
Imgproc.cvtColor(c2, f2, Imgproc.COLOR_BGR2GRAY);

FeatureDetector detector = FeatureDetector.create(FeatureDetector.PYRAMID_FAST);
DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB);

MatOfKeyPoint mkpf1 = new MatOfKeyPoint();
MatOfKeyPoint mkpf2 = new MatOfKeyPoint();
Mat df1 = new Mat();
Mat df2 = new Mat();

detector.detect(f1, mkpf1);
detector.detect(f2, mkpf2);

System.out.println("Keypoints detected for f2: " + mkpf2.total());
System.out.println("Keypoints detected for f1: " + mkpf1.total());

extractor.compute(f1, mkpf1, df1);
extractor.compute(f2, mkpf2, df2);

System.out.println("Keypoints after extractor for f2: " + mkpf2.rows());
System.out.println("Keypoints after extractor for f1: " + mkpf1.rows());

Keypoints are never removed causing wrong behavior. Can anybody tell me why o how to solve this? Thanks!

2013-03-23 16:57:39 -0600 received badge  Supporter (source)
2013-03-20 18:34:56 -0600 received badge  Editor (source)
2013-03-20 17:49:03 -0600 asked a question What's the Java equivalent of C++ of BFMatcher matcher(NORM_HAMMING, true) ?

What is the Java equivalent of:

BFMatcher matcher(NORM_HAMMING, true);

OpenCV 2.4.4

Thanks!

2013-03-18 19:36:02 -0600 asked a question Why this code returns different number of keypoints in Java?

Hi, Can someone explain why this Java code:

Mat ok1 = Highgui.imread("/some/path/k1.png");
Mat ok2 = Highgui.imread("/some/path/k2.png");
Mat k1 = new Mat();
Mat k2 = new Mat();
MatOfKeyPoint mk1 = new MatOfKeyPoint();
MatOfKeyPoint mk2 = new MatOfKeyPoint();
Mat md1 = new Mat();
Mat md2 = new Mat();

Imgproc.cvtColor(ok1, k1, Imgproc.COLOR_BGR2GRAY);
Imgproc.cvtColor(ok2, k2, Imgproc.COLOR_BGR2GRAY);

FeatureDetector detector = FeatureDetector.create(FeatureDetector.PYRAMID_FAST);
DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB);

detector.detect(k1, mk1);
detector.detect(k2, mk2);
extractor.compute(k1, mk1, md1);
extractor.compute(k2, mk2, md2);

System.out.println("k1 has " + mk1.total() + " points (descriptors " + md1.rows() + ")");
System.out.println("k2 has " + mk2.total() + " points (descriptors " + md2.rows() + ")");

displays a different number of KeyPoints (for whatever images) than this C++ code:

cv::Mat ok1 = cv::imread("/some/path/k1.png");
cv::Mat ok2 = cv::imread("/some/path/k2.png");
cv::Mat k1;
cv::Mat k2;
std::vector<cv::KeyPoint> mk1;
std::vector<cv::KeyPoint> mk2;
cv::Mat md1;
cv::Mat md2;

cv::cvtColor(ok1, k1, CV_BGR2GRAY);
cv::cvtColor(ok2, k2, CV_BGR2GRAY);

cv::Ptr<cv::FeatureDetector> detector;
cv::Ptr<cv::DescriptorExtractor> extractor;
detector = cv::FeatureDetector::create("PyramidFAST");
extractor = cv::DescriptorExtractor::create("ORB");

detector->detect(k1, mk1);
detector->detect(k2, mk2);
extractor->compute(k1, mk1, md1);
extractor->compute(k2, mk2, md2);

cout << "k1 has " << mk1.size() << " points (descriptors " << md1.rows << ")\n";
cout << "k2 has " << mk2.size() << " points (descriptors " << md2.rows << ")\n";

Aren't they the same code in different languages?

Regards

* Using OpenCV 2.4.4 *

2013-03-15 14:22:56 -0600 commented answer Java equivalent for Vec and Matx?

It that means I can replace them with native Java arrays? Like for instance:

Vec2i -&gt; int[2]
Vec6d -&gt; double[6]
Matx31f -&gt; float[3][1]
Matx66d -&gt; double[6][6]

Or it's better to create a generic class for each one, like:

public class Vec&lt;T&gt; {
  private int size;
  private Object[] data;

  public Vec(int size) {
    this.size = size;
    this.data = new Object[size];
  }

  // other methods
}

so Vec2i could be represented like: Vec<Integer> v = new Vec<Integer>(2) ?

2013-03-15 01:20:32 -0600 received badge  Student (source)
2013-03-14 22:23:57 -0600 asked a question Java equivalent for Vec and Matx?

Hi,

I'm doing a project with OpenCV 2.4.4 Java wrappers and I need to know what is the equivalent for Vec and Matx classes. Thanks in advance.

Regards.