Edit page History

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