Blame view

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