in Transform360/Library/VideoFrameTransform.cpp [85:102]
static Mat calculateKernel(float sigma) {
// kernel box length is 2x the sigma
int boxHalfLength = sigma * 2;
Mat kernel = Mat::zeros(1, boxHalfLength * 2 + 1, CV_32F);
float sum = 0;
float sigmaComponent = std::abs(sigma) < kEpsilon ?
0 : 0.5 / (sigma * sigma);
for (int u = -boxHalfLength; u <= boxHalfLength; ++u) {
float value = expf(-(u * u * sigmaComponent));
kernel.at<float>(0, u + boxHalfLength) = value;
sum += value;
}
// Normalize
kernel /= sum;
return kernel;
}