docs: public static NonMaxSuppression nonmaxCandidate( @Nullable ConfigExtract config ) {
  
  		if( config == null )
  			config = new ConfigExtract();
  		config.checkValidity();
  
  		if( BOverrideFactoryFeatureExtractor.nonmaxCandidate != null ) {
  			return BOverrideFactoryFeatureExtractor.nonmaxCandidate.process(config);
  		}
  
  		NonMaxCandidate.Search search;
  
  		// no need to check the detection max/min since these algorithms can handle both
  		if (config.useStrictRule) {
  			search = new NonMaxCandidate.Strict();
  		} else {
  			search = new NonMaxCandidate.Relaxed();
  		}
  
  		// See if the user wants to use threaded code or not
  		NonMaxCandidate extractor = BoofConcurrency.USE_CONCURRENT?
  				new NonMaxCandidate_MT(search):new NonMaxCandidate(search);
  
  		WrapperNonMaxCandidate ret = new WrapperNonMaxCandidate(extractor,false,true);
  
  		ret.setSearchRadius(config.radius);
  		ret.setIgnoreBorder(config.ignoreBorder);
  		ret.setThresholdMaximum(config.threshold);
  
  		return ret;
  	}