ImageJ Ops is an extensible Java framework for algorithms, particularly image processing algorithms. Ops seeks to be a unifying library for scientific image processing. See the Motivation page for details.
Each op has a list of typed input and output parameters on which it operates. You can think of an op as a (potentially multi-variable) function:
c = math.add(a, b)
(phase, amplitude) = fft(image)
In many cases you can also pass a pre-allocated output which will be populated:
math.add(c, a, b)
Some ops take other ops as inputs, which allows for things like "execute this op on every pixel of that image":
add_op = op("math.add", 5)
output_image = map(input_image, add_op)
For more details, see these tutorials:
Try this Jython script in ImageJ's Script Editor!
# @ImageJ ij
# create a new blank image
from jarray import array
dims = array([150, 100], 'l')
blank = ij.op().create().img(dims)
# fill in the image with a sinusoid using a formula
formula = "10 * (Math.cos(0.3*p[0]) + Math.sin(0.3*p[1]))"
sinusoid = ij.op().image().equation(blank, formula)
# add a constant value to an image
ij.op().math().add(sinusoid, 13.0)
# generate a gradient image using a formula
gradient = ij.op().image().equation(ij.op().create().img(dims), "p[0]+p[1]")
# add the two images
composite = ij.op().create().img(dims)
ij.op().math().add(composite, sinusoid, gradient)
# display the images
ij.ui().show("sinusoid", sinusoid)
ij.ui().show("gradient", gradient)
ij.ui().show("composite", composite)
The output:
We welcome pull requests!
- Use an existing op as a starting point
- Use ImageJ code style
- Use small, well-written commits
- Use a topic branch