double *generate_gaussian_template(unsignedint m, double sigma = 0.84089642){ unsignedint n = m; double *gaussian_template = newdouble[m * n]; double sum = 0.0; for (int y = 0; y < m; y++) { for (int x = 0; x < n; x++) { double r2 = std::pow((double) x - m / 2, 2) + std::pow((double) y - n / 2, 2); double sigma2Inv = 1.f / (2 * std::pow(sigma, 2)); double exp = std::exp(-r2 * sigma2Inv); sum += *(gaussian_template + y * m + x) = sigma2Inv / M_PI * exp; } } double sumInv = 0.0; if (sum > 1e-6) sumInv = 1.0 / sum; for (int y = 0; y < m; y++) for (int x = 0; x < n; x++) *(gaussian_template + y * m + x) *= sumInv; return gaussian_template; }