docs: 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");
  		}
  	}