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