Source: additive-poisson-noise.js

const h = require('hasard');
const PoissonNoiseGenerator = require('../generators/poisson-noise');
const AdditiveAugmenter = require('./additive');

/**
* Adds noise sampled from a poisson distribution
*
* Warning : This function is slow, use `ia.additiveNoise` with tensorflowjs for fast noise generation
*
* @param {Object} lambda options
* @param {Number} lambda.lambda `lambda` is the exponent of the poisson distribution
* @param {Number} [lambda.scale=1] if `scale` is defined (0 < scale < 1), then the noise can apply at a less granular scale
* @param {Number} [lambda.perChannel=false] If perChannel is true, then the sampled values may be different per channel (and pixel).
* @example
// Simple usage
ia.additivePoissonNoise(3);
* @example
//Simple usage with random variable
ia.additivePoissonNoise(h.integer(0, 3));
* @example
// Explicit usage with random variable
ia.additivePoissonNoise({
	lambda: 3,
	perChannel: true,
	mean: 5
});
* @example
// Explicit usage with random variable
ia.additivePoissonNoise({
	lambda: h.integer(0, 3),
	scale: h.number(0.2, 1),
	perChannel: h.boolean()
});
*/

class AdditivePoissonNoiseAugmenter extends AdditiveAugmenter {
	constructor(opts, ia) {
		let o;
		if (typeof (opts) === 'number' || h.isHasard(opts)) {
			o = {lambda: opts};
		} else {
			o = opts;
		}

		o.Generator = PoissonNoiseGenerator;
		super(o, ia);
	}
}

module.exports = AdditivePoissonNoiseAugmenter;