docs: public static <T extends ImageGray<T>, D extends ImageGray<D>>
  	CannyEdge<T,D> canny( int blurRadius , boolean saveTrace , boolean dynamicThreshold, Class<T> imageType , Class<D> derivType )
  	{
  		BlurFilter<T> blur = FactoryBlurFilter.gaussian(ImageType.single(imageType), -1, blurRadius);
  		ImageGradient<T,D> gradient = FactoryDerivative.three(imageType, derivType);
  
  		if( dynamicThreshold )
  			return new CannyEdgeDynamic<>(blur, gradient, saveTrace);
  		else
  			return new CannyEdge<>(blur, gradient, saveTrace);
  	}