Path: blob/master/modules/features2d/misc/java/test/BruteForceHammingLUTDescriptorMatcherTest.java
16354 views
package org.opencv.test.features2d;12import java.util.Arrays;3import java.util.List;45import org.opencv.core.CvType;6import org.opencv.core.Mat;7import org.opencv.core.MatOfDMatch;8import org.opencv.core.MatOfKeyPoint;9import org.opencv.core.Point;10import org.opencv.core.Scalar;11import org.opencv.core.DMatch;12import org.opencv.features2d.DescriptorMatcher;13import org.opencv.features2d.FastFeatureDetector;14import org.opencv.test.OpenCVTestCase;15import org.opencv.test.OpenCVTestRunner;16import org.opencv.imgproc.Imgproc;17import org.opencv.features2d.Feature2D;1819public class BruteForceHammingLUTDescriptorMatcherTest extends OpenCVTestCase {2021DescriptorMatcher matcher;22int matSize;23DMatch[] truth;2425private Mat getMaskImg() {26return new Mat(4, 4, CvType.CV_8U, new Scalar(0)) {27{28put(0, 0, 1, 1, 1, 1, 1, 1, 1, 1);29}30};31}3233private Mat getQueryDescriptors() {34return getTestDescriptors(getQueryImg());35}3637private Mat getQueryImg() {38Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));39Imgproc.line(img, new Point(40, matSize - 40), new Point(matSize - 50, 50), new Scalar(0), 8);40return img;41}4243private Mat getTestDescriptors(Mat img) {44MatOfKeyPoint keypoints = new MatOfKeyPoint();45Mat descriptors = new Mat();4647Feature2D detector = FastFeatureDetector.create();48Feature2D extractor = createClassInstance(XFEATURES2D+"BriefDescriptorExtractor", DEFAULT_FACTORY, null, null);4950detector.detect(img, keypoints);51extractor.compute(img, keypoints, descriptors);5253return descriptors;54}5556private Mat getTrainDescriptors() {57return getTestDescriptors(getTrainImg());58}5960private Mat getTrainImg() {61Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));62Imgproc.line(img, new Point(40, 40), new Point(matSize - 40, matSize - 40), new Scalar(0), 8);63return img;64}6566protected void setUp() throws Exception {67super.setUp();68matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT);69matSize = 100;7071truth = new DMatch[] {72new DMatch(0, 0, 0, 51),73new DMatch(1, 2, 0, 42),74new DMatch(2, 1, 0, 40),75new DMatch(3, 3, 0, 53) };76}7778public void testAdd() {79matcher.add(Arrays.asList(new Mat()));80assertFalse(matcher.empty());81}8283public void testClear() {84matcher.add(Arrays.asList(new Mat()));8586matcher.clear();8788assertTrue(matcher.empty());89}9091public void testClone() {92Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));93Mat truth = train.clone();94matcher.add(Arrays.asList(train));9596DescriptorMatcher cloned = matcher.clone();9798assertNotNull(cloned);99100List<Mat> descriptors = cloned.getTrainDescriptors();101assertEquals(1, descriptors.size());102assertMatEqual(truth, descriptors.get(0));103}104105public void testCloneBoolean() {106matcher.add(Arrays.asList(new Mat()));107108DescriptorMatcher cloned = matcher.clone(true);109110assertNotNull(cloned);111assertTrue(cloned.empty());112}113114public void testCreate() {115assertNotNull(matcher);116}117118public void testEmpty() {119assertTrue(matcher.empty());120}121122public void testGetTrainDescriptors() {123Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));124Mat truth = train.clone();125matcher.add(Arrays.asList(train));126127List<Mat> descriptors = matcher.getTrainDescriptors();128129assertEquals(1, descriptors.size());130assertMatEqual(truth, descriptors.get(0));131}132133public void testIsMaskSupported() {134assertTrue(matcher.isMaskSupported());135}136137public void testKnnMatchMatListOfListOfDMatchInt() {138fail("Not yet implemented");139}140141public void testKnnMatchMatListOfListOfDMatchIntListOfMat() {142fail("Not yet implemented");143}144145public void testKnnMatchMatListOfListOfDMatchIntListOfMatBoolean() {146fail("Not yet implemented");147}148149public void testKnnMatchMatMatListOfListOfDMatchInt() {150fail("Not yet implemented");151}152153public void testKnnMatchMatMatListOfListOfDMatchIntMat() {154fail("Not yet implemented");155}156157public void testKnnMatchMatMatListOfListOfDMatchIntMatBoolean() {158fail("Not yet implemented");159}160161public void testMatchMatListOfDMatch() {162Mat train = getTrainDescriptors();163Mat query = getQueryDescriptors();164MatOfDMatch matches = new MatOfDMatch();165matcher.add(Arrays.asList(train));166167matcher.match(query, matches);168169assertArrayDMatchEquals(truth, matches.toArray(), EPS);170}171172public void testMatchMatListOfDMatchListOfMat() {173Mat train = getTrainDescriptors();174Mat query = getQueryDescriptors();175Mat mask = getMaskImg();176MatOfDMatch matches = new MatOfDMatch();177matcher.add(Arrays.asList(train));178179matcher.match(query, matches, Arrays.asList(mask));180181assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);182}183184public void testMatchMatMatListOfDMatch() {185Mat train = getTrainDescriptors();186Mat query = getQueryDescriptors();187MatOfDMatch matches = new MatOfDMatch();188189matcher.match(query, train, matches);190191/*192OpenCVTestRunner.Log("matches found: " + matches.size());193for (DMatch m : matches.toArray())194OpenCVTestRunner.Log(m.toString());195*/196197assertArrayDMatchEquals(truth, matches.toArray(), EPS);198}199200public void testMatchMatMatListOfDMatchMat() {201Mat train = getTrainDescriptors();202Mat query = getQueryDescriptors();203Mat mask = getMaskImg();204MatOfDMatch matches = new MatOfDMatch();205206matcher.match(query, train, matches, mask);207208assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);209}210211public void testRadiusMatchMatListOfListOfDMatchFloat() {212fail("Not yet implemented");213}214215public void testRadiusMatchMatListOfListOfDMatchFloatListOfMat() {216fail("Not yet implemented");217}218219public void testRadiusMatchMatListOfListOfDMatchFloatListOfMatBoolean() {220fail("Not yet implemented");221}222223public void testRadiusMatchMatMatListOfListOfDMatchFloat() {224fail("Not yet implemented");225}226227public void testRadiusMatchMatMatListOfListOfDMatchFloatMat() {228fail("Not yet implemented");229}230231public void testRadiusMatchMatMatListOfListOfDMatchFloatMatBoolean() {232fail("Not yet implemented");233}234235public void testRead() {236String filename = OpenCVTestRunner.getTempFileName("yml");237writeFile(filename, "%YAML:1.0\n---\n");238239matcher.read(filename);240assertTrue(true);// BruteforceMatcher has no settings241}242243public void testTrain() {244matcher.train();// BruteforceMatcher does not need to train245}246247public void testWrite() {248String filename = OpenCVTestRunner.getTempFileName("yml");249250matcher.write(filename);251252String truth = "%YAML:1.0\n---\n";253assertEquals(truth, readFile(filename));254}255256}257258259