ij.plugin.filter
Class RankFilters

java.lang.Object
  extended by ij.plugin.filter.RankFilters
All Implemented Interfaces:
DialogListener, ExtendedPlugInFilter, PlugInFilter

public class RankFilters
extends java.lang.Object
implements ExtendedPlugInFilter, DialogListener

This plugin implements the Mean, Minimum, Maximum, Variance, Median, Remove Outliers and Despeckle commands.


Field Summary
static int DESPECKLE
           
protected  int kNPoints
           
protected  int kRadius
           
protected  int[] lineRadius
           
static int MAX
           
static int MEAN
           
static int MEDIAN
           
static int MIN
           
static int OUTLIERS
           
static int VARIANCE
           
 
Fields inherited from interface ij.plugin.filter.ExtendedPlugInFilter
KEEP_PREVIEW
 
Fields inherited from interface ij.plugin.filter.PlugInFilter
CONVERT_TO_FLOAT, DOES_16, DOES_32, DOES_8C, DOES_8G, DOES_ALL, DOES_RGB, DOES_STACKS, DONE, FINAL_PROCESSING, KEEP_THRESHOLD, NO_CHANGES, NO_IMAGE_REQUIRED, NO_UNDO, PARALLELIZE_STACKS, ROI_REQUIRED, SNAPSHOT, STACK_REQUIRED, SUPPORTS_MASKING
 
Constructor Summary
RankFilters()
           
 
Method Summary
 boolean dialogItemChanged(GenericDialog gd, java.awt.AWTEvent e)
          This method is invoked by a Generic Dialog if any of the inputs have changed (CANCEL does not trigger it; OK and running the dialog from a macro only trigger the first DialogListener added to a GenericDialog).
 void doFiltering(FloatProcessor ip, int kRadius, int[] lineRadius, int filterType, int whichOutliers, float threshold)
          Filter a FloatProcessor according to filterType
static float findNthLowestNumber(float[] buf, int bufLength, int n)
          Find the n-th lowest number in part of an array
 void makeKernel(double radius)
          Create a circular kernel of a given radius.
 void rank(ImageProcessor ip, double radius, int rankType)
          Filters an image
 void run(ImageProcessor ip)
          Filters use this method to process the image.
 void setNPasses(int nPasses)
          This method is called by ImageJ to set the number of calls to run(ip) corresponding to 100% of the progress bar
 int setup(java.lang.String arg, ImagePlus imp)
          Setup of the PlugInFilter.
 int showDialog(ImagePlus imp, java.lang.String command, PlugInFilterRunner pfr)
          This method is called after setup(arg, imp) unless the DONE flag has been set.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MEAN

public static final int MEAN
See Also:
Constant Field Values

MIN

public static final int MIN
See Also:
Constant Field Values

MAX

public static final int MAX
See Also:
Constant Field Values

VARIANCE

public static final int VARIANCE
See Also:
Constant Field Values

MEDIAN

public static final int MEDIAN
See Also:
Constant Field Values

OUTLIERS

public static final int OUTLIERS
See Also:
Constant Field Values

DESPECKLE

public static final int DESPECKLE
See Also:
Constant Field Values

kRadius

protected int kRadius

kNPoints

protected int kNPoints

lineRadius

protected int[] lineRadius
Constructor Detail

RankFilters

public RankFilters()
Method Detail

setup

public int setup(java.lang.String arg,
                 ImagePlus imp)
Setup of the PlugInFilter. Returns the flags specifying the capabilities and needs of the filter.

Specified by:
setup in interface PlugInFilter
Parameters:
arg - Defines type of filter operation
imp - The ImagePlus to be processed
Returns:
Flags specifying further action of the PlugInFilterRunner

showDialog

public int showDialog(ImagePlus imp,
                      java.lang.String command,
                      PlugInFilterRunner pfr)
Description copied from interface: ExtendedPlugInFilter
This method is called after setup(arg, imp) unless the DONE flag has been set.

Specified by:
showDialog in interface ExtendedPlugInFilter
Parameters:
imp - The active image already passed in the setup(arg, imp) call. It will be null, however, if the NO_IMAGE_REQUIRED flag has been set.
command - The command that has led to the invocation of the plugin-filter. Useful as a title for the dialog.
pfr - The PlugInFilterRunner calling this plugin-filter. It can be passed to a GenericDialog by addPreviewCheckbox to enable preview by calling the run(ip) method of this plugin-filter. pfr can be also used later for calling back the PlugInFilterRunner, e.g., to obtain the slice number currently processed by run(ip).
Returns:
The method should return a combination (bitwise OR) of the flags specified in interfaces PlugInFilter and ExtendedPlugInFilter.

dialogItemChanged

public boolean dialogItemChanged(GenericDialog gd,
                                 java.awt.AWTEvent e)
Description copied from interface: DialogListener
This method is invoked by a Generic Dialog if any of the inputs have changed (CANCEL does not trigger it; OK and running the dialog from a macro only trigger the first DialogListener added to a GenericDialog).

Specified by:
dialogItemChanged in interface DialogListener
Parameters:
gd - A reference to the GenericDialog.
e - The event that has been generated by the user action in the dialog. Note that e is null if the dialogItemChanged method is called after the user has pressed the OK button or if the GenericDialog has read its parameters from a macro.
Returns:
Should be true if the dialog input is valid. False disables the OK button and preview (if any).

run

public void run(ImageProcessor ip)
Description copied from interface: PlugInFilter
Filters use this method to process the image. If the SUPPORTS_STACKS flag was set, it is called for each slice in a stack. With CONVERT_TO_FLOAT, the filter is called with the image data converted to a FloatProcessor (3 times per image for RGB images). ImageJ will lock the image before calling this method and unlock it when the filter is finished. For PlugInFilters specifying the NO_IMAGE_REQUIRED flag and not the DONE flag, run(ip) is called once with the argument null.

Specified by:
run in interface PlugInFilter

doFiltering

public void doFiltering(FloatProcessor ip,
                        int kRadius,
                        int[] lineRadius,
                        int filterType,
                        int whichOutliers,
                        float threshold)
Filter a FloatProcessor according to filterType

Parameters:
ip - The image subject to filtering
kRadius - The kernel radius. The kernel has a side length of 2*kRadius+1
lineRadius - The radius of the lines in the kernel. Line length of line i is 2*lineRadius[i]+1. Note that the array lineRadius will be modified, thus call this method with a clone of the original lineRadius array if the array should be used again.
filterType - as defined above; DESPECKLE is not a valid type here.
threshold - Threshold for 'outliers' filter

rank

public void rank(ImageProcessor ip,
                 double radius,
                 int rankType)
Filters an image

Parameters:
ip - The ImageProcessor that should be filtered (all 4 types supported)
radius - Determines the kernel size, see Process>Filters>Show Circular Masks. Must not be negative. No checking is done for large values that would lead to excessive computing times.
rankType - May be MEAN, MIN, MAX, VARIANCE, or MEDIAN.

findNthLowestNumber

public static float findNthLowestNumber(float[] buf,
                                        int bufLength,
                                        int n)
Find the n-th lowest number in part of an array

Parameters:
buf - The input array. Only values 0 ... bufLength are read. buf will be modified.
bufLength - Number of values in buf that should be read
n - which value should be found; n=0 for the lowest, n=bufLength-1 for the highest
Returns:
the value

makeKernel

public void makeKernel(double radius)
Create a circular kernel of a given radius. Radius = 0.5 includes the 4 neighbors of the pixel in the center, radius = 1 corresponds to a 3x3 kernel size. The output is written to class variables kNPoints (number of points inside the kernel) and lineRadius, which is an array giving the radius of each line. Line length is 2*lineRadius+1.


setNPasses

public void setNPasses(int nPasses)
This method is called by ImageJ to set the number of calls to run(ip) corresponding to 100% of the progress bar

Specified by:
setNPasses in interface ExtendedPlugInFilter