| Filters |

    package ij.plugin.filter;
    import ij.*;
    import ij.gui.*;
    import ij.process.*;
    import java.awt.*;

    /** This plugin implements the Invert, Smooth, Sharpen, Find Edges,
        and Add Noise commands. */
    public class Filters implements PlugInFilter {

        private static double sd = Prefs.getDouble(Prefs.NOISE_SD, 25.0);
        private String arg;
        private ImagePlus imp;
        private int slice;
        private boolean canceled;

        public int setup(String arg, ImagePlus imp) {
            this.arg = arg;
            this.imp = imp;
            if (imp!=null) {
                Roi roi = imp.getRoi();
                if (roi!=null && !roi.isArea())
                    imp.killRoi(); // ignore any line selection
            }
            return IJ.setupDialog(imp, DOES_ALL-DOES_8C+SUPPORTS_MASKING);
        }

        public void run(ImageProcessor ip) {

            if (arg.equals("invert")) {
                ip.invert();
                return;
            }

            if (arg.equals("smooth")) {
                ip.setSnapshotCopyMode(true);
                ip.smooth();
                ip.setSnapshotCopyMode(false);
                return;
            }

            if (arg.equals("sharpen")) {
                ip.setSnapshotCopyMode(true);
                ip.sharpen();
                ip.setSnapshotCopyMode(false);
                return;
            }

            if (arg.equals("edge")) {
                ip.setSnapshotCopyMode(true);
                ip.findEdges();
                ip.setSnapshotCopyMode(false);
                return;
            }

            if (arg.equals("add")) {
                ip.noise(25.0);
                return;
            }

            if (arg.equals("noise")) {
                if (canceled)
                    return;
                slice++;
                if (slice==1) {
                    GenericDialog gd = new GenericDialog("Gaussian Noise");
                    gd.addNumericField("Standard Deviation:", sd, 2);
                    gd.showDialog();
                    if (gd.wasCanceled()) {
                        canceled = true;
                        return;
                    }
                    sd = gd.getNextNumber();
                }
                ip.noise(sd);
                IJ.register(Filters.class);
                return;
            }

        }

        /** Returns the default standard deviation used by Process/Noise/Add Specified Noise. */
        public static double getSD() {
            return sd;
        }

    }

| Filters |