Time_Noise_Reduce.java
import ij.ImagePlus;
import ij.ImageStack;
import ij.gui.GenericDialog;
import ij.plugin.filter.PlugInFilter;
import ij.process.FloatProcessor;
import ij.process.ImageProcessor;
/**
*
* 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 Time_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 = 1;
int ORDER = 0;
int DERIVATIVE=0;
GenericDialog gd = new GenericDialog("Constants");
gd.addNumericField("Half Width of Filter(px): ", WIDTH, 0);
gd.addNumericField("Order of Filter(even prefered): ", ORDER, 0);
gd.addNumericField("Derivative Order(Zero for none):",DERIVATIVE ,0);
gd.showDialog();
if (gd.wasCanceled())
return;
WIDTH = (int)gd.getNextNumber();
ORDER = (int)gd.getNextNumber();
DERIVATIVE = (int)gd.getNextNumber();
SavitzkyGolayFilter sgfilter = new SavitzkyGolayFilter(WIDTH, WIDTH, ORDER, DERIVATIVE);
ImageStack original = imp.getStack();
ImageStack out = new ImageStack(imp.getWidth(), imp.getHeight());
float[][] output = new float[imp.getNSlices()][imp.getWidth()*imp.getHeight()];
float[] originals = new float[imp.getNSlices()];
float[] px;
//performs a 'z convolution' with px as the kernel
for(int j = 0; j<imp.getHeight(); j++){
for(int k = 0; k<imp.getWidth(); k++){
for(int i = 1; i<=imp.getNSlices(); i++){
originals[i-1] = original.getProcessor(i).getf(k,j);
}
px = sgfilter.filterData(originals);
for(int i = 0; i<imp.getNSlices(); i++){
output[i][j*imp.getWidth() + k] = px[i];
}
}
}
ImageProcessor improc;
String[] labels = original.getSliceLabels();
for(int i = 0; i<imp.getNSlices(); i++){
improc = new FloatProcessor(imp.getWidth(), imp.getHeight());
improc.setPixels(output[i]);
out.addSlice(labels[i], improc);
}
ImagePlus y = new ImagePlus("SGtime_o" + ORDER + "_w" + WIDTH + "_d" + DERIVATIVE, out);
y.show();
}
}
Generated by GNU enscript 1.6.4.