docs: public static <II extends ImageGray<II>> void harder(GrayF32 image ) {
  		// SURF works off of integral images
  		Class<II> integralType = GIntegralImageOps.getIntegralType(GrayF32.class);
  		
  		// define the feature detection algorithm
  		NonMaxSuppression extractor =
  				FactoryFeatureExtractor.nonmax(new ConfigExtract(2, 0, 5, true));
  		FastHessianFeatureDetector<II> detector =
  				new FastHessianFeatureDetector<>(extractor, 200, 2, 9, 4, 4, 6);
  
  		// estimate orientation
  		OrientationIntegral<II> orientation = 
  				FactoryOrientationAlgs.sliding_ii(null, integralType);
  
  		DescribePointSurf<II> descriptor = FactoryDescribePointAlgs.<II>surfStability(null,integralType);
  		
  		// compute the integral image of 'image'
  		II integral = GeneralizedImageOps.createSingleBand(integralType,image.width,image.height);
  		GIntegralImageOps.transform(image, integral);
  
  		// detect fast hessian features
  		detector.detect(integral);
  		// tell algorithms which image to process
  		orientation.setImage(integral);
  		descriptor.setImage(integral);
  
  		List<ScalePoint> points = detector.getFoundPoints();
  
  		List<BrightFeature> descriptions = new ArrayList<>();
  
  		for( ScalePoint p : points ) {
  			// estimate orientation
  			orientation.setObjectRadius( p.scale*BoofDefaults.SURF_SCALE_TO_RADIUS);
  			double angle = orientation.compute(p.x,p.y);
  			
  			// extract the SURF description for this region
  			BrightFeature desc = descriptor.createDescription();
  			descriptor.describe(p.x,p.y,angle,p.scale,desc);
  
  			// save everything for processing later on
  			descriptions.add(desc);
  		}
  		
  		System.out.println("Found Features: "+points.size());
  		System.out.println("First descriptor's first value: "+descriptions.get(0).value[0]);
  	}