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