1
package org.opencv.test.features2d;
3
import java.util.Arrays;
6
import org.opencv.core.Core;
7
import org.opencv.core.CvType;
8
import org.opencv.core.Mat;
9
import org.opencv.core.MatOfDMatch;
10
import org.opencv.core.MatOfKeyPoint;
11
import org.opencv.core.Point;
12
import org.opencv.core.Scalar;
13
import org.opencv.core.DMatch;
14
import org.opencv.features2d.DescriptorExtractor;
15
import org.opencv.features2d.DescriptorMatcher;
16
import org.opencv.features2d.FeatureDetector;
17
import org.opencv.test.OpenCVTestCase;
18
import org.opencv.test.OpenCVTestRunner;
19
import org.opencv.imgproc.Imgproc;
21
public class BruteForceHammingLUTDescriptorMatcherTest extends OpenCVTestCase {
23
DescriptorMatcher matcher;
27
private Mat getMaskImg() {
28
return new Mat(4, 4, CvType.CV_8U, new Scalar(0)) {
30
put(0, 0, 1, 1, 1, 1, 1, 1, 1, 1);
35
private Mat getQueryDescriptors() {
36
return getTestDescriptors(getQueryImg());
39
private Mat getQueryImg() {
40
Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
41
Imgproc.line(img, new Point(40, matSize - 40), new Point(matSize - 50, 50), new Scalar(0), 8);
45
private Mat getTestDescriptors(Mat img) {
46
MatOfKeyPoint keypoints = new MatOfKeyPoint();
47
Mat descriptors = new Mat();
49
FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST);
50
DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.BRIEF);
52
detector.detect(img, keypoints);
53
extractor.compute(img, keypoints, descriptors);
58
private Mat getTrainDescriptors() {
59
return getTestDescriptors(getTrainImg());
62
private Mat getTrainImg() {
63
Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
64
Imgproc.line(img, new Point(40, 40), new Point(matSize - 40, matSize - 40), new Scalar(0), 8);
68
protected void setUp() throws Exception {
70
matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT);
73
truth = new DMatch[] {
74
new DMatch(0, 0, 0, 51),
75
new DMatch(1, 2, 0, 42),
76
new DMatch(2, 1, 0, 40),
77
new DMatch(3, 3, 0, 53) };
80
public void testAdd() {
81
matcher.add(Arrays.asList(new Mat()));
82
assertFalse(matcher.empty());
85
public void testClear() {
86
matcher.add(Arrays.asList(new Mat()));
90
assertTrue(matcher.empty());
93
public void testClone() {
94
Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));
95
Mat truth = train.clone();
96
matcher.add(Arrays.asList(train));
98
DescriptorMatcher cloned = matcher.clone();
100
assertNotNull(cloned);
102
List<Mat> descriptors = cloned.getTrainDescriptors();
103
assertEquals(1, descriptors.size());
104
assertMatEqual(truth, descriptors.get(0));
107
public void testCloneBoolean() {
108
matcher.add(Arrays.asList(new Mat()));
110
DescriptorMatcher cloned = matcher.clone(true);
112
assertNotNull(cloned);
113
assertTrue(cloned.empty());
116
public void testCreate() {
117
assertNotNull(matcher);
120
public void testEmpty() {
121
assertTrue(matcher.empty());
124
public void testGetTrainDescriptors() {
125
Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));
126
Mat truth = train.clone();
127
matcher.add(Arrays.asList(train));
129
List<Mat> descriptors = matcher.getTrainDescriptors();
131
assertEquals(1, descriptors.size());
132
assertMatEqual(truth, descriptors.get(0));
135
public void testIsMaskSupported() {
136
assertTrue(matcher.isMaskSupported());
139
public void testKnnMatchMatListOfListOfDMatchInt() {
140
fail("Not yet implemented");
143
public void testKnnMatchMatListOfListOfDMatchIntListOfMat() {
144
fail("Not yet implemented");
147
public void testKnnMatchMatListOfListOfDMatchIntListOfMatBoolean() {
148
fail("Not yet implemented");
151
public void testKnnMatchMatMatListOfListOfDMatchInt() {
152
fail("Not yet implemented");
155
public void testKnnMatchMatMatListOfListOfDMatchIntMat() {
156
fail("Not yet implemented");
159
public void testKnnMatchMatMatListOfListOfDMatchIntMatBoolean() {
160
fail("Not yet implemented");
163
public void testMatchMatListOfDMatch() {
164
Mat train = getTrainDescriptors();
165
Mat query = getQueryDescriptors();
166
MatOfDMatch matches = new MatOfDMatch();
167
matcher.add(Arrays.asList(train));
169
matcher.match(query, matches);
171
assertArrayDMatchEquals(truth, matches.toArray(), EPS);
174
public void testMatchMatListOfDMatchListOfMat() {
175
Mat train = getTrainDescriptors();
176
Mat query = getQueryDescriptors();
177
Mat mask = getMaskImg();
178
MatOfDMatch matches = new MatOfDMatch();
179
matcher.add(Arrays.asList(train));
181
matcher.match(query, matches, Arrays.asList(mask));
183
assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);
186
public void testMatchMatMatListOfDMatch() {
187
Mat train = getTrainDescriptors();
188
Mat query = getQueryDescriptors();
189
MatOfDMatch matches = new MatOfDMatch();
191
matcher.match(query, train, matches);
194
OpenCVTestRunner.Log("matches found: " + matches.size());
195
for (DMatch m : matches.toArray())
196
OpenCVTestRunner.Log(m.toString());
199
assertArrayDMatchEquals(truth, matches.toArray(), EPS);
202
public void testMatchMatMatListOfDMatchMat() {
203
Mat train = getTrainDescriptors();
204
Mat query = getQueryDescriptors();
205
Mat mask = getMaskImg();
206
MatOfDMatch matches = new MatOfDMatch();
208
matcher.match(query, train, matches, mask);
210
assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);
213
public void testRadiusMatchMatListOfListOfDMatchFloat() {
214
fail("Not yet implemented");
217
public void testRadiusMatchMatListOfListOfDMatchFloatListOfMat() {
218
fail("Not yet implemented");
221
public void testRadiusMatchMatListOfListOfDMatchFloatListOfMatBoolean() {
222
fail("Not yet implemented");
225
public void testRadiusMatchMatMatListOfListOfDMatchFloat() {
226
fail("Not yet implemented");
229
public void testRadiusMatchMatMatListOfListOfDMatchFloatMat() {
230
fail("Not yet implemented");
233
public void testRadiusMatchMatMatListOfListOfDMatchFloatMatBoolean() {
234
fail("Not yet implemented");
237
public void testRead() {
238
String filename = OpenCVTestRunner.getTempFileName("yml");
239
writeFile(filename, "%YAML:1.0\n");
241
matcher.read(filename);
242
assertTrue(true);// BruteforceMatcher has no settings
245
public void testTrain() {
246
matcher.train();// BruteforceMatcher does not need to train
249
public void testWrite() {
250
String filename = OpenCVTestRunner.getTempFileName("yml");
252
matcher.write(filename);
254
String truth = "%YAML:1.0\n";
255
assertEquals(truth, readFile(filename));