Class AlgorithmIndependentComponents

  • All Implemented Interfaces:
    java.awt.event.ActionListener, java.awt.event.WindowListener, java.lang.Runnable, java.util.EventListener

    public class AlgorithmIndependentComponents
    extends AlgorithmBase
    This algorithm operates on 2D and 3D black and white and color images. Requirements: 1.) The independent components must be statistically independent. 2.) The independent components must have all nongaussian distributions or one gaussian distribution and all the other distributions nongaussian or the independent components have time dependencies. 3.) For simplicity, assume the unknown mixture matrix is square. In other words, the number of mixtures equals the number of independent components. If the number of independent components is smaller than the number of mixtures, use principal component analysis to reduce the number of mixtures to the number of principal components. Reducing the number of dimensions can reduce noise and prevent overlearning. Filtering the data in the Fourier domain is allowed before performing independent component analysis since applying the Fourier transform to the data does not change the mixing matrix. References: 1.) Independent Component Analysis by Aapo Hyvarinen, Juha Karhunen, and Erkki Oja, John-Wiley & Sons, Inc., 2001. 2.) Independent Component Analysis A Tutorial Introduction by James V. Stone, Massachusetts Institute of Technology, 2004. 3.) Independent Component Analysis Principles and Practice Edited by Stephen Roberts and Richard Everson, Cambridge University Press, 2001. From the text: "Another very useful thing to do is to reduce the dimension of the data by principal component analysis. This reduces noise and prevents overlearning. It may also solve the problems with data that has a smaller number of independent components than mixtures." Software was tested with images obtained from the site at http://www.lx.it.pt/~lbalmeida/ica/seethrough/index.html, "See-through" data sets for nonlinear source separation by Luis B. Almeida. In the paper "Separating a Real-Life Nonlinear Image Mixture" by Luis B. Almeida, the following average linear and nonlinear separation SNR results are given in decibels for sets 4 thru 8: Set number linear source 1 linear source 2 nonlinear source1 nonlinear source2 4 9.0 8.7 13.8 13.1 5 5.2 10.5 9.3 13.9 6 13.4 6.6 14.2 6.4 7 4.5 11.2 6.2 11.2 8 5.8 3.4 6.0 3.7 My results: set 4: symmetric orthogonalization tanh a1 = 1.0 source1 3.96 dB source2 8.56 dB set 5: symmetric orthogonalization tanh a1 = 1.0 source1 5.93 dB source2 4.05 dB symmetric orthogonalization exp source1 9.76 dB source2 9.86 dB symmetric orthogonalization cubic source1 5.84 dB source2 3.99 dB maximum likelihood estimation exp source1 5.64 dB source2 3.89 dB source1 5.36 dB source2 3.89 dB set 6: symmetric orthogonalization tanh a1 = 1.0 source1 15.5 dB source2 11.8 dB maximum likelihood estimation tanh a1 = 1.0 source1 15.5 dB source2 11.8 dB set 7: symmetric orthogonalization tanh a1 = 1.0 source1 9.93 dB source2 14.8 dB maximum likelihood estimation tanh a1 = 1.0 source1 10.1 dB source2 14.8 dB set 8: symmetric orthogonalization tanh a1 = 1.0 source1 11.5 dB source2 6.91 dB source1 11.3 dB source2 10.9 dB maximum likelihood estimation tanh a1 = 1.0 source1 11.4 dB source2 6.79 dB source1 11.4 dB source2 6.79 dB source1 11.4 dB source2 6.79 dB maximum likelihood estimation exp source1 11.4 dB source2 6.79 dB
    • Field Detail

      • destImage

        private ModelImage[] destImage
        DOCUMENT ME!
      • haveColor

        private boolean haveColor
        DOCUMENT ME!
      • nPlanes

        private int nPlanes
        number of image planes present.
      • icNumber

        private int icNumber
        number of independent components to be retained. For SYMMETRIC_ORTHOGONALIZATION and MAXIMUM_LIKELIHOOD_ESTIMATION icNumber = nPlanes = colorsRequested * number of source images for color = number of source images for black and white icNumber can only be varied from 1 to nPlanes with DEFLATIONARY_ORTHOGONALIZATION
      • srcImageArray

        private ModelImage[] srcImageArray
      • srcImage

        private ModelImage srcImage
        DOCUMENT ME!
      • nonlinearFunction

        private int nonlinearFunction
      • a1

        private double a1
      • endTolerance

        private double endTolerance
      • icAlgorithm

        private int icAlgorithm
      • SYMMETRIC_ORTHOGONALIZATION

        public static final int SYMMETRIC_ORTHOGONALIZATION
        See Also:
        Constant Field Values
      • DEFLATIONARY_ORTHOGONALIZATION

        public static final int DEFLATIONARY_ORTHOGONALIZATION
        See Also:
        Constant Field Values
      • MAXIMUM_LIKELIHOOD_ESTIMATION

        public static final int MAXIMUM_LIKELIHOOD_ESTIMATION
        See Also:
        Constant Field Values
      • maxIterations

        private int maxIterations
      • redRequested

        private boolean redRequested
      • greenRequested

        private boolean greenRequested
      • blueRequested

        private boolean blueRequested
      • selfTest

        private boolean selfTest
    • Constructor Detail

      • AlgorithmIndependentComponents

        public AlgorithmIndependentComponents​(ModelImage[] destImg,
                                              ModelImage srcImg,
                                              int icNumber,
                                              int icAlgorithm,
                                              int nonlinearFunction,
                                              double a1,
                                              double endTolerance,
                                              int maxIterations,
                                              boolean redRequested,
                                              boolean greenRequested,
                                              boolean blueReuqested)
        Creates a new AlgorithmIndependentComponents object.
        Parameters:
        destImg - image model where result image is to stored
        srcImg - source image model
        icNumber - icNumber is the number of independent component images to retain
        icAlgorithm -
        nonlinearFunction -
        a1 -
        endTolerance -
        maxIterations -
      • AlgorithmIndependentComponents

        public AlgorithmIndependentComponents​(ModelImage[] destImg,
                                              ModelImage[] srcImgArray,
                                              int icNumber,
                                              int icAlgorithm,
                                              int nonlinearFunction,
                                              double a1,
                                              double endTolerance,
                                              int maxIterations,
                                              boolean redRequested,
                                              boolean greenRequested,
                                              boolean blueRequested)
        Creates a new AlgorithmIndependentComponents object.
        Parameters:
        destImg - image model where result image is to stored
        srcImg - source image model
        icNumber - icNumber is the number of independent component images to retain
        icAlgorithm -
        nonlinearFunction -
        a1 -
        endTolerance -
        maxIterations -
        redRequested -
        greenRequested -
        blueRequested -
    • Method Detail

      • finalize

        public void finalize()
        Prepares this class for destruction.
        Overrides:
        finalize in class AlgorithmBase
      • updateFileInfo

        public void updateFileInfo​(ModelImage image,
                                   ModelImage resultImage)
        Copy important file information to resultant image structure.
        Parameters:
        image - Source image.
        resultImage - Resultant image.
      • iComponent

        private void iComponent()
        DOCUMENT ME!