image-js
Version:
Image processing and manipulation in JavaScript
45 lines (44 loc) • 1.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.validateKernel = validateKernel;
var _isInteger = _interopRequireDefault(require("is-integer"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function validateKernel(kernel) {
let kHeight, kWidth;
if (Array.isArray(kernel)) {
if (Array.isArray(kernel[0])) {
// 2D array
if ((kernel.length & 1) === 0 || (kernel[0].length & 1) === 0) {
throw new RangeError('validateKernel: Kernel rows and columns should be odd numbers');
} else {
kHeight = Math.floor(kernel.length / 2);
kWidth = Math.floor(kernel[0].length / 2);
}
} else {
let kernelWidth = Math.sqrt(kernel.length);
if ((0, _isInteger.default)(kernelWidth)) {
kWidth = kHeight = Math.floor(Math.sqrt(kernel.length) / 2);
} else {
throw new RangeError('validateKernel: Kernel array should be a square');
}
// we convert the array to a matrix
let newKernel = new Array(kernelWidth);
for (let i = 0; i < kernelWidth; i++) {
newKernel[i] = new Array(kernelWidth);
for (let j = 0; j < kernelWidth; j++) {
newKernel[i][j] = kernel[i * kernelWidth + j];
}
}
kernel = newKernel;
}
} else {
throw new Error(`validateKernel: Invalid Kernel: ${kernel}`);
}
return {
kernel,
kWidth,
kHeight
};
}