This is an archive of the old MediaWiki-based ImageJ wiki. The current website can be found at imagej.net.

Same Slice in Multiple Images

Purpose

An example JRuby script, which needs to be customized to be useful to you - the source code is here.

Code

# This is an example that find all the image.bin.gz files from channel
# 01 under a directory and makes an image stack of all the slices
# numbered 23.  If this might be useful to you, copy the file and
# customize the bits preceded with "CHANGEME":

include_class 'util.BatchOpener'

# CHANGEME:
directory = '/Volumes/LaCie/corpus/central-complex/biorad/reformatted'

# CHANGEME:
match  =  /01_warp/

# CHANGEME:
def filename_to_slicename(f)
  # Take the name of the parent directory:
  f.gsub( /\/([^\/]+)\/[^\/]+$/, '\1' )
end

unless FileTest.directory? directory
  error = "Couldn't find directory '#{directory}" +
    "You probably need to customize the script."
  ij.IJ.error error
  exit(-1)  
end

images = `find #{directory} -name 'image.bin.gz' -print0`.split("\0")
images = images.grep

if images.empty?
  ij.IJ.error "No images found.  You probably need to customize the script."
  exit(-1)
end

slice_to_get = 23

width  = -1
height = -1
depth  = -1

stack = nil

images.each do |f|

  i = BatchOpener.openFirstChannel f
  
  if width < 0
    width  = i.getWidth
    height = i.getHeight
    depth  = i.getStackSize
    stack = ij.ImageStack.new width, height
  else
    unless
        width = i.getWidth && 
        height == i.getHeight &&
        depth == i.getStackSize
      ij.IJ.error "The image #{i.getTitle} didn't have matching dimensions"
      exit(-1)
    end
  end

  slice_name = filename_to_slicename f
  processor = i.getStack.getProcessor( slice_to_get )
  stack.addSlice slice_name, processor
            
	i.close

end

result = ImagePlus.new "All slices numbered #{slice_to_get}", stack
result.show



See also

JRuby Scripting