test_features2d.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. if (typeof module !== 'undefined' && module.exports) {
  5. // The environment is Node.js
  6. var cv = require('./opencv.js'); // eslint-disable-line no-var
  7. }
  8. function generateTestFrame(width, height) {
  9. let w = width || 200;
  10. let h = height || 200;
  11. let img = new cv.Mat(h, w, cv.CV_8UC1, new cv.Scalar(0, 0, 0, 0));
  12. let s = new cv.Scalar(255, 255, 255, 255);
  13. let s128 = new cv.Scalar(128, 128, 128, 128);
  14. let rect = new cv.Rect(w / 4, h / 4, w / 2, h / 2);
  15. img.roi(rect).setTo(s);
  16. img.roi(new cv.Rect(w / 2 - w / 8, h / 2 - h / 8, w / 4, h / 4)).setTo(s128);
  17. cv.rectangle(img, new cv.Point(w / 8, h / 8), new cv.Point(w - w / 8, h - h / 8), s, 5);
  18. cv.rectangle(img, new cv.Point(w / 5, h / 5), new cv.Point(w - w / 5, h - h / 5), s128, 3);
  19. cv.line(img, new cv.Point(-w, 0), new cv.Point(w / 2, h / 2), s128, 5);
  20. cv.line(img, new cv.Point(2*w, 0), new cv.Point(w / 2, h / 2), s, 5);
  21. return img;
  22. }
  23. QUnit.module('Features2D', {});
  24. QUnit.test('Detectors', function(assert) {
  25. let image = generateTestFrame();
  26. let kp = new cv.KeyPointVector();
  27. let orb = new cv.ORB();
  28. orb.detect(image, kp);
  29. assert.equal(kp.size(), 67, 'ORB');
  30. let mser = new cv.MSER();
  31. mser.detect(image, kp);
  32. assert.equal(kp.size(), 7, 'MSER');
  33. let brisk = new cv.BRISK();
  34. brisk.detect(image, kp);
  35. assert.equal(kp.size(), 191, 'BRISK');
  36. let ffd = new cv.FastFeatureDetector();
  37. ffd.detect(image, kp);
  38. assert.equal(kp.size(), 12, 'FastFeatureDetector');
  39. let afd = new cv.AgastFeatureDetector();
  40. afd.detect(image, kp);
  41. assert.equal(kp.size(), 67, 'AgastFeatureDetector');
  42. let gftt = new cv.GFTTDetector();
  43. gftt.detect(image, kp);
  44. assert.equal(kp.size(), 168, 'GFTTDetector');
  45. let kaze = new cv.KAZE();
  46. kaze.detect(image, kp);
  47. assert.equal(kp.size(), 159, 'KAZE');
  48. let akaze = new cv.AKAZE();
  49. akaze.detect(image, kp);
  50. assert.equal(kp.size(), 53, 'AKAZE');
  51. });
  52. QUnit.test('BFMatcher', function(assert) {
  53. // Generate key points.
  54. let image = generateTestFrame();
  55. let kp = new cv.KeyPointVector();
  56. let descriptors = new cv.Mat();
  57. let orb = new cv.ORB();
  58. orb.detectAndCompute(image, new cv.Mat(), kp, descriptors);
  59. assert.equal(kp.size(), 67);
  60. // Run a matcher.
  61. let dm = new cv.DMatchVector();
  62. let matcher = new cv.BFMatcher();
  63. matcher.match(descriptors, descriptors, dm);
  64. assert.equal(dm.size(), 67);
  65. });
  66. QUnit.test('Drawing', function(assert) {
  67. // Generate key points.
  68. let image = generateTestFrame();
  69. let kp = new cv.KeyPointVector();
  70. let descriptors = new cv.Mat();
  71. let orb = new cv.ORB();
  72. orb.detectAndCompute(image, new cv.Mat(), kp, descriptors);
  73. assert.equal(kp.size(), 67);
  74. let dst = new cv.Mat();
  75. cv.drawKeypoints(image, kp, dst);
  76. assert.equal(dst.rows, image.rows);
  77. assert.equal(dst.cols, image.cols);
  78. // Run a matcher.
  79. let dm = new cv.DMatchVector();
  80. let matcher = new cv.BFMatcher();
  81. matcher.match(descriptors, descriptors, dm);
  82. assert.equal(dm.size(), 67);
  83. cv.drawMatches(image, kp, image, kp, dm, dst);
  84. assert.equal(dst.rows, image.rows);
  85. assert.equal(dst.cols, 2 * image.cols);
  86. dm = new cv.DMatchVectorVector();
  87. matcher.knnMatch(descriptors, descriptors, dm, 2);
  88. assert.equal(dm.size(), 67);
  89. cv.drawMatchesKnn(image, kp, image, kp, dm, dst);
  90. assert.equal(dst.rows, image.rows);
  91. assert.equal(dst.cols, 2 * image.cols);
  92. });