in src/ui/Histogram/HistogramUtils.js [40:81]
smoothHistogram(sigma = 1.2, needNormalize = true) {
const SIZE_DIV = 60;
let RAD = Math.floor(this.m_numColors / SIZE_DIV);
// avoid too large neighbourhood window size
const SIZE_LARGE = 32;
if (RAD > SIZE_LARGE) {
RAD = SIZE_LARGE;
}
// console.log(`smoothHistogram. RAD = ${RAD}`);
const KOEF = 1.0 / (2 * sigma * sigma);
const newHist = new Array(this.m_numColors);
let i;
let maxVal = 0;
for (i = 0; i < this.m_numColors; i++) {
let sum = 0;
let sumW = 0;
for (let di = -RAD; di <= RAD; di++) {
const ii = i + di;
const t = di / RAD;
const w = Math.exp(-t * t * KOEF);
if (ii >= 0 && ii < this.m_numColors) {
sum += this.m_histogram[ii] * w;
sumW += w;
}
}
sum /= sumW;
maxVal = sum > maxVal ? sum : maxVal;
newHist[i] = sum;
} // for (i)
// copy back to hist
if (needNormalize) {
for (i = 0; i < this.m_numColors; i++) {
this.m_histogram[i] = newHist[i] / maxVal;
} // for (i)
} else {
for (i = 0; i < this.m_numColors; i++) {
this.m_histogram[i] = newHist[i];
} // for (i)
}
} // smoothHistogram