probe.gl
Version:
JavaScript Console Instrumentation and Benchmarking for Browser and Node
63 lines (51 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.diffImagePixels = diffImagePixels;
var DEFAULT_THRESHOLD = 255 * 0.05;
var getY = function getY(r, g, b) {
return r * 0.29889531 + g * 0.58662247 + b * 0.11448223;
};
var getI = function getI(r, g, b) {
return r * 0.59597799 - g * 0.2741761 - b * 0.32180189;
};
var getQ = function getQ(r, g, b) {
return r * 0.21147017 - g * 0.52261711 + b * 0.31114694;
};
var getESq = function getESq(dY, dI, dQ) {
return 0.5053 * dY * dY + 0.299 * dI * dI + 0.1957 * dQ * dQ;
};
var applyAlpha = function applyAlpha(c, a) {
return 255 + (c - 255) * a / 255;
};
function colorDelta(img1, img2, index) {
return Math.sqrt(colorDeltaSq(img1, img2, index));
}
function colorDeltaSq(img1, img2, index) {
var i = index * 4;
var a1 = img1[i + 3];
var a2 = img2[i + 3];
var r1 = applyAlpha(img1[i + 0], a1);
var g1 = applyAlpha(img1[i + 1], a1);
var b1 = applyAlpha(img1[i + 2], a1);
var r2 = applyAlpha(img2[i + 0], a2);
var g2 = applyAlpha(img2[i + 1], a2);
var b2 = applyAlpha(img2[i + 2], a2);
return getESq(getY(r1, g1, b1) - getY(r2, g2, b2), getI(r1, g1, b1) - getI(r2, g2, b2), getQ(r1, g1, b1) - getQ(r2, g2, b2));
}
function diffImagePixels(data1, data2) {
var colorDeltaThreshold = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_THRESHOLD;
var pixelCount = data1.data.length / 4;
var maxDeltaSq = colorDeltaThreshold * colorDeltaThreshold;
var badPixels = 0;
for (var i = 0; i < pixelCount; i++) {
var delta = colorDeltaSq(data1.data, data2.data, i);
if (delta > maxDeltaSq) {
badPixels++;
}
}
var percentage = 1 - badPixels / pixelCount;
return percentage;
}
//# sourceMappingURL=diff-images.js.map