docs: public static <I extends ImageGray<I>, D extends ImageGray<D>>
  	PointTracker<I> combined_ST_SURF_KLT(ConfigGeneralDetector configExtract,
  										 PkltConfig kltConfig,
  										 int reactivateThreshold,
  										 ConfigSurfDescribe.Stability configDescribe,
  										 ConfigSlidingIntegral configOrientation,
  										 Class<I> imageType,
  										 @Nullable Class<D> derivType) {
  
  		if( derivType == null )
  			derivType = GImageDerivativeOps.getDerivativeType(imageType);
  
  		GeneralFeatureDetector<I, D> corner = createShiTomasi(configExtract, derivType);
  		InterestPointDetector<I> detector = FactoryInterestPoint.wrapPoint(corner, 1, imageType, derivType);
  
  		DescribeRegionPoint<I,BrightFeature> regionDesc
  				= FactoryDescribeRegionPoint.surfStable(configDescribe, imageType);
  
  		ScoreAssociation<TupleDesc_F64> score = FactoryAssociation.scoreEuclidean(TupleDesc_F64.class, true);
  		AssociateSurfBasic assoc = new AssociateSurfBasic(FactoryAssociation.greedy(score, 100000, true));
  
  		AssociateDescription<BrightFeature> generalAssoc = new WrapAssociateSurfBasic(assoc);
  
  		OrientationImage<I> orientation = null;
  
  		if( configOrientation != null ) {
  			Class integralType = GIntegralImageOps.getIntegralType(imageType);
  			OrientationIntegral orientationII = FactoryOrientationAlgs.sliding_ii(configOrientation, integralType);
  			orientation = FactoryOrientation.convertImage(orientationII,imageType);
  		}
  
  		return combined(detector,orientation,regionDesc,generalAssoc, kltConfig,reactivateThreshold,
  				imageType);
  	}