docs: public static <Input extends ImageBase<Input>, Output extends ImageBase<Output>>
  	ConvolveInterface<Input,Output>
  	convolve(Kernel1D kernel, ImageType<Input> inputType, ImageType<Output> outputType , BorderType border , boolean isHorizontal )
  	{
  		if( inputType.getFamily() != ImageType.Family.GRAY )
  			throw new IllegalArgumentException("Currently only gray scale image supported");
  
  		Class _inputType = inputType.getImageClass();
  		Class _outputType = outputType == null ? null : outputType.getImageClass();
  
  		_outputType = BoofTesting.convertToGenericType(_outputType);
  
  		Class<?> borderClassType = FactoryImageBorder.lookupBorderClassType(_inputType);
  		String direction = isHorizontal ? "horizontal" : "vertical";
  		Method m;
  		try {
  			switch( border ) {
  				case SKIP:
  					m = ConvolveImageNoBorder.class.getMethod(direction, kernel.getClass(), _inputType, _outputType);
  					break;
  
  				case EXTENDED:
  					m = BoofTesting.findMethod(ConvolveImage.class,direction,kernel.getClass(),_inputType,_outputType,borderClassType);
  					break;
  
  				case REFLECT:
  					m = BoofTesting.findMethod(ConvolveImage.class,direction,kernel.getClass(),_inputType,_outputType,borderClassType);
  					break;
  
  				case WRAP:
  					m = BoofTesting.findMethod(ConvolveImage.class,direction,kernel.getClass(),_inputType,_outputType,borderClassType);
  					break;
  
  				case NORMALIZED:
  					m = ConvolveImageNormalized.class.getMethod(direction,kernel.getClass(),_inputType,_outputType);
  					break;
  
  				default:
  					throw new IllegalArgumentException("Unknown border type "+border);
  
  			}
  		} catch (NoSuchMethodException e) {
  			throw new IllegalArgumentException("The specified convolution cannot be found");
  		}
  
  		return new GenericConvolve<>(m, kernel, border, inputType, outputType);
  	}