Upload
amice-fisher
View
218
Download
1
Tags:
Embed Size (px)
Citation preview
ImageJ
EE4H, M.Sc 0407191Computer VisionDr. Mike Spann
[email protected]://www.eee.bham.ac.uk/spannm
Contents
About ImageJImage representation in ImageJDisplaying images in ImageJImageJ utility classRegions of interestWriting plug-ins
About ImageJAll of this material is taken from the
ImageJ tutorial accessed from my web-site
http://mtd.fh-hagenberg.at/depot/imaging/imagej/
Also check out the ImageJ home pagehttp://rsb.info.nih.gov/ij/
ImageJ is a free image processing system allowing easy development of Java based image processing algorithms in the form of plug-ins
About ImageJIt comes with a user-friendly GUI and can
run either as an application or an applethttp://rsb.info.nih.gov/ij/applet/
About ImageJIt can handle 8,16,24 and 32 bit imagesIt can handle most standard image formats
TIFFGIFJPEGBMPDICOM
It can handle stacks of imagesAlso there are plug-ins allowing it to handle
movie filesIt can also handle regions of interest
(ROI’s)
About ImageJThe key point about ImageJ is that it is simple
to add your own algorithms (written as plug-ins) callable from the front-end GUIFile I/O taken care of by ImageJPixel access easy from image handles defined
within ImageJ
Image representation in ImageJImageJ has 5 built-in image classes
8 bit grayscale (byte)8 bit colour (byte)16 bit grayscale (short)RGB colour (int)32 bit image (float)
It also supports image stacks consisting of images (slices) of the same size
Image representation in ImageJImageJ uses 2 classes to represent and
manipulate imagesImagePlus
An image is represented by an ImagePlus objectImageProcessor
This holds the pixel data and contains methods to access the pixel data
Image representation in ImageJPixel access methods in ImageProcessor
includeObject getPixels() – returns a reference to the
pixel array (need to cast to appropriate type)int getHeight() – returns height of pixel arrayint getWidth() – returns width of pixel array
Image representation in ImageJA subclass of ImageProcessor is passed to the
run() method of the plug-in filter (see later) ByteProcessor - 8 bit grayscale images ShortProcessor – 16 bit grayscale imagesColorProcessor – RGB imagesFloatProcessor – 32 bit floating point images
Image representation in ImageJPixel representation in ImageJ uses the byte
datatype for grayscale and colour images and short for 16-bit grayscalebyte/short are signed data types
byte ranges from –128 to 127 short ranges from –32768 to 32767
Obviously grayscale values are usually positive values
Image representation in ImageJTo cast a byte to an integer, we need to
eliminate the sign bit
Can cast back the other way easily enough
byte[] pixels=(byte[]) ip.getPixels();
int grey=0xxff & pixels[j];
pixels[j]=(byte) grey;
Image representation in ImageJThe ColorProcessor return the pixels as int[]
and the RGB values are packed into the one int variable
int[] pixels=(int[]) ip.getPixels();int red=(0xxff0000 & pixels[j]) >> 16;int green=(0xx00ff00 & pixels[j]) >> 8;int blue=(0xx0000ff & pixels[j]);
0 bit31
Image representation in ImageJCan reconstitute an RGB array by shifting the
other way :
pixels[j]=((red & 0xff)<<16)+((green & 0xff)<<8)+(blue & 0xff);
Displaying images in ImageJA class ImageWindow is used to display
ImagePlus objects We don’t normally need to access methods of
ImageWindowThese are automatically called from ImagePlus
methods show(), draw() and updateAndDraw()
ImageJ utility classImageJ contains a class called IJ which
contains a number of useful static methodsError messages
static void error(String message) – displays an error message in a dialog box
static boolean showMessageWithCancel(String title, String message) – allows the user to cancel the plug in or continue
ImageJ utility classDisplaying text
static void write(String s) - Outputs text in a window – useful for displaying textual or numerical results of algorithms
Displaying text in a status barstatic void showStatus(String s)
ImageJ utility classUser input
static double getNumber(String prompt, double default) – Allows the user to input a number in a dialog box
static String getString(String prompt, String default) – Allows the user to input a string in a dialog box
The GenericDialog class is a more sophisticated way of inputting more than a single number or string
Regions of interest (ROI’s)A plug in filter does not always have to
work on the whole imageImageJ supports ROI’s which can are
usually rectangular but can be other shapes as well.
We set/get the ROI using the following method of the ImageProcessor classvoid setROI(int x, int y, int w int h)Rectangle getROI()
Writing plug-insTo write a plug in requires developing a class
which implements either the PlugIn or PlugInFilter interfacesThe second is more usual as this is used when
the filter requires an input image
import ij.*;import ij.plugin.filter.PlugInFilter;import ij.process;
class myPlugin implements PlugInFilter
Writing plug-insMethods setup() and run() must then be
providedMethod setup() sets up the plugin filter for use
String arg allows input arguments to be passed to the plugin
Argument imp handled automatically by ImageJ It’s the currently active image
int setup(String arg, ImagePlus imp)
Writing plug-insMethod setup() returns a flag word
representing the capabilities of the plug-in filter (for example the types of images it can handle). For example :static int DOES_8Gstatic int DOES_RGBstatic int DOES_ALLstatic int NO_CHANGES (plug in doesn’t
change the image data)static int ROI_REQUIREDetc
Writing plug-insThe run() method is called when the plugin is
run from the ImageJ menuIt contains the code to process individual pixels
If no input image is required
If an input image is required
void run(String arg)
void run(ImageProcessor ip)
Writing plug-insOnce the Java program is written and
compiled, the .class file is stored in the plug-in directory which is a sub-directory of the ImageJ home directoryThe class name should contain an underscore
symbol (eg MyAlgorithm_ )It then appears under the plug-in sub-menu of
the ImageJ gui