====== Smooth Histogram ======
===== Description =====
If an arbitrary number of bins is used to generate a histogram from an integer data-type image, spikes can arise due to an uneven number of integer values within each bin. This utility converts images to floating point and adds random noise with values between 0 and 1 before calculating the histogram
===== Author =====
Jonathan Jackson (jjackson a.t familyjackson dot net)
===== Change List =====
* 2008-12-04: First uploaded to ImageJ Wiki
===== Usage =====
Usage: histogram [options] image
Purpose: Generates smooth histograms with a user-specified number of bins.
Options:
-a set min and max automatically (mean +- 2*sd)
n is an optional parameter to change the number of sd's
-l histogram min (lower) value
-m set min and max to the min and max values in the image
-n number of bins in histogram (default=256)
if n <= 1 then the bin width is set to 1 (ie. nBins = max-min)
-u histogram max (upper) value
-z include pixels with values <= 0
Advanced Options:
-s don't add 0-1 random noise for smoother histogram
(this eliminates spikes and is on by default when bin width != 1)
Input files may be in Analyze, NIFTI, DICOM or UNC format
The output has three columns: 'Bin number' 'Bin start' 'Number of Pixels'
===== Installation =====
* Download {{:diverse:commandline:smooth_histogram.class|}} to the ImageJ plugins folder
* Source code: {{:diverse:commandline:smooth_histogram.java|}}
Dependencies:
* Download [[http://www.urbanophile.com/arenn/hacking/download.html|java-getopt.jar]] (to ImageJ/plugins/jars)
* Save [[diverse:commandline:estimatemem|estimate_mem]] (to ImageJ/bin)
* Install the [[http://rsb.info.nih.gov/ij/plugins/unc.html|UNC plugin]] if UNC image support is required
* Install the [[http://rsb.info.nih.gov/ij/plugins/nifti.html|NIFTI plugin]] if Analyze/Nifti image support is required
Finally, save the wrapper script (to ImageJ/bin/histogram), make the file executable and edit paths as appropriate:
#!/bin/bash
class="Smooth_Histogram"
ij_path="/usr/local/ImageJ/"
ij_plugins="${ij_path}plugins"
java_path="/usr/java/jdk1.5/bin/"
CLASSPATH="${ij_path}ij.jar"
CLASSPATH="${CLASSPATH}:${ij_plugins}/Histogram/"
CLASSPATH="${CLASSPATH}:${ij_plugins}/jars/getopt.jar"
export CLASSPATH
shopt -s xpg_echo
RED='\e[1;31m'
NC='\e[0m' # no color
if [[ -z "$DISPLAY" ]] ; then
echo "${RED}$(basename $0) may fail because the DISPLAY variable is not set properly${NC}" 1>&2
echo "Try using 'ssh -Y' when you log in to a remote machine" 1>&2
fi
shopt -s extglob
eval im_file='${'$#'}' # last argument should be the image file
mem=$(${ij_path}bin/estimate_mem -m 4 -b 32 $im_file) # need space for image in 32bit, so possible 4x 8bit -> 32 bit conversion
${java_path}java -mx${mem}m -Dplugins.dir=${ij_path} -Dscript.name=`basename $0` $class $@
exit $?