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