ImageJ2 Python Scripts

Revision as of 13:58, 14 November 2016 by Tiago (talk | contribs) (Correct grammar, Add resources, categories and the Scripting template)



This page is a primer of ImageJ2 only Python scripts. It means that the examples included here avoid IJ1 as much as possible, unless it's really necessary.


Z Projection

Do a Z projection.

# @ImageJ ij
# @Dataset data

# TODO : Find a way to use script parameters to let user choose between
# "max", "mean", "min", "median", etc.

from net.imagej.axis import Axes
from net.imagej.ops import Ops

def main():

	# Select which dimension to project
	z_dim = data.dimensionIndex(Axes.Z)

	if z_dim == -1:
		print("Z dimension not found.")

	if data.dimension(z_dim) == 1:
		print("Z dimension has only one frame.")

	# Write the output dimensions
	projected_dimensions = [data.dimension(d) for d in range(0, data.numDimensions()) if d != z_dim]

	# Create the output image
	z_projected = ij.op().create().img(projected_dimensions)

	# Create the op and run it
	max_op = ij.op().op(Ops.Stats.Max, data)
	ij.op().transform().project(z_projected, data, max_op, z_dim)

	# Create a dataset
	z_projected = ij.dataset().create(z_projected)

	# Set the correct axes (is that needed ?)
	axes = [data.axis(d) for d in range(0, data.numDimensions()) if d != z_dim]

	ij.ui().show("z_projected", z_projected)


Apply Threshold

# @ImageJ ij
# @Dataset data

method_threshold = "otsu"

# Get the histogram
histo = ij.op().run("image.histogram", data.getImgPlus())

# Get the threshold
threshold = ij.op().run("threshold.%s" % method_threshold, histo)

# Apply the threshold
thresholded = ij.op().run("threshold.apply", data.getImgPlus(), threshold)

# Create output
thresholded = ij.dataset().create(thresholded)

ij.ui().show("thresholded", thresholded))

A more direct way if you don't need to modify the threshold is:

# @ImageJ ij
# @Dataset data

method_threshold = "otsu"

# Apply the threshold
thresholded = ij.op().run("threshold.%s" % method_threshold, data.getImgPlus())

# Create output
thresholded = ij.dataset().create(thresholded)

ij.ui().show("thresholded", thresholded)