BruteForceHammingLUTDescriptorMatcherTest.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. package org.opencv.test.features2d;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import org.opencv.core.CvType;
  5. import org.opencv.core.Mat;
  6. import org.opencv.core.MatOfDMatch;
  7. import org.opencv.core.MatOfKeyPoint;
  8. import org.opencv.core.Point;
  9. import org.opencv.core.Scalar;
  10. import org.opencv.core.DMatch;
  11. import org.opencv.features2d.DescriptorMatcher;
  12. import org.opencv.features2d.FastFeatureDetector;
  13. import org.opencv.test.OpenCVTestCase;
  14. import org.opencv.test.OpenCVTestRunner;
  15. import org.opencv.imgproc.Imgproc;
  16. import org.opencv.features2d.Feature2D;
  17. public class BruteForceHammingLUTDescriptorMatcherTest extends OpenCVTestCase {
  18. DescriptorMatcher matcher;
  19. int matSize;
  20. DMatch[] truth;
  21. private Mat getMaskImg() {
  22. return new Mat(4, 4, CvType.CV_8U, new Scalar(0)) {
  23. {
  24. put(0, 0, 1, 1, 1, 1, 1, 1, 1, 1);
  25. }
  26. };
  27. }
  28. private Mat getQueryDescriptors() {
  29. return getTestDescriptors(getQueryImg());
  30. }
  31. private Mat getQueryImg() {
  32. Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
  33. Imgproc.line(img, new Point(40, matSize - 40), new Point(matSize - 50, 50), new Scalar(0), 8);
  34. return img;
  35. }
  36. private Mat getTestDescriptors(Mat img) {
  37. MatOfKeyPoint keypoints = new MatOfKeyPoint();
  38. Mat descriptors = new Mat();
  39. Feature2D detector = FastFeatureDetector.create();
  40. Feature2D extractor = createClassInstance(XFEATURES2D+"BriefDescriptorExtractor", DEFAULT_FACTORY, null, null);
  41. detector.detect(img, keypoints);
  42. extractor.compute(img, keypoints, descriptors);
  43. return descriptors;
  44. }
  45. private Mat getTrainDescriptors() {
  46. return getTestDescriptors(getTrainImg());
  47. }
  48. private Mat getTrainImg() {
  49. Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255));
  50. Imgproc.line(img, new Point(40, 40), new Point(matSize - 40, matSize - 40), new Scalar(0), 8);
  51. return img;
  52. }
  53. protected void setUp() throws Exception {
  54. super.setUp();
  55. matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT);
  56. matSize = 100;
  57. truth = new DMatch[] {
  58. new DMatch(0, 0, 0, 51),
  59. new DMatch(1, 2, 0, 42),
  60. new DMatch(2, 1, 0, 40),
  61. new DMatch(3, 3, 0, 53) };
  62. }
  63. public void testAdd() {
  64. matcher.add(Arrays.asList(new Mat()));
  65. assertFalse(matcher.empty());
  66. }
  67. public void testClear() {
  68. matcher.add(Arrays.asList(new Mat()));
  69. matcher.clear();
  70. assertTrue(matcher.empty());
  71. }
  72. public void testClone() {
  73. Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));
  74. Mat truth = train.clone();
  75. matcher.add(Arrays.asList(train));
  76. DescriptorMatcher cloned = matcher.clone();
  77. assertNotNull(cloned);
  78. List<Mat> descriptors = cloned.getTrainDescriptors();
  79. assertEquals(1, descriptors.size());
  80. assertMatEqual(truth, descriptors.get(0));
  81. }
  82. public void testCloneBoolean() {
  83. matcher.add(Arrays.asList(new Mat()));
  84. DescriptorMatcher cloned = matcher.clone(true);
  85. assertNotNull(cloned);
  86. assertTrue(cloned.empty());
  87. }
  88. public void testCreate() {
  89. assertNotNull(matcher);
  90. }
  91. public void testEmpty() {
  92. assertTrue(matcher.empty());
  93. }
  94. public void testGetTrainDescriptors() {
  95. Mat train = new Mat(1, 1, CvType.CV_8U, new Scalar(123));
  96. Mat truth = train.clone();
  97. matcher.add(Arrays.asList(train));
  98. List<Mat> descriptors = matcher.getTrainDescriptors();
  99. assertEquals(1, descriptors.size());
  100. assertMatEqual(truth, descriptors.get(0));
  101. }
  102. public void testIsMaskSupported() {
  103. assertTrue(matcher.isMaskSupported());
  104. }
  105. public void testKnnMatchMatListOfListOfDMatchInt() {
  106. fail("Not yet implemented");
  107. }
  108. public void testKnnMatchMatListOfListOfDMatchIntListOfMat() {
  109. fail("Not yet implemented");
  110. }
  111. public void testKnnMatchMatListOfListOfDMatchIntListOfMatBoolean() {
  112. fail("Not yet implemented");
  113. }
  114. public void testKnnMatchMatMatListOfListOfDMatchInt() {
  115. fail("Not yet implemented");
  116. }
  117. public void testKnnMatchMatMatListOfListOfDMatchIntMat() {
  118. fail("Not yet implemented");
  119. }
  120. public void testKnnMatchMatMatListOfListOfDMatchIntMatBoolean() {
  121. fail("Not yet implemented");
  122. }
  123. public void testMatchMatListOfDMatch() {
  124. Mat train = getTrainDescriptors();
  125. Mat query = getQueryDescriptors();
  126. MatOfDMatch matches = new MatOfDMatch();
  127. matcher.add(Arrays.asList(train));
  128. matcher.match(query, matches);
  129. assertArrayDMatchEquals(truth, matches.toArray(), EPS);
  130. }
  131. public void testMatchMatListOfDMatchListOfMat() {
  132. Mat train = getTrainDescriptors();
  133. Mat query = getQueryDescriptors();
  134. Mat mask = getMaskImg();
  135. MatOfDMatch matches = new MatOfDMatch();
  136. matcher.add(Arrays.asList(train));
  137. matcher.match(query, matches, Arrays.asList(mask));
  138. assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);
  139. }
  140. public void testMatchMatMatListOfDMatch() {
  141. Mat train = getTrainDescriptors();
  142. Mat query = getQueryDescriptors();
  143. MatOfDMatch matches = new MatOfDMatch();
  144. matcher.match(query, train, matches);
  145. /*
  146. OpenCVTestRunner.Log("matches found: " + matches.size());
  147. for (DMatch m : matches.toArray())
  148. OpenCVTestRunner.Log(m.toString());
  149. */
  150. assertArrayDMatchEquals(truth, matches.toArray(), EPS);
  151. }
  152. public void testMatchMatMatListOfDMatchMat() {
  153. Mat train = getTrainDescriptors();
  154. Mat query = getQueryDescriptors();
  155. Mat mask = getMaskImg();
  156. MatOfDMatch matches = new MatOfDMatch();
  157. matcher.match(query, train, matches, mask);
  158. assertListDMatchEquals(Arrays.asList(truth[0], truth[1]), matches.toList(), EPS);
  159. }
  160. public void testRadiusMatchMatListOfListOfDMatchFloat() {
  161. fail("Not yet implemented");
  162. }
  163. public void testRadiusMatchMatListOfListOfDMatchFloatListOfMat() {
  164. fail("Not yet implemented");
  165. }
  166. public void testRadiusMatchMatListOfListOfDMatchFloatListOfMatBoolean() {
  167. fail("Not yet implemented");
  168. }
  169. public void testRadiusMatchMatMatListOfListOfDMatchFloat() {
  170. fail("Not yet implemented");
  171. }
  172. public void testRadiusMatchMatMatListOfListOfDMatchFloatMat() {
  173. fail("Not yet implemented");
  174. }
  175. public void testRadiusMatchMatMatListOfListOfDMatchFloatMatBoolean() {
  176. fail("Not yet implemented");
  177. }
  178. public void testRead() {
  179. String filename = OpenCVTestRunner.getTempFileName("yml");
  180. writeFile(filename, "%YAML:1.0\n---\n");
  181. matcher.read(filename);
  182. assertTrue(true);// BruteforceMatcher has no settings
  183. }
  184. public void testTrain() {
  185. matcher.train();// BruteforceMatcher does not need to train
  186. }
  187. public void testWrite() {
  188. String filename = OpenCVTestRunner.getTempFileName("yml");
  189. matcher.write(filename);
  190. String truth = "%YAML:1.0\n---\n";
  191. assertEquals(truth, readFile(filename));
  192. }
  193. }