Package gov.nih.mipav.model.algorithms
Class AlgorithmEntropyMinimization
- java.lang.Object
-
- java.lang.Thread
-
- gov.nih.mipav.model.algorithms.AlgorithmBase
-
- gov.nih.mipav.model.algorithms.AlgorithmEntropyMinimization
-
- All Implemented Interfaces:
de.jtem.numericalMethods.calculus.function.RealFunctionOfSeveralVariables
,java.awt.event.ActionListener
,java.awt.event.WindowListener
,java.lang.Runnable
,java.util.EventListener
public class AlgorithmEntropyMinimization extends AlgorithmBase implements de.jtem.numericalMethods.calculus.function.RealFunctionOfSeveralVariables
DOCUMENT ME!
-
-
Field Summary
Fields Modifier and Type Field Description private double
ac1
DOCUMENT ME!private double
ac2
DOCUMENT ME!private double
ac3
DOCUMENT ME!private double
ac4
DOCUMENT ME!private double
ac5
DOCUMENT ME!private double
ac6
DOCUMENT ME!private double
ac7
DOCUMENT ME!private double
ac8
DOCUMENT ME!private double
ac9
DOCUMENT ME!private double
ad1
DOCUMENT ME!private double
ad2
DOCUMENT ME!private double
ad3
DOCUMENT ME!private double
ad4
DOCUMENT ME!private double
ad5
DOCUMENT ME!private double
ad6
DOCUMENT ME!private double
ad7
DOCUMENT ME!private double
ad8
DOCUMENT ME!private double
ad9
DOCUMENT ME!private int
area
DOCUMENT ME!private boolean
backgroundPresent
DOCUMENT ME!private float[]
buffer
DOCUMENT ME!private double
grayCount
DOCUMENT ME!private int
histogramAvailable
Number of pixels available for histogram formation.private double[]
idealBuffer
Buffer holding calculation for noiseless U(x,y).private int
iter
DOCUMENT ME!private double
maximum
original image maximum.private double
maximumB
DOCUMENT ME!private double
maximumG
DOCUMENT ME!private double
maximumR
DOCUMENT ME!private double
mc1
DOCUMENT ME!private double
mc10
DOCUMENT ME!private double
mc11
DOCUMENT ME!private double
mc12
DOCUMENT ME!private double
mc13
DOCUMENT ME!private double
mc14
DOCUMENT ME!private double
mc15
DOCUMENT ME!private double
mc16
DOCUMENT ME!private double
mc17
DOCUMENT ME!private double
mc18
DOCUMENT ME!private double
mc19
DOCUMENT ME!private double
mc2
DOCUMENT ME!private double
mc3
DOCUMENT ME!private double
mc4
DOCUMENT ME!private double
mc5
DOCUMENT ME!private double
mc6
DOCUMENT ME!private double
mc7
DOCUMENT ME!private double
mc8
DOCUMENT ME!private double
mc9
DOCUMENT ME!private double
md1
DOCUMENT ME!private double
md10
DOCUMENT ME!private double
md11
DOCUMENT ME!private double
md12
DOCUMENT ME!private double
md13
DOCUMENT ME!private double
md14
DOCUMENT ME!private double
md15
DOCUMENT ME!private double
md16
DOCUMENT ME!private double
md17
DOCUMENT ME!private double
md18
DOCUMENT ME!private double
md19
DOCUMENT ME!private double
md2
DOCUMENT ME!private double
md3
DOCUMENT ME!private double
md4
DOCUMENT ME!private double
md5
DOCUMENT ME!private double
md6
DOCUMENT ME!private double
md7
DOCUMENT ME!private double
md8
DOCUMENT ME!private double
md9
DOCUMENT ME!private double
minimum
original image minimum.private double
minimumB
DOCUMENT ME!private double
minimumG
DOCUMENT ME!private double
minimumR
DOCUMENT ME!static int
NOISE_M2
Quadratic multiplicative noise.static int
NOISE_M3
Cubic multiplicative noise.static int
NOISE_MA2
The user can choose to use thresholding to exclude the background from any processing.private int
noiseType
NOISE_MA2 or NOISE_M2.private int
nParams
Numbering of shading correction parameters.private boolean[]
objectBuffer
DOCUMENT ME!private int
pixelIncrement
pixelIncrement is increased above 1 if subsampling.private double
powellTolerance
Tolerance passed to Powell's algorithm.private int
sliceSize
xDim * yDim.private boolean
subsample
If true, subsample image for histogram formation.private float
thresholdLevel
DOCUMENT ME!private boolean
thresholdSelected
If true don't use pixels below thresholdLevel that are 4 or 6 neighbor connected to boundary pixels below thresholdLevel.private boolean[]
validBuffer
True for source input locations not having image min or image max values.private int
volSize
DOCUMENT ME!private int
volume
DOCUMENT ME!private int
xDim
DOCUMENT ME!private int
yDim
DOCUMENT ME!private int
zDim
DOCUMENT ME!private int
zPixelIncrement
Handle case where zDim is far less than xDim and yDim-
Fields inherited from class gov.nih.mipav.model.algorithms.AlgorithmBase
destFlag, destImage, image25D, mask, maxProgressValue, minProgressValue, multiThreadingEnabled, nthreads, progress, progressModulus, progressStep, runningInSeparateThread, separable, srcImage, threadStopped
-
-
Constructor Summary
Constructors Constructor Description AlgorithmEntropyMinimization(ModelImage srcImage, boolean thresholdSelected, float thresholdLevel, boolean subsample, int noiseType)
Creates a new AlgorithmEntropyMinimization object.AlgorithmEntropyMinimization(ModelImage resultImage, ModelImage srcImage, boolean thresholdSelected, float thresholdLevel, boolean subsample, int noiseType)
Creates a new AlgorithmEntropyMinimization object.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private double
entropyFunction(double[] p)
DOCUMENT ME!double
eval(double[] x)
void
finalize()
Prepares this class for destruction.int
getNumberOfVariables()
private void
powell(double[] p, double[][] xi, double ftol)
Minimization of entropy function of nParams variables.private void
run2Da2m2()
DOCUMENT ME!private void
run2Dm2()
DOCUMENT ME!private void
run2Dm3()
DOCUMENT ME!private void
run3Da2m2()
DOCUMENT ME!private void
run3Dm2()
DOCUMENT ME!private void
run3Dm3()
DOCUMENT ME!void
runAlgorithm()
DOCUMENT ME!-
Methods inherited from class gov.nih.mipav.model.algorithms.AlgorithmBase
actionPerformed, addListener, addProgressChangeListener, calculateImageSize, calculatePrincipleAxis, computeElapsedTime, computeElapsedTime, convertIntoFloat, delinkProgressToAlgorithm, delinkProgressToAlgorithmMulti, displayError, errorCleanUp, fireProgressStateChanged, fireProgressStateChanged, fireProgressStateChanged, fireProgressStateChanged, fireProgressStateChanged, generateProgressValues, getDestImage, getElapsedTime, getMask, getMaxProgressValue, getMinProgressValue, getNumberOfThreads, getProgress, getProgressChangeListener, getProgressChangeListeners, getProgressModulus, getProgressStep, getProgressValues, getSrcImage, isCompleted, isImage25D, isMultiThreadingEnabled, isRunningInSeparateThread, isThreadStopped, linkProgressToAlgorithm, linkProgressToAlgorithm, makeProgress, notifyListeners, removeListener, removeProgressChangeListener, run, setCompleted, setImage25D, setMask, setMaxProgressValue, setMinProgressValue, setMultiThreadingEnabled, setNumberOfThreads, setProgress, setProgressModulus, setProgressStep, setProgressValues, setProgressValues, setRunningInSeparateThread, setSrcImage, setStartTime, setThreadStopped, startMethod, windowActivated, windowClosed, windowClosing, windowDeactivated, windowDeiconified, windowIconified, windowOpened
-
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
-
-
-
-
Field Detail
-
NOISE_MA2
public static final int NOISE_MA2
The user can choose to use thresholding to exclude the background from any processing. Excluded pixels will have the same values as the original source image. All pixels with values below threshold that are 4 or 6 neighbor connected thru below threshold pixels to a boundary pixel which is below threshold will be excluded from processing. By default image subsampling is used in histogram formation since using 5000 images samples is sufficient to form the histogram. If subsampling is selected, pixelIncrement for both x and y is set equal to: Math.max(1,(int)Math.sqrt(histogramAvailable/5000)) If subsampling is not selected, pixelIncrement equals 1 Powell's algorithm is used to search for the values of the 10 shading parameters that minimize the entropy of the blurred histogram of the U(x,y) image. A histogram is formed to represent integers from the floor(image U minimum) to the ceiling(image U maximum). For each floating point gray value gp in U(x,y) a count of 1 is split between the 2 integer bins encompassing it. Let the bins be k and k+1. k+1-gp is added to bin k and gp - k is added to bin k+1. Gray values in locations corresponding to the image minimum or image maximum in the original input image are not used in creating this histogram, since they may represent regions where saturation effects are occurring. Then, a blurred histogram is created from the original histogram. The original histogram is blurred with a triangular window of size 5: blurredHistogram[i] = originalHistogram[i-2] + 2* originalHistogram[i-1] + 3*originalHistogram[i] + 2*originalHistogram[i+1] + originalHistogram[i+2] The blurred histogram is normalized to give probabilities by dividing the count in each bin by the total number of counts in the blurred histogram. The entropy is formed by summing the -probability(n)*log(probability(n)) over all bins n with nonzero counts. References: This software implements the algorithm discussed in: 1.) Retrospective shading correction based on entropy minimization by B. Likar, J. B. A. Maintz, M. A. Viergever, and F. Pernus, Journal of Microscopy, Vol. 197, Pt 3., March, 2000, pp. 285-295. 2.) Retrospective Correction of MR Intensity Inhomogeneity by Information Minimization by Bostjan Likar, Max Viergever, and Franjo Pernus, IEEE Transactions on Medical Imaging, Vol. 20, No. 12, December, 2001, pp. 1398-1410. 3.) Real-time automated visual inspection of color tablets in pharmaceutical blisters by Joze Derganc, Bostjan Likar, Rok Bernard, Dejan Tomazevic, and Franjo Pernus, Real-Time Imaging, Vol. 9, 2003, pp. 113-124.- See Also:
- Constant Field Values
-
NOISE_M2
public static final int NOISE_M2
Quadratic multiplicative noise.- See Also:
- Constant Field Values
-
NOISE_M3
public static final int NOISE_M3
Cubic multiplicative noise.- See Also:
- Constant Field Values
-
ac1
private double ac1
DOCUMENT ME!
-
ac2
private double ac2
DOCUMENT ME!
-
ac3
private double ac3
DOCUMENT ME!
-
ac4
private double ac4
DOCUMENT ME!
-
ac5
private double ac5
DOCUMENT ME!
-
ac6
private double ac6
DOCUMENT ME!
-
ac7
private double ac7
DOCUMENT ME!
-
ac8
private double ac8
DOCUMENT ME!
-
ac9
private double ac9
DOCUMENT ME!
-
ad1
private double ad1
DOCUMENT ME!
-
ad2
private double ad2
DOCUMENT ME!
-
ad3
private double ad3
DOCUMENT ME!
-
ad4
private double ad4
DOCUMENT ME!
-
ad5
private double ad5
DOCUMENT ME!
-
ad6
private double ad6
DOCUMENT ME!
-
ad7
private double ad7
DOCUMENT ME!
-
ad8
private double ad8
DOCUMENT ME!
-
ad9
private double ad9
DOCUMENT ME!
-
area
private int area
DOCUMENT ME!
-
backgroundPresent
private boolean backgroundPresent
DOCUMENT ME!
-
buffer
private float[] buffer
DOCUMENT ME!
-
grayCount
private double grayCount
DOCUMENT ME!
-
histogramAvailable
private int histogramAvailable
Number of pixels available for histogram formation.
-
idealBuffer
private double[] idealBuffer
Buffer holding calculation for noiseless U(x,y).
-
iter
private int iter
DOCUMENT ME!
-
maximum
private double maximum
original image maximum.
-
maximumR
private double maximumR
DOCUMENT ME!
-
maximumG
private double maximumG
DOCUMENT ME!
-
maximumB
private double maximumB
DOCUMENT ME!
-
mc1
private double mc1
DOCUMENT ME!
-
mc2
private double mc2
DOCUMENT ME!
-
mc3
private double mc3
DOCUMENT ME!
-
mc4
private double mc4
DOCUMENT ME!
-
mc5
private double mc5
DOCUMENT ME!
-
mc6
private double mc6
DOCUMENT ME!
-
mc7
private double mc7
DOCUMENT ME!
-
mc8
private double mc8
DOCUMENT ME!
-
mc9
private double mc9
DOCUMENT ME!
-
mc10
private double mc10
DOCUMENT ME!
-
mc11
private double mc11
DOCUMENT ME!
-
mc12
private double mc12
DOCUMENT ME!
-
mc13
private double mc13
DOCUMENT ME!
-
mc14
private double mc14
DOCUMENT ME!
-
mc15
private double mc15
DOCUMENT ME!
-
mc16
private double mc16
DOCUMENT ME!
-
mc17
private double mc17
DOCUMENT ME!
-
mc18
private double mc18
DOCUMENT ME!
-
mc19
private double mc19
DOCUMENT ME!
-
md1
private double md1
DOCUMENT ME!
-
md2
private double md2
DOCUMENT ME!
-
md3
private double md3
DOCUMENT ME!
-
md4
private double md4
DOCUMENT ME!
-
md5
private double md5
DOCUMENT ME!
-
md6
private double md6
DOCUMENT ME!
-
md7
private double md7
DOCUMENT ME!
-
md8
private double md8
DOCUMENT ME!
-
md9
private double md9
DOCUMENT ME!
-
md10
private double md10
DOCUMENT ME!
-
md11
private double md11
DOCUMENT ME!
-
md12
private double md12
DOCUMENT ME!
-
md13
private double md13
DOCUMENT ME!
-
md14
private double md14
DOCUMENT ME!
-
md15
private double md15
DOCUMENT ME!
-
md16
private double md16
DOCUMENT ME!
-
md17
private double md17
DOCUMENT ME!
-
md18
private double md18
DOCUMENT ME!
-
md19
private double md19
DOCUMENT ME!
-
minimum
private double minimum
original image minimum.
-
minimumR
private double minimumR
DOCUMENT ME!
-
minimumG
private double minimumG
DOCUMENT ME!
-
minimumB
private double minimumB
DOCUMENT ME!
-
noiseType
private int noiseType
NOISE_MA2 or NOISE_M2.
-
nParams
private int nParams
Numbering of shading correction parameters.
-
objectBuffer
private boolean[] objectBuffer
DOCUMENT ME!
-
pixelIncrement
private int pixelIncrement
pixelIncrement is increased above 1 if subsampling.
-
zPixelIncrement
private int zPixelIncrement
Handle case where zDim is far less than xDim and yDim
-
powellTolerance
private double powellTolerance
Tolerance passed to Powell's algorithm.
-
sliceSize
private int sliceSize
xDim * yDim.
-
subsample
private boolean subsample
If true, subsample image for histogram formation.
-
thresholdLevel
private float thresholdLevel
DOCUMENT ME!
-
thresholdSelected
private boolean thresholdSelected
If true don't use pixels below thresholdLevel that are 4 or 6 neighbor connected to boundary pixels below thresholdLevel.
-
validBuffer
private boolean[] validBuffer
True for source input locations not having image min or image max values.
-
volSize
private int volSize
DOCUMENT ME!
-
volume
private int volume
DOCUMENT ME!
-
xDim
private int xDim
DOCUMENT ME!
-
yDim
private int yDim
DOCUMENT ME!
-
zDim
private int zDim
DOCUMENT ME!
-
-
Constructor Detail
-
AlgorithmEntropyMinimization
public AlgorithmEntropyMinimization(ModelImage srcImage, boolean thresholdSelected, float thresholdLevel, boolean subsample, int noiseType)
Creates a new AlgorithmEntropyMinimization object.- Parameters:
srcImage
- original imagethresholdSelected
- If true, don't use pixels that are 4 or 6 neighbor connected to boundary pixels below thresholdLevelthresholdLevel
- DOCUMENT ME!subsample
- DOCUMENT ME!noiseType
- DOCUMENT ME!
-
AlgorithmEntropyMinimization
public AlgorithmEntropyMinimization(ModelImage resultImage, ModelImage srcImage, boolean thresholdSelected, float thresholdLevel, boolean subsample, int noiseType)
Creates a new AlgorithmEntropyMinimization object.- Parameters:
resultImage
- entropy minimized imagesrcImage
- original imagethresholdSelected
- If true, don't use pixels that are 4 or 6 neighbor connected to boundary pixels below thresholdLevelthresholdLevel
- DOCUMENT ME!subsample
- DOCUMENT ME!noiseType
- DOCUMENT ME!
-
-
Method Detail
-
finalize
public void finalize()
Prepares this class for destruction.- Overrides:
finalize
in classAlgorithmBase
-
runAlgorithm
public void runAlgorithm()
DOCUMENT ME!- Specified by:
runAlgorithm
in classAlgorithmBase
-
entropyFunction
private double entropyFunction(double[] p)
DOCUMENT ME!- Parameters:
p
- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
powell
private void powell(double[] p, double[][] xi, double ftol)
Minimization of entropy function of nParams variables. Input consists of an initial starting point p[0...nParams-1]; an initial matrix xi[0...nParams-1][0...nParams-1], whose columns contain the initial set of directions (usually the nParams unit vectors); and ftol, the fractional tolerance in the function value such that failure to decrease by more than this amount on one iteration signals doneness. On output, p is set to the best point found, xi is the then-current direction set, fret is the returned function value at p, and iter is the number of iterations taken.- Parameters:
p
- DOCUMENT ME!xi
- DOCUMENT ME!ftol
- DOCUMENT ME!
-
run2Da2m2
private void run2Da2m2()
DOCUMENT ME!
-
run2Dm2
private void run2Dm2()
DOCUMENT ME!
-
run2Dm3
private void run2Dm3()
DOCUMENT ME!
-
run3Da2m2
private void run3Da2m2()
DOCUMENT ME!
-
run3Dm2
private void run3Dm2()
DOCUMENT ME!
-
run3Dm3
private void run3Dm3()
DOCUMENT ME!
-
eval
public double eval(double[] x)
- Specified by:
eval
in interfacede.jtem.numericalMethods.calculus.function.RealFunctionOfSeveralVariables
-
getNumberOfVariables
public int getNumberOfVariables()
- Specified by:
getNumberOfVariables
in interfacede.jtem.numericalMethods.calculus.function.RealFunctionOfSeveralVariables
-
-