code: public static GrayU8 gaussian(GrayU8 input, @Nullable GrayU8 output, double sigma , int radius,
  								  @Nullable GrayU8 storage ) {
  		output = InputSanityCheck.checkDeclare(input,output);
  		storage = InputSanityCheck.checkDeclare(input,storage,GrayU8.class);
  
  		boolean processed = BOverrideBlurImageOps.invokeNativeGaussian(input, output, sigma,radius, storage);
  
  		if( !processed ) {
  			Kernel1D_S32 kernel = FactoryKernelGaussian.gaussian(Kernel1D_S32.class, sigma, radius);
  			ConvolveImageNormalized.horizontal(kernel, input, storage);
  			ConvolveImageNormalized.vertical(kernel, storage, output);
  		}
  
  		return output;
  	}
docs: Applies Gaussian blur.
  
  @param input Input image.  Not modified.
  @param output (Optional) Storage for output image, Can be null.  Modified.
  @param sigma Gaussian distribution's sigma.  If &le; 0 then will be selected based on radius.
  @param radius Radius of the Gaussian blur function. If &le; 0 then radius will be determined by sigma.
  @param storage (Optional) Storage for intermediate results.  Same size as input image.  Can be null.
  @return Output blurred image.