code: public static <T extends ImageGray<T>, II extends ImageGray<II>>
  	DetectDescribePoint<T,BrightFeature> surfStable( @Nullable ConfigFastHessian configDetector,
  													 @Nullable ConfigSurfDescribe.Stability configDescribe,
  													 @Nullable ConfigSlidingIntegral configOrientation,
  													 Class<T> imageType ) {
  
  		Class<II> integralType = GIntegralImageOps.getIntegralType(imageType);
  
  		FastHessianFeatureDetector<II> detector = FactoryInterestPointAlgs.fastHessian(configDetector);
  		DescribePointSurfMod<II> describe = FactoryDescribePointAlgs.surfStability(configDescribe, integralType);
  		OrientationIntegral<II> orientation = FactoryOrientationAlgs.sliding_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 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 DescribePointSurfPlanar
  @see FastHessianFeatureDetector
  @see boofcv.alg.feature.describe.DescribePointSurfMod
  
  @param configDetector Configuration for SURF detector.  Null for default.
  @param configDescribe Configuration for SURF descriptor.  Null for default.
  @param configOrientation Configuration for region orientation.  Null for default.
  @param imageType Specify type of input image.
  @return SURF detector and descriptor