Home | History | Annotate | Download | only in test
      1 package org.opencv.test.features2d;
      2 
      3 import java.util.Arrays;
      4 
      5 import org.opencv.core.Core;
      6 import org.opencv.core.CvType;
      7 import org.opencv.core.Mat;
      8 import org.opencv.core.MatOfKeyPoint;
      9 import org.opencv.core.Point;
     10 import org.opencv.core.Scalar;
     11 import org.opencv.features2d.FeatureDetector;
     12 import org.opencv.core.KeyPoint;
     13 import org.opencv.test.OpenCVTestCase;
     14 import org.opencv.test.OpenCVTestRunner;
     15 import org.opencv.imgproc.Imgproc;
     16 
     17 public class STARFeatureDetectorTest extends OpenCVTestCase {
     18 
     19     FeatureDetector detector;
     20     int matSize;
     21     KeyPoint[] truth;
     22 
     23     private Mat getMaskImg() {
     24         Mat mask = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
     25         Mat right = mask.submat(0, matSize, matSize / 2, matSize);
     26         right.setTo(new Scalar(0));
     27         return mask;
     28     }
     29 
     30     private Mat getTestImg() {
     31         Scalar color = new Scalar(0);
     32         int center = matSize / 2;
     33         int radius = 6;
     34         int offset = 40;
     35 
     36         Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
     37         Imgproc.circle(img, new Point(center - offset, center), radius, color, -1);
     38         Imgproc.circle(img, new Point(center + offset, center), radius, color, -1);
     39         Imgproc.circle(img, new Point(center, center - offset), radius, color, -1);
     40         Imgproc.circle(img, new Point(center, center + offset), radius, color, -1);
     41         Imgproc.circle(img, new Point(center, center), radius, color, -1);
     42         return img;
     43     }
     44 
     45     protected void setUp() throws Exception {
     46         super.setUp();
     47         detector = FeatureDetector.create(FeatureDetector.STAR);
     48         matSize = 200;
     49         truth = new KeyPoint[] {
     50                 new KeyPoint( 95,  80, 22, -1, 31.5957f, 0, -1),
     51                 new KeyPoint(105,  80, 22, -1, 31.5957f, 0, -1),
     52                 new KeyPoint( 80,  95, 22, -1, 31.5957f, 0, -1),
     53                 new KeyPoint(120,  95, 22, -1, 31.5957f, 0, -1),
     54                 new KeyPoint(100, 100,  8, -1, 30.f,     0, -1),
     55                 new KeyPoint( 80, 105, 22, -1, 31.5957f, 0, -1),
     56                 new KeyPoint(120, 105, 22, -1, 31.5957f, 0, -1),
     57                 new KeyPoint( 95, 120, 22, -1, 31.5957f, 0, -1),
     58                 new KeyPoint(105, 120, 22, -1, 31.5957f, 0, -1)
     59             };
     60     }
     61 
     62     public void testCreate() {
     63         assertNotNull(detector);
     64     }
     65 
     66     public void testDetectListOfMatListOfListOfKeyPoint() {
     67         fail("Not yet implemented");
     68     }
     69 
     70     public void testDetectListOfMatListOfListOfKeyPointListOfMat() {
     71         fail("Not yet implemented");
     72     }
     73 
     74     public void testDetectMatListOfKeyPoint() {
     75         Mat img = getTestImg();
     76         MatOfKeyPoint keypoints = new MatOfKeyPoint();
     77 
     78         detector.detect(img, keypoints);
     79 
     80         assertListKeyPointEquals(Arrays.asList(truth), keypoints.toList(), EPS);
     81     }
     82 
     83     public void testDetectMatListOfKeyPointMat() {
     84         Mat img = getTestImg();
     85         Mat mask = getMaskImg();
     86         MatOfKeyPoint keypoints = new MatOfKeyPoint();
     87 
     88         detector.detect(img, keypoints, mask);
     89 
     90         assertListKeyPointEquals(Arrays.asList(truth[0], truth[2], truth[5], truth[7]), keypoints.toList(), EPS);
     91     }
     92 
     93     public void testEmpty() {
     94         assertFalse(detector.empty());
     95     }
     96 
     97     public void testRead() {
     98         Mat img = getTestImg();
     99 
    100         MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
    101         detector.detect(img, keypoints1);
    102 
    103         String filename = OpenCVTestRunner.getTempFileName("yml");
    104         writeFile(filename, "%YAML:1.0\nmaxSize: 45\nresponseThreshold: 150\nlineThresholdProjected: 10\nlineThresholdBinarized: 8\nsuppressNonmaxSize: 5\n");
    105         detector.read(filename);
    106 
    107         MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
    108         detector.detect(img, keypoints2);
    109 
    110         assertTrue(keypoints2.total() <= keypoints1.total());
    111     }
    112 
    113     public void testWrite() {
    114         String filename = OpenCVTestRunner.getTempFileName("xml");
    115 
    116         detector.write(filename);
    117 
    118         String truth = "<?xml version=\"1.0\"?>\n<opencv_storage>\n<name>Feature2D.STAR</name>\n<lineThresholdBinarized>8</lineThresholdBinarized>\n<lineThresholdProjected>10</lineThresholdProjected>\n<maxSize>45</maxSize>\n<responseThreshold>30</responseThreshold>\n<suppressNonmaxSize>5</suppressNonmaxSize>\n</opencv_storage>\n";
    119         assertEquals(truth, readFile(filename));
    120     }
    121 
    122     public void testWriteYml() {
    123         String filename = OpenCVTestRunner.getTempFileName("yml");
    124 
    125         detector.write(filename);
    126 
    127         String truth = "%YAML:1.0\nname: \"Feature2D.STAR\"\nlineThresholdBinarized: 8\nlineThresholdProjected: 10\nmaxSize: 45\nresponseThreshold: 30\nsuppressNonmaxSize: 5\n";
    128         assertEquals(truth, readFile(filename));
    129     }
    130 
    131 }
    132