code: public static <T extends ImageMultiBand<T>, II extends ImageGray<II>>
  	DetectDescribePoint<T,BrightFeature> surfColorStable( @Nullable ConfigFastHessian configDetector,
  														  @Nullable ConfigSurfDescribe.Stability configDescribe,
  														  @Nullable ConfigSlidingIntegral configOrientation,
  														  ImageType<T> imageType ) {
  
  		Class bandType = imageType.getImageClass();
  		Class<II> integralType = GIntegralImageOps.getIntegralType(bandType);
  
  		FastHessianFeatureDetector<II> detector = FactoryInterestPointAlgs.fastHessian(configDetector);
  		DescribePointSurfMod<II> describe = FactoryDescribePointAlgs.surfStability(configDescribe, integralType);
  		OrientationIntegral<II> orientation = FactoryOrientationAlgs.sliding_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 feature.  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 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 color input image.
  @return SURF detector and descriptor