1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
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;
private boolean noRoi;
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())
noRoi = true;
}
int flags = IJ.setupDialog(imp, DOES_ALL-DOES_8C+SUPPORTS_MASKING);
return flags;
}
public void run(ImageProcessor ip) {
if (noRoi)
ip.resetRoi();
if (arg.equals("invert")) {
ip.invert();
slice++;
if (imp.getBitDepth()==16 && imp.getStackSize()>1 && slice==imp.getStackSize())
imp.resetDisplayRange();
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;
}
}
|