code: public static <T extends ImageGray<T>, II extends ImageGray<II>>
  	DetectDescribePoint<T,BrightFeature> surfColorFast( @Nullable ConfigFastHessian configDetector ,
  														@Nullable ConfigSurfDescribe.Speed configDesc,
  														@Nullable ConfigAverageIntegral configOrientation,
  														ImageType<T> imageType) {
  
  		Class bandType = imageType.getImageClass();
  		Class<II> integralType = GIntegralImageOps.getIntegralType(bandType);
  
  		FastHessianFeatureDetector<II> detector = FactoryInterestPointAlgs.fastHessian(configDetector);
  		DescribePointSurf<II> describe = FactoryDescribePointAlgs.surfSpeed(configDesc, integralType);
  		OrientationIntegral<II> orientation = FactoryOrientationAlgs.average_ii(configOrientation, integralType);
  
  		if( imageType.getFamily() == ImageType.Family.PLANAR) {
  			DescribePointSurfPlanar<II> describeMulti =
  					new DescribePointSurfPlanar<>(describe, imageType.getNumBands());
  
  			DetectDescribeSurfPlanar<II> detectDesc = createDescribeSurfPlanar(detector, orientation, describeMulti);
  
  			return new SurfPlanar_to_DetectDescribePoint( detectDesc,bandType,integralType );
  		} else {
  			throw new IllegalArgumentException("Image type not supported");
  		}
  	}
docs: <p>
  Color version of SURF stable.  Features are detected in a gray scale image, but the descriptors are
  computed using a color image.  Each band in the page adds to the descriptor length.  See
  {@link DetectDescribeSurfPlanar} for details.
  </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