test_features2d.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // This file is part of OpenCV project.
  2. // It is subject to the license terms in the LICENSE file found in the top-level directory
  3. // of this distribution and at http://opencv.org/license.html.
  4. function generateTestFrame(width, height) {
  5. let w = width || 200;
  6. let h = height || 200;
  7. let img = new cv.Mat(h, w, cv.CV_8UC1, new cv.Scalar(0, 0, 0, 0));
  8. let s = new cv.Scalar(255, 255, 255, 255);
  9. let s128 = new cv.Scalar(128, 128, 128, 128);
  10. let rect = new cv.Rect(w / 4, h / 4, w / 2, h / 2);
  11. img.roi(rect).setTo(s);
  12. img.roi(new cv.Rect(w / 2 - w / 8, h / 2 - h / 8, w / 4, h / 4)).setTo(s128);
  13. cv.rectangle(img, new cv.Point(w / 8, h / 8), new cv.Point(w - w / 8, h - h / 8), s, 5);
  14. cv.rectangle(img, new cv.Point(w / 5, h / 5), new cv.Point(w - w / 5, h - h / 5), s128, 3);
  15. cv.line(img, new cv.Point(-w, 0), new cv.Point(w / 2, h / 2), s128, 5);
  16. cv.line(img, new cv.Point(2*w, 0), new cv.Point(w / 2, h / 2), s, 5);
  17. return img;
  18. }
  19. QUnit.module('Features2D', {});
  20. QUnit.test('Detectors', function(assert) {
  21. let image = generateTestFrame();
  22. let kp = new cv.KeyPointVector();
  23. let orb = new cv.ORB();
  24. orb.detect(image, kp);
  25. assert.equal(kp.size(), 68, 'ORB');
  26. let mser = new cv.MSER();
  27. mser.detect(image, kp);
  28. assert.equal(kp.size(), 7, 'MSER');
  29. let brisk = new cv.BRISK();
  30. brisk.detect(image, kp);
  31. assert.equal(kp.size(), 187, 'BRISK');
  32. let ffd = new cv.FastFeatureDetector();
  33. ffd.detect(image, kp);
  34. assert.equal(kp.size(), 12, 'FastFeatureDetector');
  35. let afd = new cv.AgastFeatureDetector();
  36. afd.detect(image, kp);
  37. assert.equal(kp.size(), 67, 'AgastFeatureDetector');
  38. let gftt = new cv.GFTTDetector();
  39. gftt.detect(image, kp);
  40. assert.equal(kp.size(), 168, 'GFTTDetector');
  41. let kaze = new cv.KAZE();
  42. kaze.detect(image, kp);
  43. assert.equal(kp.size(), 159, 'KAZE');
  44. let akaze = new cv.AKAZE();
  45. akaze.detect(image, kp);
  46. assert.equal(kp.size(), 52, 'AKAZE');
  47. });
  48. QUnit.test('SimpleBlobDetector', function(assert) {
  49. let image = generateTestFrame();
  50. let kp = new cv.KeyPointVector();
  51. let sbd = new cv.SimpleBlobDetector();
  52. sbd.detect(image, kp);
  53. assert.equal(kp.size(), 0);
  54. });
  55. QUnit.test('BFMatcher', function(assert) {
  56. // Generate key points.
  57. let image = generateTestFrame();
  58. let kp = new cv.KeyPointVector();
  59. let descriptors = new cv.Mat();
  60. let orb = new cv.ORB();
  61. orb.detectAndCompute(image, new cv.Mat(), kp, descriptors);
  62. assert.equal(kp.size(), 68);
  63. // Run a matcher.
  64. let dm = new cv.DMatchVector();
  65. let matcher = new cv.BFMatcher();
  66. matcher.match(descriptors, descriptors, dm);
  67. assert.equal(dm.size(), 68);
  68. });
  69. QUnit.test('Drawing', function(assert) {
  70. // Generate key points.
  71. let image = generateTestFrame();
  72. let kp = new cv.KeyPointVector();
  73. let descriptors = new cv.Mat();
  74. let orb = new cv.ORB();
  75. orb.detectAndCompute(image, new cv.Mat(), kp, descriptors);
  76. assert.equal(kp.size(), 68);
  77. let dst = new cv.Mat();
  78. cv.drawKeypoints(image, kp, dst);
  79. assert.equal(dst.rows, image.rows);
  80. assert.equal(dst.cols, image.cols);
  81. // Run a matcher.
  82. let dm = new cv.DMatchVector();
  83. let matcher = new cv.BFMatcher();
  84. matcher.match(descriptors, descriptors, dm);
  85. assert.equal(dm.size(), 68);
  86. cv.drawMatches(image, kp, image, kp, dm, dst);
  87. assert.equal(dst.rows, image.rows);
  88. assert.equal(dst.cols, 2 * image.cols);
  89. dm = new cv.DMatchVectorVector();
  90. matcher.knnMatch(descriptors, descriptors, dm, 2);
  91. assert.equal(dm.size(), 68);
  92. cv.drawMatchesKnn(image, kp, image, kp, dm, dst);
  93. assert.equal(dst.rows, image.rows);
  94. assert.equal(dst.cols, 2 * image.cols);
  95. });