package ij.plugin.filter;
import java.awt.Color;
import ij.*;
import ij.gui.*;
import ij.process.*;
import ij.plugin.filter.ParticleAnalyzer;
import ij.measure.*;
import ij.util.*;
public class LineGraphAnalyzer implements PlugInFilter, Measurements {
ImagePlus imp;
public int setup(String arg, ImagePlus imp) {
this.imp = imp;
return DOES_8G+NO_CHANGES;
}
public void run(ImageProcessor ip) {
analyze(imp);
}
public void analyze(ImagePlus imp) {
ImageProcessor ip = imp.getProcessor();
ImageProcessor ip2 = ip.crop();
int width = ip2.getWidth();
int height = ip2.getHeight();
ip2.setColor(Color.white);
for (int i=1; i<width; i+=2) {
ip2.moveTo(i,0);
ip2.lineTo(i,height-1);
}
ip2 = ip2.rotateRight();
ImagePlus imp2 = imp.createImagePlus();
ip2.setThreshold(ip.getMinThreshold(), ip.getMaxThreshold(), ImageProcessor.NO_LUT_UPDATE);
imp2.setProcessor("Temp", ip2);
Calibration cal = imp2.getCalibration();
double pw = cal.pixelWidth;
double ph = cal.pixelHeight;
cal.pixelWidth = ph;
cal.pixelHeight = pw;
imp2.setCalibration(cal);
if (IJ.altKeyDown())
imp2.show();
int options = ParticleAnalyzer.SHOW_PROGRESS;
int measurements = CENTROID;
int minSize = 1;
int maxSize = Integer.MAX_VALUE;
ResultsTable rt = new ResultsTable();
ParticleAnalyzer pa = new ParticleAnalyzer(options, measurements, rt, minSize, maxSize);
if (!pa.analyze(imp2))
return;
float[] y = rt.getColumn(ResultsTable.X_CENTROID);
if (y==null)
return;
float[] x = rt.getColumn(ResultsTable.Y_CENTROID);
double[] a = Tools.getMinMax(x);
double xmin=a[0], xmax=a[1];
a = Tools.getMinMax(y);
double ymin=a[0], ymax=a[1];
String units = " ("+cal.getUnits()+")";
String xLabel = "X"+units;
String yLabel = "Y"+units;
Plot plot = new Plot("Line Graph", xLabel, yLabel, x, y);
plot.setLimits(0.0, width*ph, 0.0, height*pw);
plot.show();
}
}