Class AlgorithmPrincipalComponents

java.lang.Object
java.lang.Thread
gov.nih.mipav.model.algorithms.AlgorithmBase
gov.nih.mipav.model.algorithms.AlgorithmPrincipalComponents
All Implemented Interfaces:
ActionListener, FocusListener, WindowListener, Runnable, EventListener

public class AlgorithmPrincipalComponents extends AlgorithmBase implements ActionListener, FocusListener
This algorithm operates on 3D black and white images and on 2D and 3D color images. The user can select 1 or both of 2 output images: The first image is a filtered 3D image containing only the first n principal components, where n is selected by the user after viewing images of the first 10 (or the number that exist if less than 10) principal components. The second image is a 2D image created by averaging together the images in the 3D image. Note that red, green, and blue are treated as separate 2D planes. This implementation assumes that the noise variance is equal in every slice and that the noise is uncorrelated between slices. Principal components maximizes data variance in components; it concentrates the information content of the data in as small a number of components as possible. This algorithm is based on: 1.) Digital Image Processing, Third Edition by Rafael C. Gonzalez and Richard E. Woods, Section 11.4 Use of Principal Components for Description, pp. 842 - 852, 2008 by Pearson Education, Inc. Information about using a matchImage: Eigenfaces for Recognition by Matthew Turk and Alex Pentland Vision and Modeling Group The Media Laboratory Massachusetts Institute of Technology 2.) Gabor Feature Based Classification Using the Enhanced Linear Discriminant Model for Face Recognition by Chengjun Liu and Harry Wechsler states "For the Eigenfaces method, the Mahalanobis distance measure performs better than the L1 distance measure, followed in order by the L2 distance measure and the cosine similarity measure as shown in Fig. 6. The Mahalanobis distance measure performs better than the other similarity measures because the Mahalanobis distance measure counteracts the fact that the L1 and L2 distance measures in PCA space weight preferentially for low frequencies, and this is consistent with results reported by Moghaddam and Pentland and Sung and Poggio. As the L2 measure weights more the low frequencies than L1 does, the L1 distance measure should perform better than the L2 distance measure, a conjecture validated by our experiments as shown in Figure 6. The cosine similarity measure does not compensate the low frequency preference, and it performs worst among all the measures." 3.) "The statistical properties of three noise removal procedures for multichannel remotely sensed data" by M. Berman, CSIRO Division of Mathemetics and Statistics P.O. Box 218, Lindfield, N.S.W., 2070 Consulting Report NSW/85/31/MB9 Note that this algorithm has 4 different names: Hotelling, eigenvector, principal component, and Karhunen-Loeve transform. Also note that when the noise variance is the same in all bands and the noise is uncorrelated between bands the principal component transformation is equivalent to the maximum noise fraction transformation. In the more general case, the MNF transform is equivalent to a transformation of the data to a coordinate system in which the noise covariance matrix is the identity matrix, followed by a principal components transformation. The transform in this form is the noise-adjusted principal components transform. In forward order MNF maximizes the noise content in successive components that are uncorrelated over the dataset or equivalently in reverse order MNF maximizes the signal to noise ratio of each component. Information about the signal to noise ratio improvement is found in "Information Extraction, SNR Improvement, and Data Compression in MultiSpectral Imagery", Patrick J. Ready and Paul A. Wintz, IEEE Transactions on Communications, Vol. COM-21, No. 10, October, 1973, pp. 1123-1130.
  • Field Details

    • destImage

      private ModelImage[] destImage
      DOCUMENT ME!
    • displayAndAsk

      private boolean displayAndAsk
      DOCUMENT ME!
    • doAveraging

      private boolean doAveraging
      if true create an image averaging together the slices in the filtered version.
    • doFilter

      private boolean doFilter
      if true create a filtered version of the original image.
    • haveColor

      private boolean haveColor
      DOCUMENT ME!
    • principalComponentsOnly

      private boolean principalComponentsOnly
    • nPlanes

      private int nPlanes
      number of image planes present.
    • nPresent

      private int nPresent
      number of principal components displayed 10 or less than 10 if fewer exist.
    • OKButton

      private JButton OKButton
      DOCUMENT ME!
    • pNumber

      private int pNumber
      number of principal components to be retained.
    • pNumberDialog

      private JDialog pNumberDialog
      DOCUMENT ME!
    • pressedOK

      private boolean pressedOK
      DOCUMENT ME!
    • srcImage

      private ModelImage srcImage
      DOCUMENT ME!
    • textNumber

      private JTextField textNumber
      DOCUMENT ME!
    • matchImage

      private ModelImage matchImage
      If this 2D black and white image is present, it is matched to the closest slice and/or color in the source image model by looking for the closest match of the weights of the principal components.
    • doMahalanobisDistance

      private boolean doMahalanobisDistance
  • Constructor Details

    • AlgorithmPrincipalComponents

      public AlgorithmPrincipalComponents(ModelImage[] destImg, ModelImage srcImg, ModelImage matchImage, boolean doFilter, boolean doAveraging, boolean displayAndAsk, int pNumber, boolean doMahalanobisDistance)
      Creates a new AlgorithmPrincipalComponents object.
      Parameters:
      destImg - image model where result image is to stored
      srcImg - source image model
      matchImage - match image match this image to the closest slice and/or color in the source image
      doFilter - if true create a filtered version of the original image
      doAveraging - if true create an image averaging together the slices in the filtered version
      displayAndAsk - if true display principal component images and ask how many to retain
      pNumber - if displayAndAsk if false pNumber is the number of principal component images to retain
      doMahalanobisDistance - Select Euclidean or Mahalanobis distance for matching
    • AlgorithmPrincipalComponents

      public AlgorithmPrincipalComponents(ModelImage[] destImg, ModelImage srcImg, boolean doFilter, boolean doAveraging, boolean displayAndAsk, int pNumber)
      Creates a new AlgorithmPrincipalComponents object.
      Parameters:
      destImg - image model where result image is to stored
      srcImg - source image model
      doFilter - if true create a filtered version of the original image
      doAveraging - if true create an image averaging together the slices in the filtered version
      displayAndAsk - if true display principal component images and ask how many to retain
      pNumber - if displayAndAsk if false pNumber is the number of principal component images to retain
    • AlgorithmPrincipalComponents

      public AlgorithmPrincipalComponents(ModelImage[] destImg, ModelImage srcImg, int pNumber)
      Creates a new AlgorithmPrincipalComponents object. Option only returns principal components
      Parameters:
      destImg - image model where result image is to stored
      srcImg - source image model
      pNumber - if displayAndAsk if false pNumber is the number of principal component images to retain
      doFilter - if true create a filtered version of the original image
      doAveraging - if true create an image averaging together the slices in the filtered version
      displayAndAsk - if true display principal component images and ask how many to retain
  • Method Details

    • actionPerformed

      public void actionPerformed(ActionEvent event)
      Calls various methods depending on the action.
      Specified by:
      actionPerformed in interface ActionListener
      Overrides:
      actionPerformed in class AlgorithmBase
      Parameters:
      event - event that triggered function
    • finalize

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

      public void focusGained(FocusEvent event)
      Do nothing.
      Specified by:
      focusGained in interface FocusListener
      Parameters:
      event - Focus event
    • focusLost

      public void focusLost(FocusEvent event)
      Do nothing.
      Specified by:
      focusLost in interface FocusListener
      Parameters:
      event - Focus event
    • runAlgorithm

      public void runAlgorithm()
      Start algorithm.
      Specified by:
      runAlgorithm 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.
    • createPNumberDialog

      private void createPNumberDialog(ActionListener al)
      DOCUMENT ME!
      Parameters:
      al - DOCUMENT ME!
    • pComponent

      private void pComponent()
      DOCUMENT ME!