dltjs
Version:
A package for computing Direct Linear Transformation matrix.
71 lines (55 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _mathjs = require('mathjs');
var _mathjs2 = _interopRequireDefault(_mathjs);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* See this paper for more about DLT.
* https://www.cs.ubc.ca/grads/resources/thesis/May09/Dubrofsky_Elan.pdf
*/
var dltjs = {
/**
* Create transformation matrix from given point pairs.
* @param {array} p0 Original points. At least 4 points must be given.
* @param {array} p1 Transformed points. At least 4 points must be given.
*/
dlt2d: function dlt2d(p0, p1) {
if (p0.length < 4 || p1.length < 4) {
throw new Error('At least 4 point pairs must be given.');
}
var H = [],
B = [];
for (var i = 0; i < 4; i++) {
var _ref = [p0[i][0], p0[i][1], p1[i][0], p1[i][1]],
x = _ref[0],
y = _ref[1],
u = _ref[2],
v = _ref[3];
H.push([x, y, 1, 0, 0, 0, -x * u, -y * u]);
H.push([0, 0, 0, x, y, 1, -x * v, -y * v]);
B.push(u);
B.push(v);
}
var M = _mathjs2.default.lusolve(H, B);
M = _mathjs2.default.reshape(M, [8]);
M.push(1);
return _mathjs2.default.reshape(M, [3, 3]);
},
/**
* Transform point p with matrix M.
* @param {array} M 3x3 matrix.
* @param {array} p point with format of [x, y].
*/
transform2d: function transform2d(M, p) {
if (M[2][2] !== 1) {
M = _mathjs2.default.divide(M, M[2][2]);
}
var p0 = [p[0], p[1], 1];
var p1 = _mathjs2.default.multiply(M, p0);
p1 = _mathjs2.default.divide(p1, p1[2]);
return [p1[0], p1[1]];
}
};
exports.default = dltjs;