code: public static Kernel makeKernel(float radius) {
          int r = (int) Math.ceil(radius);
          int rows = r * 2 + 1;
          float[] matrix = new float[rows];
          float sigma = radius / 3;
          float sigma22 = 2 * sigma * sigma;
          float sigmaPi2 = 2 * ImageMath.PI * sigma;
          float sqrtSigmaPi2 = (float) Math.sqrt(sigmaPi2);
          float radius2 = radius * radius;
          float total = 0;
          int index = 0;
          for (int row = -r; row <= r; row++) {
              float distance = row * row;
              if (distance > radius2)
                  matrix[index] = 0;
              else
                  matrix[index] = (float) Math.exp(-(distance) / sigma22) / sqrtSigmaPi2;
              total += matrix[index];
              index++;
          }
          for (int i = 0; i < rows; i++)
              matrix[i] /= total;
  
          return new Kernel(rows, 1, matrix);
      }
docs: Make a Gaussian blur kernel.
  
  @param radius the blur radius
  @return the kernel