code: public static <I extends ImageGray<I>, D extends ImageGray<D>>
  	PointTrackerTwoPass<I> klt(PkltConfig config, ConfigGeneralDetector configExtract,
  							   Class<I> imageType, Class<D> derivType) {
  
  		GeneralFeatureDetector<I, D> detector = createShiTomasi(configExtract, derivType);
  
  		InterpolateRectangle<I> interpInput = FactoryInterpolation.<I>bilinearRectangle(imageType);
  		InterpolateRectangle<D> interpDeriv = FactoryInterpolation.<D>bilinearRectangle(derivType);
  
  		ImageGradient<I,D> gradient = FactoryDerivative.sobel(imageType, derivType);
  
  		PyramidDiscrete<I> pyramid = FactoryPyramid.discreteGaussian(
  				config.pyramidScaling,-1,2,true, ImageType.single(imageType));
  
  		return new PointTrackerTwoPassKltPyramid<>(config.config, config.templateRadius, pyramid, detector,
  				gradient, interpInput, interpDeriv);
  	}
docs: Pyramid KLT feature tracker.
  
  @param config Config for the tracker. Try PkltConfig.createDefault().
  @param configExtract Configuration for extracting features
  @return KLT based tracker.