Skip to content

Commit 2d2e394

Browse files
author
Pablo Pinheiro
committed
Improving brief example
1 parent 3da9638 commit 2d2e394

3 files changed

Lines changed: 85 additions & 31 deletions

File tree

examples/assets/brief1.png

34.7 KB
Loading

examples/assets/brief2.png

22.4 KB
Loading

examples/brief.html

Lines changed: 85 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,104 @@
22

33
<html>
44
<head>
5-
<title>tracking.js - brief algorithm</title>
6-
75
<meta charset="utf-8">
6+
<title>tracking.js - feature matching</title>
7+
<link rel="stylesheet" href="assets/demo.css">
8+
9+
<script src="../build/tracking-min.js"></script>
10+
<script src="../../dat-gui/build/dat.gui.min.js"></script>
811

9-
<script src="../build/tracking.js"></script>
12+
<style>
13+
.demo-container {
14+
background-color: black;
15+
}
16+
#image1, #image2 {
17+
position: absolute;
18+
left: -1000px;
19+
top: -1000px;
20+
}
21+
#canvas {
22+
position: absolute;
23+
left: 50%;
24+
top: 50%;
25+
margin-left: -393px;
26+
margin-top: -147px;
27+
}
28+
</style>
1029
</head>
1130
<body>
12-
<canvas id="canvas1"></canvas>
13-
<canvas id="canvas2"></canvas>
31+
<div class="demo-title">
32+
<p><a href="http://trackingjs.com">tracking.js</a> - match similar feature points in two images</p>
33+
</div>
34+
35+
<div class="demo-frame">
36+
<div class="demo-container">
37+
<img id="image1" src="assets/brief1.png" />
38+
<img id="image2" src="assets/brief2.png" />
39+
<canvas id="canvas" width="786" height="295"></canvas>
40+
</div>
41+
</div>
42+
1443
<script>
15-
var width = 256;
16-
var height = 192;
17-
var canvas1 = document.getElementById('canvas1');
18-
var canvas2 = document.getElementById('canvas2');
19-
var context1 = canvas1.getContext('2d');
20-
var context2 = canvas2.getContext('2d');
44+
window.onload = function() {
45+
var width = 393;
46+
var height = 295;
47+
var canvas = document.getElementById('canvas');
48+
var context = canvas.getContext('2d');
2149

22-
tracking.Canvas.loadImage(canvas1, 'assets/box1.png', 0, 0, width, height, function() {
23-
tracking.Canvas.loadImage(canvas2, 'assets/box2.png', 0, 0, width, height, function() {
50+
var image1 = document.getElementById('image1');
51+
var image2 = document.getElementById('image2');
2452

25-
var imageData1 = context1.getImageData(0, 0, width, height);
26-
var imageData2 = context2.getImageData(0, 0, width, height);
53+
window.descriptorLength = 256;
54+
window.matchesShown = 30;
55+
window.blurRadius = 3;
2756

28-
var gray1 = tracking.Image.grayscale(tracking.Image.blur(imageData1.data, width, height, 3), width, height);
29-
var gray2 = tracking.Image.grayscale(tracking.Image.blur(imageData2.data, width, height, 3), width, height);
57+
var doMatch = function() {
58+
tracking.Brief.N = window.descriptorLength;
3059

31-
var corners1 = tracking.Fast.findCorners(gray1, width, height);
32-
var corners2 = tracking.Fast.findCorners(gray2, width, height);
60+
context.drawImage(image1, 0, 0, width, height);
61+
context.drawImage(image2, width, 0, width, height);
62+
63+
var imageData1 = context.getImageData(0, 0, width, height);
64+
var imageData2 = context.getImageData(width, 0, width, height);
65+
66+
var gray1 = tracking.Image.grayscale(tracking.Image.blur(imageData1.data, width, height, blurRadius), width, height);
67+
var gray2 = tracking.Image.grayscale(tracking.Image.blur(imageData2.data, width, height, blurRadius), width, height);
68+
69+
var corners1 = tracking.Fast.findCorners(gray1, width, height);
70+
var corners2 = tracking.Fast.findCorners(gray2, width, height);
71+
72+
var descriptors1 = tracking.Brief.getDescriptors(gray1, width, corners1);
73+
var descriptors2 = tracking.Brief.getDescriptors(gray2, width, corners2);
74+
75+
var matches = tracking.Brief.reciprocalMatch(corners1, descriptors1, corners2, descriptors2);
3376

34-
var descriptors1 = tracking.Brief.getDescriptors(gray1, width, corners1);
35-
var descriptors2 = tracking.Brief.getDescriptors(gray2, width, corners2);
77+
matches.sort(function(a, b) {
78+
return b.confidence - a.confidence;
79+
});
80+
81+
for (var i = 0; i < Math.min(window.matchesShown, matches.length); i++) {
82+
var color = '#' + Math.floor(Math.random()*16777215).toString(16);
83+
context.fillStyle = color;
84+
context.strokeStyle = color;
85+
context.fillRect(matches[i].keypoint1[0], matches[i].keypoint1[1], 4, 4);
86+
context.fillRect(matches[i].keypoint2[0] + width, matches[i].keypoint2[1], 4, 4);
3687

37-
var matches = tracking.Brief.reciprocalMatch(corners1, descriptors1, corners2, descriptors2);
88+
context.beginPath();
89+
context.moveTo(matches[i].keypoint1[0], matches[i].keypoint1[1]);
90+
context.lineTo(matches[i].keypoint2[0] + width, matches[i].keypoint2[1]);
91+
context.stroke();
3892

39-
for (var i = 0; i < matches.length; i++) {
40-
var color = '#' + Math.floor(Math.random()*16777215).toString(16);
41-
context1.fillStyle = color;
42-
context1.fillRect(matches[i].keypoint1[0], matches[i].keypoint1[1], 4, 4);
43-
context2.fillStyle = color;
44-
context2.fillRect(matches[i].keypoint2[0], matches[i].keypoint2[1], 4, 4);
45-
}
93+
}
94+
};
4695

47-
});
48-
});
96+
doMatch();
97+
98+
var gui = new dat.GUI();
99+
gui.add(window, 'descriptorLength', 128, 512).step(32).onChange(doMatch);
100+
gui.add(window, 'matchesShown', 1, 100).onChange(doMatch);
101+
gui.add(window, 'blurRadius', 1.1, 5).onChange(doMatch);
102+
}
49103
</script>
50104
</body>
51105
</html>

0 commit comments

Comments
 (0)