// 1D gaussian kernel // pretty much ripped from here: http://www.apileofgrains.nl/blur-filters-c/ vector gaussianKernel( int radius, float weight = 1.) { int mem_amount = (radius*2)+1; vector kernel( (radius*2) + 1 ); float twoRadiusSquaredRecip = 1.0 / (2.0 * radius * radius); float sqrtTwoPiTimesRadiusRecip = 1.0 / (sqrt(2.0 * PI) * radius); // Create Gaussian Kernel int r = -radius; float sum = 0, x, v; for (int i = 0; i < kernel.size(); i++) { v = sqrtTwoPiTimesRadiusRecip * exp(-pow(r * weight, 2) * twoRadiusSquaredRecip); kernel[i] = v; sum+=v; r++; } // normalize for (auto& k: kernel) k /= sum; return kernel; }