docs: public static <T extends ImageBase<T>,Motion extends InvertibleTransform<Motion>>
  	BackgroundMovingGmm<T,Motion> movingGmm(@Nullable ConfigBackgroundGmm config ,
  											Point2Transform2Model_F32<Motion> transform ,
  											ImageType<T> imageType )
  	{
  		if( config == null )
  			config = new ConfigBackgroundGmm();
  		else
  			config.checkValidity();
  
  		BackgroundMovingGmm<T,Motion> ret;
  
  		switch( imageType.getFamily() ) {
  			case GRAY:
  				ret = new BackgroundMovingGmm_SB(config.learningPeriod,config.decayCoefient,
  						config.numberOfGaussian,transform,imageType);
  				break;
  
  			case PLANAR:
  			case INTERLEAVED:
  				ret = new BackgroundMovingGmm_MB(config.learningPeriod,config.decayCoefient,
  						config.numberOfGaussian,transform,imageType);
  				break;
  
  			default:
  				throw new IllegalArgumentException("Unknown image type");
  		}
  
  		ret.setInitialVariance(config.initialVariance);
  		ret.setMaxDistance(config.maxDistance);
  		ret.setSignificantWeight(config.significantWeight);
  		ret.setUnknownValue(config.unknownValue);
  
  		return ret;
  	}