Space_Noise_Reduce.java
import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.filter.*;
import Jama.*;
/**
*
* Implements a Savitzky-Golay smooting filter over each image.
* Requires the Jama matrix library.
*
* @Author: Matthew B. Smith
* @Url: http://orangepalantir.org
* @Version: 0.8
* @Date: 2/10/2010
* */
public class Space_Noise_Reduce implements PlugInFilter {
ImagePlus imp;
public int setup(String arg, ImagePlus imp) {
this.imp = imp;
return DOES_ALL;
}
public void run(ImageProcessor ip) {
int WIDTH = 6;
int ORDER = 4;
GenericDialog gd = new GenericDialog("Constants");
gd.addNumericField("Half Width of Filter(px): ", WIDTH, 2);
gd.addNumericField("Order of Filter(even prefered): ", ORDER, 2);
gd.showDialog();
if (gd.wasCanceled())
return;
WIDTH = (int)gd.getNextNumber();
ORDER = (int)gd.getNextNumber();
double[][] kernel = SavitzkyGolayFilter.getKernel(WIDTH,ORDER);
float[] fkernel = new float[kernel.length*kernel[0].length];
for(int i = 0; i<fkernel.length; i++){
int xdex = i/kernel.length;
int ydex = i%kernel.length;
fkernel[i] = (float)kernel[ydex][xdex];
}
ImageStack original = imp.getStack();
ImageStack out = new ImageStack(imp.getWidth(), imp.getHeight());
String[] labels = original.getSliceLabels();
for(int i = 1; i<=imp.getNSlices(); i++){
ImageProcessor improc = original.getProcessor(i).duplicate();
improc.convolve(fkernel, kernel.length, kernel[0].length);
out.addSlice(labels[i-1], improc);
}
ImagePlus y = new ImagePlus("SG_Space_o" + ORDER + "_w" + WIDTH , out);
y.show();
}
}
Generated by GNU enscript 1.6.4.