mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 19:50:38 +08:00
Java API: added new tests for SURF and STAR feature detectors
This commit is contained in:
parent
257c0bf413
commit
1890a0ae9a
@ -1,31 +0,0 @@
|
||||
package org.opencv.test.features2d;
|
||||
|
||||
import org.opencv.features2d.MSER;
|
||||
import org.opencv.test.OpenCVTestCase;
|
||||
|
||||
public class MSERTest extends OpenCVTestCase {
|
||||
|
||||
private MSER mser;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
mser = null;
|
||||
}
|
||||
|
||||
public void test_1() {
|
||||
super.test_1("FEATURES2D.MSER");
|
||||
}
|
||||
|
||||
public void testMSER() {
|
||||
mser = new MSER();
|
||||
assertTrue(null != mser);
|
||||
}
|
||||
|
||||
public void testMSERIntIntIntDoubleDoubleIntDoubleDoubleInt() {
|
||||
mser = new MSER(5, 60, 14400, .25f, .2f, 200, 1.01, .003, 5);
|
||||
assertTrue(null != mser);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
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.FeatureDetector;
|
||||
import org.opencv.features2d.KeyPoint;
|
||||
import org.opencv.test.OpenCVTestCase;
|
||||
import org.opencv.test.OpenCVTestRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class STARFeatureDetectorTest extends OpenCVTestCase {
|
||||
|
||||
FeatureDetector detector;
|
||||
KeyPoint[] truth;
|
||||
int matSize;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
detector = FeatureDetector.create(FeatureDetector.STAR);
|
||||
|
||||
matSize = 200;
|
||||
|
||||
truth = new KeyPoint[] {
|
||||
new KeyPoint(95, 80, 22, -1, 31.595734f, 0, -1),
|
||||
new KeyPoint(105, 80, 22, -1, 31.595734f, 0, -1),
|
||||
new KeyPoint(80, 95, 22, -1, 31.595734f, 0, -1),
|
||||
new KeyPoint(120, 95, 22, -1, 31.595734f, 0, -1),
|
||||
new KeyPoint(100, 100, 8, -1, -219.90825f, 0, -1),
|
||||
new KeyPoint(80, 105, 22, -1, 31.595734f, 0, -1),
|
||||
new KeyPoint(120, 105, 22, -1, 31.595734f, 0, -1),
|
||||
new KeyPoint(95, 120, 22, -1, 31.595734f, 0, -1),
|
||||
new KeyPoint(105, 120, 22, -1, 31.595734f, 0, -1) };
|
||||
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
private Mat getTestImg() {
|
||||
Scalar color = new Scalar(0);
|
||||
int center = matSize / 2;
|
||||
int radius = 6;
|
||||
int offset = 40;
|
||||
|
||||
Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
|
||||
Core.circle(img, new Point(center - offset, center), radius, color, -1);
|
||||
Core.circle(img, new Point(center + offset, center), radius, color, -1);
|
||||
Core.circle(img, new Point(center, center - offset), radius, color, -1);
|
||||
Core.circle(img, new Point(center, center + offset), radius, color, -1);
|
||||
Core.circle(img, new Point(center, center), radius, color, -1);
|
||||
return img;
|
||||
}
|
||||
|
||||
private Mat getMaskImg() {
|
||||
Mat mask = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
|
||||
Mat right = mask.submat(0, matSize, matSize / 2, matSize);
|
||||
right.setTo(new Scalar(0));
|
||||
return mask;
|
||||
}
|
||||
|
||||
public void testCreate() {
|
||||
assertNotNull(detector);
|
||||
}
|
||||
|
||||
public void testDetectMatListOfKeyPointMat() {
|
||||
Mat img = getTestImg();
|
||||
Mat mask = getMaskImg();
|
||||
List<KeyPoint> keypoints = new ArrayList<KeyPoint>();
|
||||
|
||||
detector.detect(img, keypoints, mask);
|
||||
|
||||
KeyPoint[] _truth = new KeyPoint[] { truth[0], truth[2], truth[5], truth[7] };
|
||||
|
||||
assertEquals(_truth.length, keypoints.size());
|
||||
for (int i = 0; i < _truth.length; i++)
|
||||
assertKeyPointEqual(_truth[i], keypoints.get(i), EPS);
|
||||
}
|
||||
|
||||
public void testDetectMatListOfKeyPoint() {
|
||||
Mat img = getTestImg();
|
||||
List<KeyPoint> keypoints = new ArrayList<KeyPoint>();
|
||||
|
||||
detector.detect(img, keypoints);
|
||||
|
||||
assertEquals(truth.length, keypoints.size());
|
||||
for (int i = 0; i < truth.length; i++)
|
||||
assertKeyPointEqual(truth[i], keypoints.get(i), EPS);
|
||||
}
|
||||
|
||||
public void testEmpty() {
|
||||
assertFalse(detector.empty());
|
||||
}
|
||||
|
||||
public void testRead() {
|
||||
Mat img = getTestImg();
|
||||
|
||||
List<KeyPoint> keypoints1 = new ArrayList<KeyPoint>();
|
||||
detector.detect(img, keypoints1);
|
||||
|
||||
String filename = OpenCVTestRunner.getTempFileName("yml");
|
||||
writeFile(filename, "%YAML:1.0\nmaxSize: 45\nresponseThreshold: 150\nlineThresholdProjected: 10\nlineThresholdBinarized: 8\nsuppressNonmaxSize: 5\n");
|
||||
detector.read(filename);
|
||||
|
||||
List<KeyPoint> keypoints2 = new ArrayList<KeyPoint>();
|
||||
detector.detect(img, keypoints2);
|
||||
|
||||
assertTrue(keypoints2.size() <= keypoints1.size());
|
||||
}
|
||||
|
||||
public void testWrite() {
|
||||
String filename = OpenCVTestRunner.getTempFileName("xml");
|
||||
|
||||
detector.write(filename);
|
||||
|
||||
String truth = "<?xml version=\"1.0\"?>\n<opencv_storage>\n<maxSize>45</maxSize>\n<responseThreshold>30</responseThreshold>\n<lineThresholdProjected>10</lineThresholdProjected>\n<lineThresholdBinarized>8</lineThresholdBinarized>\n<suppressNonmaxSize>5</suppressNonmaxSize>\n</opencv_storage>\n";
|
||||
assertEquals(truth, readFile(filename));
|
||||
}
|
||||
|
||||
public void testWriteYml() {
|
||||
String filename = OpenCVTestRunner.getTempFileName("yml");
|
||||
|
||||
detector.write(filename);
|
||||
|
||||
String truth = "%YAML:1.0\nmaxSize: 45\nresponseThreshold: 30\nlineThresholdProjected: 10\nlineThresholdBinarized: 8\nsuppressNonmaxSize: 5\n";
|
||||
assertEquals(truth, readFile(filename));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
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.FeatureDetector;
|
||||
import org.opencv.features2d.KeyPoint;
|
||||
import org.opencv.test.OpenCVTestCase;
|
||||
import org.opencv.test.OpenCVTestRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public class SURFFeatureDetectorTest extends OpenCVTestCase {
|
||||
|
||||
FeatureDetector detector;
|
||||
KeyPoint[] truth;
|
||||
int matSize;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
detector = FeatureDetector.create(FeatureDetector.SURF);
|
||||
|
||||
matSize = 100;
|
||||
|
||||
truth = new KeyPoint[] { new KeyPoint(55.775577545166016f, 44.224422454833984f, 16, 9.754629f, 8617.863f, 1, -1),
|
||||
new KeyPoint(44.224422454833984f, 44.224422454833984f, 16, 99.75463f, 8617.863f, 1, -1),
|
||||
new KeyPoint(44.224422454833984f, 55.775577545166016f, 16, 189.7546f, 8617.863f, 1, -1),
|
||||
new KeyPoint(55.775577545166016f, 55.775577545166016f, 16, 279.75464f, 8617.863f, 1, -1) };
|
||||
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
private Mat getTestImg() {
|
||||
Mat cross = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
|
||||
Core.line(cross, new Point(20, matSize / 2), new Point(matSize - 21, matSize / 2), new Scalar(100), 2);
|
||||
Core.line(cross, new Point(matSize / 2, 20), new Point(matSize / 2, matSize - 21), new Scalar(100), 2);
|
||||
|
||||
return cross;
|
||||
}
|
||||
|
||||
private void order(List<KeyPoint> points) {
|
||||
Collections.sort(points, new Comparator<KeyPoint>() {
|
||||
public int compare(KeyPoint p1, KeyPoint p2) {
|
||||
if (p1.angle < p2.angle)
|
||||
return -1;
|
||||
if (p1.angle > p2.angle)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private Mat getMaskImg() {
|
||||
Mat mask = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
|
||||
Mat right = mask.submat(0, matSize, matSize / 2, matSize);
|
||||
right.setTo(new Scalar(0));
|
||||
return mask;
|
||||
}
|
||||
|
||||
public void testCreate() {
|
||||
assertNotNull(detector);
|
||||
}
|
||||
|
||||
public void testDetectMatListOfKeyPointMat() {
|
||||
String filename = OpenCVTestRunner.getTempFileName("yml");
|
||||
writeFile(filename, "%YAML:1.0\nhessianThreshold: 8000.\noctaves: 3\noctaveLayers: 4\nupright: 0\n");
|
||||
detector.read(filename);
|
||||
|
||||
Mat img = getTestImg();
|
||||
Mat mask = getMaskImg();
|
||||
List<KeyPoint> keypoints = new ArrayList<KeyPoint>();
|
||||
|
||||
detector.detect(img, keypoints, mask);
|
||||
|
||||
KeyPoint[] _truth = new KeyPoint[] { truth[1], truth[2] };
|
||||
|
||||
assertEquals(_truth.length, keypoints.size());
|
||||
order(keypoints);
|
||||
for (int i = 0; i < _truth.length; i++)
|
||||
assertKeyPointEqual(_truth[i], keypoints.get(i), EPS);
|
||||
}
|
||||
|
||||
public void testDetectMatListOfKeyPoint() {
|
||||
String filename = OpenCVTestRunner.getTempFileName("yml");
|
||||
writeFile(filename, "%YAML:1.0\nhessianThreshold: 8000.\noctaves: 3\noctaveLayers: 4\nupright: 0\n");
|
||||
detector.read(filename);
|
||||
|
||||
List<KeyPoint> keypoints = new ArrayList<KeyPoint>();
|
||||
Mat cross = getTestImg();
|
||||
|
||||
detector.detect(cross, keypoints);
|
||||
|
||||
assertEquals(truth.length, keypoints.size());
|
||||
order(keypoints);
|
||||
for (int i = 0; i < truth.length; i++)
|
||||
assertKeyPointEqual(truth[i], keypoints.get(i), EPS);
|
||||
}
|
||||
|
||||
public void testEmpty() {
|
||||
assertFalse(detector.empty());
|
||||
}
|
||||
|
||||
public void testRead() {
|
||||
Mat cross = getTestImg();
|
||||
|
||||
List<KeyPoint> keypoints1 = new ArrayList<KeyPoint>();
|
||||
detector.detect(cross, keypoints1);
|
||||
|
||||
String filename = OpenCVTestRunner.getTempFileName("yml");
|
||||
writeFile(filename, "%YAML:1.0\nhessianThreshold: 8000.\noctaves: 3\noctaveLayers: 4\nupright: 0\n");
|
||||
detector.read(filename);
|
||||
|
||||
List<KeyPoint> keypoints2 = new ArrayList<KeyPoint>();
|
||||
detector.detect(cross, keypoints2);
|
||||
|
||||
assertTrue(keypoints2.size() <= keypoints1.size());
|
||||
}
|
||||
|
||||
public void testWrite() {
|
||||
String filename = OpenCVTestRunner.getTempFileName("xml");
|
||||
|
||||
detector.write(filename);
|
||||
|
||||
String truth = "<?xml version=\"1.0\"?>\n<opencv_storage>\n<hessianThreshold>400.</hessianThreshold>\n<octaves>3</octaves>\n<octaveLayers>4</octaveLayers>\n<upright>0</upright>\n</opencv_storage>\n";
|
||||
assertEquals(truth, readFile(filename));
|
||||
}
|
||||
|
||||
public void testWriteYml() {
|
||||
String filename = OpenCVTestRunner.getTempFileName("yml");
|
||||
|
||||
detector.write(filename);
|
||||
|
||||
String truth = "%YAML:1.0\nhessianThreshold: 400.\noctaves: 3\noctaveLayers: 4\nupright: 0\n";
|
||||
assertEquals(truth, readFile(filename));
|
||||
}
|
||||
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
package org.opencv.test.features2d;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
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.KeyPoint;
|
||||
import org.opencv.features2d.StarDetector;
|
||||
import org.opencv.test.OpenCVTestCase;
|
||||
|
||||
public class StarDetectorTest extends OpenCVTestCase {
|
||||
|
||||
public void test_1() {
|
||||
super.test_1("FEATURES2D.StarDetector");
|
||||
}
|
||||
|
||||
private Mat getStarImg() {
|
||||
Scalar color = new Scalar(0);
|
||||
int center = 100;
|
||||
int radius = 5;
|
||||
int offset = 40;
|
||||
|
||||
Mat img = new Mat(200, 200, CvType.CV_8U, new Scalar(255));
|
||||
Core.circle(img, new Point(center - offset, center), radius, color, -1);
|
||||
Core.circle(img, new Point(center + offset, center), radius, color, -1);
|
||||
Core.circle(img, new Point(center, center - offset), radius, color, -1);
|
||||
Core.circle(img, new Point(center, center + offset), radius, color, -1);
|
||||
Core.circle(img, new Point(center, center), radius, color, -1);
|
||||
return img;
|
||||
}
|
||||
|
||||
public void testDetect() {
|
||||
Mat img = getStarImg();
|
||||
List<KeyPoint> keypoints = new LinkedList<KeyPoint>();
|
||||
StarDetector star = new StarDetector();
|
||||
|
||||
star.detect(img, keypoints);
|
||||
|
||||
KeyPoint truth = new KeyPoint(100, 100, 8, -1, -223.40334f, 0, -1);
|
||||
assertEquals(1, keypoints.size());
|
||||
assertKeyPointEqual(truth, keypoints.get(0), EPS);
|
||||
}
|
||||
|
||||
public void testStarDetector() {
|
||||
StarDetector star = new StarDetector();
|
||||
assertNotNull(star);
|
||||
}
|
||||
|
||||
public void testStarDetectorIntIntIntIntInt() {
|
||||
StarDetector star = new StarDetector(45, 30, 10, 8, 5);
|
||||
assertNotNull(star);
|
||||
}
|
||||
|
||||
}
|
@ -14,6 +14,7 @@ class_ignore_list = (
|
||||
#features2d
|
||||
"KeyPoint",
|
||||
"MSER",
|
||||
"StarDetector",
|
||||
)
|
||||
|
||||
const_ignore_list = (
|
||||
|
Loading…
Reference in New Issue
Block a user