|
12 | 12 | var createSurface = require('gl-surface3d'); |
13 | 13 |
|
14 | 14 | var ndarray = require('ndarray'); |
15 | | -var invert = require('gl-matrix-invert'); |
16 | 15 | var ndarrayInterp2d = require('ndarray-linear-interpolate').d2; |
17 | 16 |
|
18 | 17 | var interp2d = require('../heatmap/interp2d'); |
@@ -324,22 +323,9 @@ proto.estimateScale = function(resSrc, axis) { |
324 | 323 | // see https://github.com/scijs/ndarray-homography |
325 | 324 |
|
326 | 325 | function fnHomography(out, inp, X) { |
327 | | - var n = 2; // we only use 2 dimensions here |
328 | | - var i, j; |
329 | | - for(i = 0; i < n; ++i) { |
330 | | - out[i] = X[(n + 1) * n + i]; |
331 | | - for(j = 0; j < n; ++j) { |
332 | | - out[i] += X[(n + 1) * j + i] * inp[j]; |
333 | | - } |
334 | | - } |
335 | | - var w = X[(n + 1) * (n + 1) - 1]; |
336 | | - for(j = 0; j < n; ++j) { |
337 | | - w += X[(n + 1) * j + n] * inp[j]; |
338 | | - } |
339 | | - var wr = 1 / w; |
340 | | - for(i = 0; i < n; ++i) { |
341 | | - out[i] *= wr; |
342 | | - } |
| 326 | + var w = X[8] + X[2] * inp[0] + X[5] * inp[1]; |
| 327 | + out[0] = (X[6] + X[0] * inp[0] + X[3] * inp[1]) / w; |
| 328 | + out[1] = (X[7] + X[1] * inp[0] + X[4] * inp[1]) / w; |
343 | 329 | return out; |
344 | 330 | } |
345 | 331 |
|
@@ -378,11 +364,11 @@ proto.refineCoords = function(coords) { |
378 | 364 | var padWidth = 1 + width + 1; |
379 | 365 | var padHeight = 1 + height + 1; |
380 | 366 | var padImg = ndarray(new Float32Array(padWidth * padHeight), [padWidth, padHeight]); |
381 | | - var X = invert([], [ |
382 | | - scaleW, 0, 0, |
383 | | - 0, scaleH, 0, |
| 367 | + var X = [ |
| 368 | + 1 / scaleW, 0, 0, |
| 369 | + 0, 1 / scaleH, 0, |
384 | 370 | 0, 0, 1 |
385 | | - ]); |
| 371 | + ]; |
386 | 372 |
|
387 | 373 | for(var i = 0; i < coords.length; ++i) { |
388 | 374 | this.surface.padField(padImg, coords[i]); |
|
0 commit comments