@@ -0,0 +1,1479 @@
+package net.imagej.ops.convolve;%0A%0Aimport org.scijava.Priority;%0Aimport org.scijava.plugin.Plugin;%0A%0Aimport net.imagej.ops.Contingent;%0Aimport net.imagej.ops.Op;%0Aimport net.imagej.ops.Ops;%0Aimport net.imagej.ops.fft.filter.AbstractFFTFilterImg;%0Aimport net.imglib2.Interval;%0Aimport net.imglib2.RandomAccessibleInterval;%0Aimport net.imglib2.img.Img;%0Aimport net.imglib2.type.numeric.ComplexType;%0Aimport net.imglib2.type.numeric.RealType;%0Aimport net.imglib2.util.Intervals;%0A%0A/**%0A * Convolve op for (@link Img) %0A * %0A * @author bnorthan%0A *%0A * @param %3CI%3E%0A * @param %3CO%3E%0A * @param %3CK%3E%0A * @param %3CC%3E%0A */%0A@Plugin(type = Op.class, name = Ops.Convolve.NAME, priority = Priority.VERY_HIGH_PRIORITY)%0Apublic class ConvolveFFTImg%3CI extends RealType%3CI%3E, O extends RealType%3CO%3E, K extends RealType%3CK%3E, C extends ComplexType%3CC%3E%3E%0A%09%09extends AbstractFFTFilterImg%3CI, O, K, C%3E implements Contingent %7B%0A%0A%09/**%0A%09 * run the filter (ConvolveFFTRAI) on the rais%0A%09 */%0A%09@Override%0A%09public void runFilter(RandomAccessibleInterval%3CI%3E raiExtendedInput,%0A%09%09%09RandomAccessibleInterval%3CK%3E raiExtendedKernel, Img%3CC%3E fftImg,%0A%09%09%09Img%3CC%3E fftKernel, Img%3CO%3E output, Interval imgConvolutionInterval) %7B%0A%0A%09%09ops.run(ConvolveFFTRAI.class, raiExtendedInput, raiExtendedKernel,%0A%09%09%09%09fftImg, fftKernel, output);%0A%0A%09%7D%0A%09%0A%09@Override%0A%09public boolean conforms() %7B%0A%09%09// TODO: only conforms if the kernel is sufficiently large (else the%0A%09%09// naive approach should be used) -%3E what is a good heuristic??%0A%09%09return Intervals.numElements(kernel) %3E 9;%0A%09%7D%0A%0A%7D%0A

Add ConvolveFFTImg