void blurKernel()

in IsometricPatternMatcher/DotExtractor.h [100:122]


  void blurKernel(size_t& radius, const float sigma) {
    radius = std::min((size_t)ceil(3 * sigma), MAX_RAD_BLUR_SMEM - 1);

    float sum = 0.0f;

    const float a = 1.0f / (sigma * std::sqrt(2.0f * M_PI));

    for (size_t i = 0; i < MAX_RAD_BLUR_SMEM; i++) {
      const float b = (float)i * (float)i;

      const float c = -b / (2.0f * (sigma * sigma));

      kernel_[i] = a * exp(c);

      // the kernel is symmetric, so we only store one side of it
      // as a result, coeffs count double...
      sum += (i == 0 ? 1.0 : 2.0) * kernel_[i];
    }

    for (size_t i = 0; i < MAX_RAD_BLUR_SMEM; i++) {
      kernel_[i] /= sum;
    }
  }