From: Andrey Kamaev Date: Wed, 3 Aug 2011 19:46:30 +0000 (+0000) Subject: JavaAPI: fixed typo; some constants are moved to private section; added tests for... X-Git-Tag: accepted/2.0/20130307.220821~2172 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6944c0dba4288eee20b8556c4c8868745900ba64;p=profile%2Fivi%2Fopencv.git JavaAPI: fixed typo; some constants are moved to private section; added tests for BruteForceMatcher-Hamming --- diff --git a/modules/java/android_test/src/org/opencv/test/features2d/BruteForceHammingDescriptorMatcherTest.java b/modules/java/android_test/src/org/opencv/test/features2d/BruteForceHammingDescriptorMatcherTest.java new file mode 100644 index 0000000..5324f70 --- /dev/null +++ b/modules/java/android_test/src/org/opencv/test/features2d/BruteForceHammingDescriptorMatcherTest.java @@ -0,0 +1,203 @@ +package org.opencv.test.features2d; + +import org.opencv.core.Core; +import org.opencv.core.CvType; +import org.opencv.core.Mat; +import org.opencv.core.Point; +import org.opencv.core.Scalar; +import org.opencv.features2d.DMatch; +import org.opencv.features2d.DescriptorExtractor; +import org.opencv.features2d.DescriptorMatcher; +import org.opencv.features2d.FeatureDetector; +import org.opencv.features2d.KeyPoint; +import org.opencv.test.OpenCVTestCase; +import org.opencv.test.OpenCVTestRunner; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class BruteForceHammingDescriptorMatcherTest extends OpenCVTestCase { + + DescriptorMatcher matcher; + int matSize; + DMatch[] truth; + + protected void setUp() throws Exception { + matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING); + matSize = 100; + + truth = new DMatch[] { + new DMatch (0, 0, 0, 51), + new DMatch (1, 2, 0, 42), + new DMatch (2, 1, 0, 40), + new DMatch (3, 3, 0, 53) }; + super.setUp(); + } + + private Mat getTrainImg() { + Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255)); + Core.line(img, new Point(40, 40), new Point(matSize - 40, matSize - 40), new Scalar(0), 8); + return img; + } + + private Mat getQueryImg() { + Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255)); + Core.line(img, new Point(40, matSize - 40), new Point(matSize - 50, 50), new Scalar(0), 8); + return img; + } + + private Mat getTestDescriptors(Mat img) { + List keypoints = new ArrayList(); + Mat descriptors = new Mat(); + + FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST); + DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.BRIEF); + + detector.detect(img, keypoints); + extractor.compute(img, keypoints, descriptors); + + return descriptors; + } + + private Mat getQueryDescriptors() { + return getTestDescriptors(getQueryImg()); + } + + private Mat getTrainDescriptors() { + return getTestDescriptors(getTrainImg()); + } + + private Mat getMaskImg() { + return new Mat(4, 4, CvType.CV_8U, new Scalar(0)) { + { + put(0, 0, 1, 1, 1, 1, 1, 1, 1, 1); + } + }; + } + + public void testAdd() { + matcher.add(Arrays.asList(new Mat())); + assertFalse(matcher.empty()); + } + + public void testClear() { + matcher.add(Arrays.asList(new Mat())); + + matcher.clear(); + + assertTrue(matcher.empty()); + } + + public void testCloneBoolean() { + matcher.add(Arrays.asList(new Mat())); + + DescriptorMatcher cloned = matcher.clone(true); + + assertNotNull(cloned); + assertTrue(cloned.empty()); + } + + public void testClone() { + Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123)); + Mat truth = train.clone(); + matcher.add(Arrays.asList(train)); + + DescriptorMatcher cloned = matcher.clone(); + + assertNotNull(cloned); + + List descriptors = cloned.getTrainDescriptors(); + assertEquals(1, descriptors.size()); + assertMatEqual(truth, descriptors.get(0)); + } + + public void testCreate() { + assertNotNull(matcher); + } + + public void testEmpty() { + assertTrue(matcher.empty()); + } + + public void testGetTrainDescriptors() { + Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123)); + Mat truth = train.clone(); + matcher.add(Arrays.asList(train)); + + List descriptors = matcher.getTrainDescriptors(); + + assertEquals(1, descriptors.size()); + assertMatEqual(truth, descriptors.get(0)); + } + + public void testIsMaskSupported() { + assertTrue(matcher.isMaskSupported()); + } + + public void testMatchMatMatListOfDMatchMat() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + Mat mask = getMaskImg(); + List matches = new ArrayList(); + + matcher.match(query, train, matches, mask); + + assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches, EPS); + } + + public void testMatchMatMatListOfDMatch() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + List matches = new ArrayList(); + + matcher.match(query, train, matches); + + assertListDMatchEquals(Arrays.asList(truth), matches, EPS); + } + + public void testMatchMatListOfDMatchListOfMat() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + Mat mask = getMaskImg(); + List matches = new ArrayList(); + matcher.add(Arrays.asList(train)); + + matcher.match(query, matches, Arrays.asList(mask)); + + assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches, EPS); + } + + public void testMatchMatListOfDMatch() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + List matches = new ArrayList(); + matcher.add(Arrays.asList(train)); + + matcher.match(query, matches); + + assertListDMatchEquals(Arrays.asList(truth), matches, EPS); + } + + public void testRead() { + String filename = OpenCVTestRunner.getTempFileName("yml"); + writeFile(filename, "%YAML:1.0\n"); + + matcher.read(filename); + assertTrue(true);// BruteforceMatcher has no settings + } + + public void testTrain() { + matcher.train();// BruteforceMatcher does not need to train + } + + public void testWrite() { + String filename = OpenCVTestRunner.getTempFileName("yml"); + + matcher.write(filename); + + String truth = "%YAML:1.0\n"; + assertEquals(truth, readFile(filename)); + } + +} diff --git a/modules/java/android_test/src/org/opencv/test/features2d/BruteForceHammingLUTDescriptorMatcherTest.java b/modules/java/android_test/src/org/opencv/test/features2d/BruteForceHammingLUTDescriptorMatcherTest.java new file mode 100644 index 0000000..48b3c57 --- /dev/null +++ b/modules/java/android_test/src/org/opencv/test/features2d/BruteForceHammingLUTDescriptorMatcherTest.java @@ -0,0 +1,207 @@ +package org.opencv.test.features2d; + +import org.opencv.core.Core; +import org.opencv.core.CvType; +import org.opencv.core.Mat; +import org.opencv.core.Point; +import org.opencv.core.Scalar; +import org.opencv.features2d.DMatch; +import org.opencv.features2d.DescriptorExtractor; +import org.opencv.features2d.DescriptorMatcher; +import org.opencv.features2d.FeatureDetector; +import org.opencv.features2d.KeyPoint; +import org.opencv.test.OpenCVTestCase; +import org.opencv.test.OpenCVTestRunner; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class BruteForceHammingLUTDescriptorMatcherTest extends OpenCVTestCase { + + DescriptorMatcher matcher; + int matSize; + DMatch[] truth; + + protected void setUp() throws Exception { + matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT); + matSize = 100; + + truth = new DMatch[] { + new DMatch (0, 0, 0, 51), + new DMatch (1, 2, 0, 42), + new DMatch (2, 1, 0, 40), + new DMatch (3, 3, 0, 53) }; + super.setUp(); + } + + private Mat getTrainImg() { + Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255)); + Core.line(img, new Point(40, 40), new Point(matSize - 40, matSize - 40), new Scalar(0), 8); + return img; + } + + private Mat getQueryImg() { + Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255)); + Core.line(img, new Point(40, matSize - 40), new Point(matSize - 50, 50), new Scalar(0), 8); + return img; + } + + private Mat getTestDescriptors(Mat img) { + List keypoints = new ArrayList(); + Mat descriptors = new Mat(); + + FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST); + DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.BRIEF); + + detector.detect(img, keypoints); + extractor.compute(img, keypoints, descriptors); + + return descriptors; + } + + private Mat getQueryDescriptors() { + return getTestDescriptors(getQueryImg()); + } + + private Mat getTrainDescriptors() { + return getTestDescriptors(getTrainImg()); + } + + private Mat getMaskImg() { + return new Mat(4, 4, CvType.CV_8U, new Scalar(0)) { + { + put(0, 0, 1, 1, 1, 1, 1, 1, 1, 1); + } + }; + } + + public void testAdd() { + matcher.add(Arrays.asList(new Mat())); + assertFalse(matcher.empty()); + } + + public void testClear() { + matcher.add(Arrays.asList(new Mat())); + + matcher.clear(); + + assertTrue(matcher.empty()); + } + + public void testCloneBoolean() { + matcher.add(Arrays.asList(new Mat())); + + DescriptorMatcher cloned = matcher.clone(true); + + assertNotNull(cloned); + assertTrue(cloned.empty()); + } + + public void testClone() { + Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123)); + Mat truth = train.clone(); + matcher.add(Arrays.asList(train)); + + DescriptorMatcher cloned = matcher.clone(); + + assertNotNull(cloned); + + List descriptors = cloned.getTrainDescriptors(); + assertEquals(1, descriptors.size()); + assertMatEqual(truth, descriptors.get(0)); + } + + public void testCreate() { + assertNotNull(matcher); + } + + public void testEmpty() { + assertTrue(matcher.empty()); + } + + public void testGetTrainDescriptors() { + Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123)); + Mat truth = train.clone(); + matcher.add(Arrays.asList(train)); + + List descriptors = matcher.getTrainDescriptors(); + + assertEquals(1, descriptors.size()); + assertMatEqual(truth, descriptors.get(0)); + } + + public void testIsMaskSupported() { + assertTrue(matcher.isMaskSupported()); + } + + public void testMatchMatMatListOfDMatchMat() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + Mat mask = getMaskImg(); + List matches = new ArrayList(); + + matcher.match(query, train, matches, mask); + + assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches, EPS); + } + + public void testMatchMatMatListOfDMatch() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + List matches = new ArrayList(); + + matcher.match(query, train, matches); + + OpenCVTestRunner.Log("matches found: " + matches.size()); + for (DMatch m : matches) + OpenCVTestRunner.Log(m.toString()); + + assertListDMatchEquals(Arrays.asList(truth), matches, EPS); + } + + public void testMatchMatListOfDMatchListOfMat() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + Mat mask = getMaskImg(); + List matches = new ArrayList(); + matcher.add(Arrays.asList(train)); + + matcher.match(query, matches, Arrays.asList(mask)); + + assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches, EPS); + } + + public void testMatchMatListOfDMatch() { + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + List matches = new ArrayList(); + matcher.add(Arrays.asList(train)); + + matcher.match(query, matches); + + assertListDMatchEquals(Arrays.asList(truth), matches, EPS); + } + + public void testRead() { + String filename = OpenCVTestRunner.getTempFileName("yml"); + writeFile(filename, "%YAML:1.0\n"); + + matcher.read(filename); + assertTrue(true);// BruteforceMatcher has no settings + } + + public void testTrain() { + matcher.train();// BruteforceMatcher does not need to train + } + + public void testWrite() { + String filename = OpenCVTestRunner.getTempFileName("yml"); + + matcher.write(filename); + + String truth = "%YAML:1.0\n"; + assertEquals(truth, readFile(filename)); + } + +} diff --git a/modules/java/gen_java.py b/modules/java/gen_java.py index 665adff..3915f30 100644 --- a/modules/java/gen_java.py +++ b/modules/java/gen_java.py @@ -100,6 +100,10 @@ const_private_list = ( "CV_INPAINT_.+", "CV_RETR_.+", "CV_CHAIN_APPROX_.+", + "OPPONENTEXTRACTOR", + "GRIDRETECTOR", + "PYRAMIDDETECTOR", + "DYNAMICDETECTOR", ) # { Module : { public : [[name, val],...], private : [[]...] } } diff --git a/modules/java/src/cpp/features2d_manual.hpp b/modules/java/src/cpp/features2d_manual.hpp index 4f1eff3..6fc25e6 100644 --- a/modules/java/src/cpp/features2d_manual.hpp +++ b/modules/java/src/cpp/features2d_manual.hpp @@ -245,10 +245,10 @@ public: OPPONENTEXTRACTOR = 1000, - OPPENENT_SIFT = OPPONENTEXTRACTOR + SIFT, - OPPENENT_SURF = OPPONENTEXTRACTOR + SURF, - OPPENENT_ORB = OPPONENTEXTRACTOR + ORB, - OPPENENT_BRIEF = OPPONENTEXTRACTOR + BRIEF + OPPONENT_SIFT = OPPONENTEXTRACTOR + SIFT, + OPPONENT_SURF = OPPONENTEXTRACTOR + SURF, + OPPONENT_ORB = OPPONENTEXTRACTOR + ORB, + OPPONENT_BRIEF = OPPONENTEXTRACTOR + BRIEF }; //supported SIFT, SURF, ORB, BRIEF, Opponent(XXXX)