code: public static <T extends ImageGray<T>>
  	InputToBinary<T> blockMinMax(ConfigLength regionWidth, double scale, boolean down,
  								 boolean thresholdFromLocalBlocks, double minimumSpread, Class<T> inputType) {
  		if( BOverrideFactoryThresholdBinary.blockMinMax != null )
  			return BOverrideFactoryThresholdBinary.blockMinMax.handle(regionWidth, scale, down,
  					minimumSpread,thresholdFromLocalBlocks, inputType);
  
  		BlockProcessor processor;
  		if( inputType == GrayU8.class )
  			processor = new ThresholdBlockMinMax_U8(minimumSpread,scale,down);
  		else
  			processor = new ThresholdBlockMinMax_F32((float)minimumSpread,(float)scale,down);
  
  		if( BoofConcurrency.USE_CONCURRENT ) {
  			return new ThresholdBlock_MT(processor, regionWidth, thresholdFromLocalBlocks, inputType);
  		} else {
  			return new ThresholdBlock(processor, regionWidth, thresholdFromLocalBlocks, inputType);
  		}
  	}
docs: Applies a very fast non-overlapping block thresholding algorithm which uses min/max statistics.
  
  @see ThresholdBlockMinMax
  
  @param regionWidth Approximate size of block region
  @param scale Scale factor adjust for threshold.  1.0 means no change.
  @param down Should it threshold up or down.
  @param minimumSpread If the difference between min max is less than or equal to this
  value then it is considered textureless.  Set to &le; -1 to disable.
  @param inputType Type of input image
  @return Filter to binary