Path: blob/master/modules/features2d/misc/java/test/BruteForceHammingDescriptorMatcherTest.java
16354 views
package org.opencv.test.features2d;12import java.util.ArrayList;3import java.util.Arrays;4import java.util.List;56import org.opencv.core.CvType;7import org.opencv.core.Mat;8import org.opencv.core.MatOfDMatch;9import org.opencv.core.MatOfKeyPoint;10import org.opencv.core.Point;11import org.opencv.core.Scalar;12import org.opencv.core.DMatch;13import org.opencv.features2d.DescriptorMatcher;14import org.opencv.features2d.FastFeatureDetector;15import org.opencv.test.OpenCVTestCase;16import org.opencv.test.OpenCVTestRunner;17import org.opencv.imgproc.Imgproc;18import org.opencv.features2d.Feature2D;1920public class BruteForceHammingDescriptorMatcherTest extends OpenCVTestCase {2122DescriptorMatcher matcher;23int matSize;24DMatch[] truth;2526private Mat getMaskImg() {27return new Mat(4, 4, CvType.CV_8U, new Scalar(0)) {28{29put(0, 0, 1, 1, 1, 1, 1, 1, 1, 1);30}31};32}3334private Mat getQueryDescriptors() {35return getTestDescriptors(getQueryImg());36}3738private Mat getQueryImg() {39Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));40Imgproc.line(img, new Point(40, matSize - 40), new Point(matSize - 50, 50), new Scalar(0), 8);41return img;42}4344private Mat getTestDescriptors(Mat img) {45MatOfKeyPoint keypoints = new MatOfKeyPoint();46Mat descriptors = new Mat();4748Feature2D detector = FastFeatureDetector.create();49Feature2D extractor = createClassInstance(XFEATURES2D+"BriefDescriptorExtractor", DEFAULT_FACTORY, null, null);5051detector.detect(img, keypoints);52extractor.compute(img, keypoints, descriptors);5354return descriptors;55}5657private Mat getTrainDescriptors() {58return getTestDescriptors(getTrainImg());59}6061private Mat getTrainImg() {62Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));63Imgproc.line(img, new Point(40, 40), new Point(matSize - 40, matSize - 40), new Scalar(0), 8);64return img;65}6667protected void setUp() throws Exception {68super.setUp();69matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);70matSize = 100;7172truth = new DMatch[] {73new DMatch(0, 0, 0, 51),74new DMatch(1, 2, 0, 42),75new DMatch(2, 1, 0, 40),76new DMatch(3, 3, 0, 53) };77}7879public void testAdd() {80matcher.add(Arrays.asList(new Mat()));81assertFalse(matcher.empty());82}8384public void testClear() {85matcher.add(Arrays.asList(new Mat()));8687matcher.clear();8889assertTrue(matcher.empty());90}9192public void testClone() {93Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));94Mat truth = train.clone();95matcher.add(Arrays.asList(train));9697DescriptorMatcher cloned = matcher.clone();9899assertNotNull(cloned);100101List<Mat> descriptors = cloned.getTrainDescriptors();102assertEquals(1, descriptors.size());103assertMatEqual(truth, descriptors.get(0));104}105106public void testCloneBoolean() {107matcher.add(Arrays.asList(new Mat()));108109DescriptorMatcher cloned = matcher.clone(true);110111assertNotNull(cloned);112assertTrue(cloned.empty());113}114115public void testCreate() {116assertNotNull(matcher);117}118119public void testEmpty() {120assertTrue(matcher.empty());121}122123public void testGetTrainDescriptors() {124Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));125Mat truth = train.clone();126matcher.add(Arrays.asList(train));127128List<Mat> descriptors = matcher.getTrainDescriptors();129130assertEquals(1, descriptors.size());131assertMatEqual(truth, descriptors.get(0));132}133134public void testIsMaskSupported() {135assertTrue(matcher.isMaskSupported());136}137138public void testKnnMatchMatListOfListOfDMatchInt() {139fail("Not yet implemented");140}141142public void testKnnMatchMatListOfListOfDMatchIntListOfMat() {143fail("Not yet implemented");144}145146public void testKnnMatchMatListOfListOfDMatchIntListOfMatBoolean() {147fail("Not yet implemented");148}149150public void testKnnMatchMatMatListOfListOfDMatchInt() {151fail("Not yet implemented");152}153154public void testKnnMatchMatMatListOfListOfDMatchIntMat() {155fail("Not yet implemented");156}157158public void testKnnMatchMatMatListOfListOfDMatchIntMatBoolean() {159fail("Not yet implemented");160}161162public void testMatchMatListOfDMatch() {163Mat train = getTrainDescriptors();164Mat query = getQueryDescriptors();165MatOfDMatch matches = new MatOfDMatch();166matcher.add(Arrays.asList(train));167168matcher.match(query, matches);169170assertListDMatchEquals(Arrays.asList(truth), matches.toList(), EPS);171}172173public void testMatchMatListOfDMatchListOfMat() {174Mat train = getTrainDescriptors();175Mat query = getQueryDescriptors();176Mat mask = getMaskImg();177MatOfDMatch matches = new MatOfDMatch();178matcher.add(Arrays.asList(train));179180matcher.match(query, matches, Arrays.asList(mask));181182assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);183}184185public void testMatchMatMatListOfDMatch() {186Mat train = getTrainDescriptors();187Mat query = getQueryDescriptors();188MatOfDMatch matches = new MatOfDMatch();189190matcher.match(query, train, matches);191192assertListDMatchEquals(Arrays.asList(truth), matches.toList(), EPS);193}194195public void testMatchMatMatListOfDMatchMat() {196Mat train = getTrainDescriptors();197Mat query = getQueryDescriptors();198Mat mask = getMaskImg();199MatOfDMatch matches = new MatOfDMatch();200201matcher.match(query, train, matches, mask);202203assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);204}205206public void testRadiusMatchMatListOfListOfDMatchFloat() {207Mat train = getTrainDescriptors();208Mat query = getQueryDescriptors();209ArrayList<MatOfDMatch> matches = new ArrayList<MatOfDMatch>();210211matcher.radiusMatch(query, train, matches, 50.f);212213assertEquals(4, matches.size());214assertTrue(matches.get(0).empty());215assertMatEqual(matches.get(1), new MatOfDMatch(truth[1]), EPS);216assertMatEqual(matches.get(2), new MatOfDMatch(truth[2]), EPS);217assertTrue(matches.get(3).empty());218}219220public void testRadiusMatchMatListOfListOfDMatchFloatListOfMat() {221fail("Not yet implemented");222}223224public void testRadiusMatchMatListOfListOfDMatchFloatListOfMatBoolean() {225fail("Not yet implemented");226}227228public void testRadiusMatchMatMatListOfListOfDMatchFloat() {229fail("Not yet implemented");230}231232public void testRadiusMatchMatMatListOfListOfDMatchFloatMat() {233fail("Not yet implemented");234}235236public void testRadiusMatchMatMatListOfListOfDMatchFloatMatBoolean() {237fail("Not yet implemented");238}239240public void testRead() {241String filename = OpenCVTestRunner.getTempFileName("yml");242writeFile(filename, "%YAML:1.0\n---\n");243244matcher.read(filename);245assertTrue(true);// BruteforceMatcher has no settings246}247248public void testTrain() {249matcher.train();// BruteforceMatcher does not need to train250}251252public void testWrite() {253String filename = OpenCVTestRunner.getTempFileName("yml");254255matcher.write(filename);256257String truth = "%YAML:1.0\n---\n";258assertEquals(truth, readFile(filename));259}260261}262263264