code: public static <T extends ImageGray<T>>
  	InputToBinary<T> blockOtsu(ConfigLength regionWidth, double scale, boolean down, boolean thresholdFromLocalBlocks,
  							   boolean otsu2, double tuning,Class<T> inputType) {
  		if( BOverrideFactoryThresholdBinary.blockOtsu != null )
  			return BOverrideFactoryThresholdBinary.blockOtsu.handle(otsu2,regionWidth, tuning, scale, down,
  					thresholdFromLocalBlocks, inputType);
  
  		BlockProcessor processor = new ThresholdBlockOtsu(otsu2,tuning,scale,down);
  		InputToBinary<GrayU8> otsu;
  
  		if( BoofConcurrency.USE_CONCURRENT ) {
  			otsu = new ThresholdBlock_MT<>(processor, regionWidth, thresholdFromLocalBlocks, GrayU8.class);
  		} else {
  			otsu = new ThresholdBlock<>(processor, regionWidth, thresholdFromLocalBlocks, GrayU8.class);
  		}
  
  		return new InputToBinarySwitch<>(otsu,inputType);
  	}
docs: Applies a non-overlapping block Otsu threshold
  
  @see ThresholdBlockOtsu
  
  @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 inputType Type of input image
  @return Filter to binary