ij.plugin.Distribution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ij Show documentation
Show all versions of ij Show documentation
ImageJ is an open source Java image processing program inspired by NIH Image for the Macintosh.
package ij.plugin;
import ij.*;
import ij.gui.*;
import ij.process.*;
import ij.plugin.PlugIn;
import ij.measure.*;
import ij.util.Tools;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
/**
This plugin implements the Analyze/Distribution command.
It reads the data from the ResultsTable and plots a frequency histogram.
@author G. Landini at bham. ac. uk
*/
public class Distribution implements PlugIn, TextListener {
static String parameter = "Area";
static boolean autoBinning = true;
static int nBins = 10;
static String range = "0-0";
Checkbox checkbox;
TextField nBinsField, rangeField;
String defaultNBins, defaultRange;
public void run(String arg) {
ResultsTable rt=ResultsTable.getResultsTable();
int count = rt.size();
if (count==0) {
IJ.error("Distribution", "The \"Results\" table is empty");
return;
}
String head= rt.getColumnHeadings();
//IJ.log(head);
StringTokenizer t = new StringTokenizer(head, "\t");
int tokens = t.countTokens()-1;
String[] strings = new String[tokens];
strings[0] = t.nextToken(); // first token is empty?
for(int i=0; i=0)
data = rt.getColumn(index);
if (data==null) {
IJ.error("Distribution", "No available results: \""+parameter+"\"");
return;
}
float [] pars = new float [11];
stats(count, data, pars);
if (autoBinning) {
//sd = 7, min = 3, max = 4
// use Scott's method (1979 Biometrika, 66:605-610) for optimal binning: 3.49*sd*N^-1/3
float binWidth = (float)(3.49 * pars[7]*(float)Math.pow((float)count, -1.0/3.0));
nBins= (int)Math.floor(((pars[4]-pars[3])/binWidth)+.5);
if (nBins<2) nBins = 2;
}
ImageProcessor ip = new FloatProcessor(count, 1, data, null);
ImagePlus imp = new ImagePlus("", ip);
ImageStatistics stats = new StackStatistics(imp, nBins, nMin, nMax);
int maxCount = 0;
for (int i=0; imaxCount)
maxCount = stats.histogram[i];
}
stats.histYMax = maxCount;
new HistogramWindow(parameter+" Distribution", imp, stats);
}
int getIndex(String[] strings) {
for (int i=0; imax) max = data[i];
}
ave = totl/nc;
for(i=0;i 0){
skew = (float)skew / (nc * (float) Math.pow(sdev,3));
kurt = (float)kurt / (nc * (float) Math.pow(var, 2)) - 3;
}
pars[1]=(float) nc;
pars[2]=totl;
pars[3]=min;
pars[4]=max;
pars[5]=ave;
pars[6]=adev;
pars[7]=sdev;
pars[8]=var;
pars[9]=skew;
pars[10]=kurt;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy