Path: blob/master/modules/features2d/misc/java/test/BruteForceL1DescriptorMatcherTest.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.core.KeyPoint;14import org.opencv.test.OpenCVTestCase;15import org.opencv.test.OpenCVTestRunner;16import org.opencv.imgproc.Imgproc;17import org.opencv.features2d.Feature2D;1819public class BruteForceL1DescriptorMatcherTest extends OpenCVTestCase {2021DescriptorMatcher matcher;22int matSize;23DMatch[] truth;2425private Mat getMaskImg() {26return new Mat(5, 2, CvType.CV_8U, new Scalar(0)) {27{28put(0, 0, 1, 1, 1, 1);29}30};31}3233private Mat getQueryDescriptors() {34Mat img = getQueryImg();35MatOfKeyPoint keypoints = new MatOfKeyPoint();36Mat descriptors = new Mat();3738Feature2D detector = createClassInstance(XFEATURES2D+"SURF", DEFAULT_FACTORY, null, null);39Feature2D extractor = createClassInstance(XFEATURES2D+"SURF", DEFAULT_FACTORY, null, null);4041setProperty(detector, "extended", "boolean", true);42setProperty(detector, "hessianThreshold", "double", 8000);43setProperty(detector, "nOctaveLayers", "int", 2);44setProperty(detector, "nOctaves", "int", 3);45setProperty(detector, "upright", "boolean", false);4647detector.detect(img, keypoints);48extractor.compute(img, keypoints, descriptors);4950return descriptors;51}5253private Mat getQueryImg() {54Mat cross = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));55Imgproc.line(cross, new Point(30, matSize / 2), new Point(matSize - 31, matSize / 2), new Scalar(100), 3);56Imgproc.line(cross, new Point(matSize / 2, 30), new Point(matSize / 2, matSize - 31), new Scalar(100), 3);5758return cross;59}6061private Mat getTrainDescriptors() {62Mat img = getTrainImg();63MatOfKeyPoint keypoints = new MatOfKeyPoint(new KeyPoint(50, 50, 16, 0, 20000, 1, -1), new KeyPoint(42, 42, 16, 160, 10000, 1, -1));64Mat descriptors = new Mat();6566Feature2D extractor = createClassInstance(XFEATURES2D+"SURF", DEFAULT_FACTORY, null, null);6768extractor.compute(img, keypoints, descriptors);6970return descriptors;71}7273private Mat getTrainImg() {74Mat cross = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));75Imgproc.line(cross, new Point(20, matSize / 2), new Point(matSize - 21, matSize / 2), new Scalar(100), 2);76Imgproc.line(cross, new Point(matSize / 2, 20), new Point(matSize / 2, matSize - 21), new Scalar(100), 2);7778return cross;79}8081protected void setUp() throws Exception {82super.setUp();83matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_L1);84matSize = 100;8586truth = new DMatch[] {87new DMatch(0, 0, 0, 3.0975165f),88new DMatch(1, 1, 0, 3.5680308f),89new DMatch(2, 1, 0, 1.3722466f),90new DMatch(3, 1, 0, 1.3041023f),91new DMatch(4, 1, 0, 3.5970376f)92};93}9495public void testAdd() {96matcher.add(Arrays.asList(new Mat()));97assertFalse(matcher.empty());98}99100public void testClear() {101matcher.add(Arrays.asList(new Mat()));102103matcher.clear();104105assertTrue(matcher.empty());106}107108public void testClone() {109Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));110Mat truth = train.clone();111matcher.add(Arrays.asList(train));112113DescriptorMatcher cloned = matcher.clone();114115assertNotNull(cloned);116117List<Mat> descriptors = cloned.getTrainDescriptors();118assertEquals(1, descriptors.size());119assertMatEqual(truth, descriptors.get(0));120}121122public void testCloneBoolean() {123matcher.add(Arrays.asList(new Mat()));124125DescriptorMatcher cloned = matcher.clone(true);126127assertNotNull(cloned);128assertTrue(cloned.empty());129}130131public void testCreate() {132assertNotNull(matcher);133}134135public void testEmpty() {136assertTrue(matcher.empty());137}138139public void testGetTrainDescriptors() {140Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));141Mat truth = train.clone();142matcher.add(Arrays.asList(train));143144List<Mat> descriptors = matcher.getTrainDescriptors();145146assertEquals(1, descriptors.size());147assertMatEqual(truth, descriptors.get(0));148}149150public void testIsMaskSupported() {151assertTrue(matcher.isMaskSupported());152}153154public void testKnnMatchMatListOfListOfDMatchInt() {155fail("Not yet implemented");156}157158public void testKnnMatchMatListOfListOfDMatchIntListOfMat() {159fail("Not yet implemented");160}161162public void testKnnMatchMatListOfListOfDMatchIntListOfMatBoolean() {163fail("Not yet implemented");164}165166public void testKnnMatchMatMatListOfListOfDMatchInt() {167fail("Not yet implemented");168}169170public void testKnnMatchMatMatListOfListOfDMatchIntMat() {171fail("Not yet implemented");172}173174public void testKnnMatchMatMatListOfListOfDMatchIntMatBoolean() {175fail("Not yet implemented");176}177178public void testMatchMatListOfDMatch() {179Mat train = getTrainDescriptors();180Mat query = getQueryDescriptors();181MatOfDMatch matches = new MatOfDMatch();182matcher.add(Arrays.asList(train));183184matcher.match(query, matches);185186assertArrayDMatchEquals(truth, matches.toArray(), EPS);187}188189public void testMatchMatListOfDMatchListOfMat() {190Mat train = getTrainDescriptors();191Mat query = getQueryDescriptors();192Mat mask = getMaskImg();193MatOfDMatch matches = new MatOfDMatch();194matcher.add(Arrays.asList(train));195196matcher.match(query, matches, Arrays.asList(mask));197198assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);199}200201public void testMatchMatMatListOfDMatch() {202Mat train = getTrainDescriptors();203Mat query = getQueryDescriptors();204MatOfDMatch matches = new MatOfDMatch();205206matcher.match(query, train, matches);207208assertArrayDMatchEquals(truth, matches.toArray(), EPS);209}210211public void testMatchMatMatListOfDMatchMat() {212Mat train = getTrainDescriptors();213Mat query = getQueryDescriptors();214Mat mask = getMaskImg();215MatOfDMatch matches = new MatOfDMatch();216217matcher.match(query, train, matches, mask);218219assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);220}221222public void testRadiusMatchMatListOfListOfDMatchFloat() {223fail("Not yet implemented");224}225226public void testRadiusMatchMatListOfListOfDMatchFloatListOfMat() {227fail("Not yet implemented");228}229230public void testRadiusMatchMatListOfListOfDMatchFloatListOfMatBoolean() {231fail("Not yet implemented");232}233234public void testRadiusMatchMatMatListOfListOfDMatchFloat() {235fail("Not yet implemented");236}237238public void testRadiusMatchMatMatListOfListOfDMatchFloatMat() {239fail("Not yet implemented");240}241242public void testRadiusMatchMatMatListOfListOfDMatchFloatMatBoolean() {243fail("Not yet implemented");244}245246public void testRead() {247String filename = OpenCVTestRunner.getTempFileName("yml");248writeFile(filename, "%YAML:1.0\n---\n");249250matcher.read(filename);251assertTrue(true);// BruteforceMatcher has no settings252}253254public void testTrain() {255matcher.train();// BruteforceMatcher does not need to train256}257258public void testWrite() {259String filename = OpenCVTestRunner.getTempFileName("yml");260261matcher.write(filename);262263String truth = "%YAML:1.0\n---\n";264assertEquals(truth, readFile(filename));265}266267}268269270