Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/features2d/misc/java/test/BruteForceSL2DescriptorMatcherTest.java
16354 views
1
package org.opencv.test.features2d;
2
3
import java.util.Arrays;
4
import java.util.List;
5
6
import org.opencv.core.CvType;
7
import org.opencv.core.Mat;
8
import org.opencv.core.MatOfDMatch;
9
import org.opencv.core.MatOfKeyPoint;
10
import org.opencv.core.Point;
11
import org.opencv.core.Scalar;
12
import org.opencv.core.DMatch;
13
import org.opencv.features2d.DescriptorMatcher;
14
import org.opencv.core.KeyPoint;
15
import org.opencv.test.OpenCVTestCase;
16
import org.opencv.test.OpenCVTestRunner;
17
import org.opencv.imgproc.Imgproc;
18
import org.opencv.features2d.Feature2D;
19
20
public class BruteForceSL2DescriptorMatcherTest extends OpenCVTestCase {
21
22
DescriptorMatcher matcher;
23
int matSize;
24
DMatch[] truth;
25
26
private Mat getMaskImg() {
27
return new Mat(5, 2, CvType.CV_8U, new Scalar(0)) {
28
{
29
put(0, 0, 1, 1, 1, 1);
30
}
31
};
32
}
33
34
/*
35
private float sqr(float val){
36
return val * val;
37
}
38
*/
39
40
private Mat getQueryDescriptors() {
41
Mat img = getQueryImg();
42
MatOfKeyPoint keypoints = new MatOfKeyPoint();
43
Mat descriptors = new Mat();
44
45
Feature2D detector = createClassInstance(XFEATURES2D+"SURF", DEFAULT_FACTORY, null, null);
46
Feature2D extractor = createClassInstance(XFEATURES2D+"SURF", DEFAULT_FACTORY, null, null);
47
48
setProperty(detector, "hessianThreshold", "double", 8000);
49
setProperty(detector, "nOctaves", "int", 3);
50
setProperty(detector, "nOctaveLayers", "int", 4);
51
setProperty(detector, "upright", "boolean", false);
52
53
detector.detect(img, keypoints);
54
extractor.compute(img, keypoints, descriptors);
55
56
return descriptors;
57
}
58
59
private Mat getQueryImg() {
60
Mat cross = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
61
Imgproc.line(cross, new Point(30, matSize / 2), new Point(matSize - 31, matSize / 2), new Scalar(100), 3);
62
Imgproc.line(cross, new Point(matSize / 2, 30), new Point(matSize / 2, matSize - 31), new Scalar(100), 3);
63
64
return cross;
65
}
66
67
private Mat getTrainDescriptors() {
68
Mat img = getTrainImg();
69
MatOfKeyPoint keypoints = new MatOfKeyPoint(new KeyPoint(50, 50, 16, 0, 20000, 1, -1), new KeyPoint(42, 42, 16, 160, 10000, 1, -1));
70
Mat descriptors = new Mat();
71
72
Feature2D extractor = createClassInstance(XFEATURES2D+"SURF", DEFAULT_FACTORY, null, null);
73
74
extractor.compute(img, keypoints, descriptors);
75
76
return descriptors;
77
}
78
79
private Mat getTrainImg() {
80
Mat cross = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
81
Imgproc.line(cross, new Point(20, matSize / 2), new Point(matSize - 21, matSize / 2), new Scalar(100), 2);
82
Imgproc.line(cross, new Point(matSize / 2, 20), new Point(matSize / 2, matSize - 21), new Scalar(100), 2);
83
84
return cross;
85
}
86
87
protected void setUp() throws Exception {
88
super.setUp();
89
matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_SL2);
90
matSize = 100;
91
92
truth = new DMatch[] {
93
new DMatch(0, 0, 0, 0.3858146f),
94
new DMatch(1, 1, 0, 0.8421953f),
95
new DMatch(2, 1, 0, 0.0968556f),
96
new DMatch(3, 1, 0, 0.0855606f),
97
new DMatch(4, 1, 0, 0.8666080f)
98
};
99
}
100
101
public void testAdd() {
102
matcher.add(Arrays.asList(new Mat()));
103
assertFalse(matcher.empty());
104
}
105
106
public void testClear() {
107
matcher.add(Arrays.asList(new Mat()));
108
109
matcher.clear();
110
111
assertTrue(matcher.empty());
112
}
113
114
public void testClone() {
115
Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));
116
Mat truth = train.clone();
117
matcher.add(Arrays.asList(train));
118
119
DescriptorMatcher cloned = matcher.clone();
120
121
assertNotNull(cloned);
122
123
List<Mat> descriptors = cloned.getTrainDescriptors();
124
assertEquals(1, descriptors.size());
125
assertMatEqual(truth, descriptors.get(0));
126
}
127
128
public void testCloneBoolean() {
129
matcher.add(Arrays.asList(new Mat()));
130
131
DescriptorMatcher cloned = matcher.clone(true);
132
133
assertNotNull(cloned);
134
assertTrue(cloned.empty());
135
}
136
137
public void testCreate() {
138
assertNotNull(matcher);
139
}
140
141
public void testEmpty() {
142
assertTrue(matcher.empty());
143
}
144
145
public void testGetTrainDescriptors() {
146
Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));
147
Mat truth = train.clone();
148
matcher.add(Arrays.asList(train));
149
150
List<Mat> descriptors = matcher.getTrainDescriptors();
151
152
assertEquals(1, descriptors.size());
153
assertMatEqual(truth, descriptors.get(0));
154
}
155
156
public void testIsMaskSupported() {
157
assertTrue(matcher.isMaskSupported());
158
}
159
160
public void testKnnMatchMatListOfListOfDMatchInt() {
161
fail("Not yet implemented");
162
}
163
164
public void testKnnMatchMatListOfListOfDMatchIntListOfMat() {
165
fail("Not yet implemented");
166
}
167
168
public void testKnnMatchMatListOfListOfDMatchIntListOfMatBoolean() {
169
fail("Not yet implemented");
170
}
171
172
public void testKnnMatchMatMatListOfListOfDMatchInt() {
173
fail("Not yet implemented");
174
}
175
176
public void testKnnMatchMatMatListOfListOfDMatchIntMat() {
177
fail("Not yet implemented");
178
}
179
180
public void testKnnMatchMatMatListOfListOfDMatchIntMatBoolean() {
181
fail("Not yet implemented");
182
}
183
184
public void testMatchMatListOfDMatch() {
185
Mat train = getTrainDescriptors();
186
Mat query = getQueryDescriptors();
187
MatOfDMatch matches = new MatOfDMatch();
188
matcher.add(Arrays.asList(train));
189
190
matcher.match(query, matches);
191
OpenCVTestRunner.Log(matches);
192
OpenCVTestRunner.Log(matches);
193
OpenCVTestRunner.Log(matches);
194
195
assertArrayDMatchEquals(truth, matches.toArray(), EPS);
196
}
197
198
public void testMatchMatListOfDMatchListOfMat() {
199
Mat train = getTrainDescriptors();
200
Mat query = getQueryDescriptors();
201
Mat mask = getMaskImg();
202
MatOfDMatch matches = new MatOfDMatch();
203
matcher.add(Arrays.asList(train));
204
205
matcher.match(query, matches, Arrays.asList(mask));
206
207
assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);
208
}
209
210
public void testMatchMatMatListOfDMatch() {
211
Mat train = getTrainDescriptors();
212
Mat query = getQueryDescriptors();
213
MatOfDMatch matches = new MatOfDMatch();
214
215
matcher.match(query, train, matches);
216
217
assertArrayDMatchEquals(truth, matches.toArray(), EPS);
218
219
// OpenCVTestRunner.Log("matches found: " + matches.size());
220
// for (DMatch m : matches)
221
// OpenCVTestRunner.Log(m.toString());
222
}
223
224
public void testMatchMatMatListOfDMatchMat() {
225
Mat train = getTrainDescriptors();
226
Mat query = getQueryDescriptors();
227
Mat mask = getMaskImg();
228
MatOfDMatch matches = new MatOfDMatch();
229
230
matcher.match(query, train, matches, mask);
231
232
assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);
233
}
234
235
public void testRadiusMatchMatListOfListOfDMatchFloat() {
236
fail("Not yet implemented");
237
}
238
239
public void testRadiusMatchMatListOfListOfDMatchFloatListOfMat() {
240
fail("Not yet implemented");
241
}
242
243
public void testRadiusMatchMatListOfListOfDMatchFloatListOfMatBoolean() {
244
fail("Not yet implemented");
245
}
246
247
public void testRadiusMatchMatMatListOfListOfDMatchFloat() {
248
fail("Not yet implemented");
249
}
250
251
public void testRadiusMatchMatMatListOfListOfDMatchFloatMat() {
252
fail("Not yet implemented");
253
}
254
255
public void testRadiusMatchMatMatListOfListOfDMatchFloatMatBoolean() {
256
fail("Not yet implemented");
257
}
258
259
public void testRead() {
260
String filename = OpenCVTestRunner.getTempFileName("yml");
261
writeFile(filename, "%YAML:1.0\n---\n");
262
263
matcher.read(filename);
264
assertTrue(true);// BruteforceMatcher has no settings
265
}
266
267
public void testTrain() {
268
matcher.train();// BruteforceMatcher does not need to train
269
}
270
271
public void testWrite() {
272
String filename = OpenCVTestRunner.getTempFileName("yml");
273
274
matcher.write(filename);
275
276
String truth = "%YAML:1.0\n---\n";
277
assertEquals(truth, readFile(filename));
278
}
279
280
}
281
282