code: public static <T extends ImageBase<T>,Motion extends InvertibleTransform<Motion>>
  	BackgroundMovingGaussian<T,Motion> movingGaussian( @Nonnull ConfigBackgroundGaussian config ,
  													   Point2Transform2Model_F32<Motion> transform,
  													   ImageType<T> imageType ) {
  
  		config.checkValidity();
  
  		BackgroundMovingGaussian<T,Motion> ret;
  
  		switch( imageType.getFamily() ) {
  			case GRAY:
  				ret = new BackgroundMovingGaussian_SB(config.learnRate,config.threshold,
  						transform,config.interpolation,imageType.getImageClass());
  				break;
  
  			case PLANAR:
  				ret =  new BackgroundMovingGaussian_PL(config.learnRate,config.threshold,
  						transform,config.interpolation,imageType);
  				break;
  
  			case INTERLEAVED:
  				ret =  new BackgroundMovingGaussian_IL(config.learnRate,config.threshold,
  						transform,config.interpolation,imageType);
  				break;
  
  			default:
  				throw new IllegalArgumentException("Unknown image type");
  		}
  
  		ret.setInitialVariance(config.initialVariance);
  		ret.setMinimumDifference(config.minimumDifference);
  		ret.setUnknownValue(config.unknownValue);
  
  		return ret;
  	}
docs: Creates an instance of {@link BackgroundMovingGaussian}.
  
  @param config Configures the background model
  @param imageType Type of input image
  @return new instance of the background model