docs: public static <T extends ImageBase<T>, O extends ImageBase>
  	void add(T inputA, T inputB, O output) {
  		if( inputA instanceof ImageGray) {
  			if (GrayU8.class == inputA.getClass()) {
  				PixelMath.add((GrayU8) inputA, (GrayU8) inputB, (GrayU16) output);
  			} else if (GrayS8.class == inputA.getClass()) {
  				PixelMath.add((GrayS8) inputA, (GrayS8) inputB, (GrayS16) output);
  			} else if (GrayU16.class == inputA.getClass()) {
  				PixelMath.add((GrayU16) inputA, (GrayU16) inputB, (GrayS32) output);
  			} else if (GrayS16.class == inputA.getClass()) {
  				PixelMath.add((GrayS16) inputA, (GrayS16) inputB, (GrayS32) output);
  			} else if (GrayS32.class == inputA.getClass()) {
  				PixelMath.add((GrayS32) inputA, (GrayS32) inputB, (GrayS32) output);
  			} else if (GrayS64.class == inputA.getClass()) {
  				PixelMath.add((GrayS64) inputA, (GrayS64) inputB, (GrayS64) output);
  			} else if (GrayF32.class == inputA.getClass()) {
  				PixelMath.add((GrayF32) inputA, (GrayF32) inputB, (GrayF32) output);
  			} else if (GrayF64.class == inputA.getClass()) {
  				PixelMath.add((GrayF64) inputA, (GrayF64) inputB, (GrayF64) output);
  			} else {
  				throw new IllegalArgumentException("Unknown image Type: " + inputA.getClass().getSimpleName());
  			}
  		} else if (inputA instanceof Planar) {
  			Planar inA = (Planar)inputA;
  			Planar inB = (Planar)inputB;
  			Planar out = (Planar)output;
  
  			for (int i = 0; i < inA.getNumBands(); i++) {
  				add(inA.getBand(i),inB.getBand(i),out.getBand(i));
  			}
  		}
  	}