code: public static <T extends ImageGray<T>, II extends ImageGray<II>>
  	DetectDescribePoint<T,BrightFeature> surfFast( @Nullable ConfigFastHessian configDetector ,
  												   @Nullable ConfigSurfDescribe.Speed configDesc,
  												   @Nullable ConfigAverageIntegral configOrientation,
  												   Class<T> imageType) {
  
  		Class<II> integralType = GIntegralImageOps.getIntegralType(imageType);
  
  		FastHessianFeatureDetector<II> detector = FactoryInterestPointAlgs.fastHessian(configDetector);
  		DescribePointSurf<II> describe = FactoryDescribePointAlgs.surfSpeed(configDesc, integralType);
  		OrientationIntegral<II> orientation = FactoryOrientationAlgs.average_ii(configOrientation, integralType);
  
  		if(BoofConcurrency.USE_CONCURRENT) {
  			return new WrapDetectDescribeSurf_MT<>(detector, orientation, describe);
  		} else {
  			return new WrapDetectDescribeSurf<>(detector, orientation, describe);
  		}
  	}
docs: <p>
  Creates a SURF descriptor.  SURF descriptors are invariant to illumination, orientation, and scale.
  BoofCV provides two variants. Creates a variant which is designed for speed at the cost of some stability.
  Different descriptors are created for color and gray-scale images.
  </p>
  
  <p>
  [1] Add tech report when its finished.  See SURF performance web page for now.
  </p>
  
  @see FastHessianFeatureDetector
  @see DescribePointSurf
  @see DescribePointSurfPlanar
  
  @param configDetector		Configuration for SURF detector
  @param configDesc			Configuration for SURF descriptor
  @param configOrientation		Configuration for orientation
  @return SURF detector and descriptor