static Mat calculateKernel()

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;
}