Class JDialogLocalNormalization

All Implemented Interfaces:
AlgorithmInterface, ScriptableActionInterface, DialogDefaultsInterface, ActionListener, FocusListener, ItemListener, WindowListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible, RootPaneContainer, WindowConstants

public class JDialogLocalNormalization extends JDialogScriptableBase implements AlgorithmInterface
This is the dialog to permit user to perform Local Normalization.

Local Normalization equalizes colour levels among pixels removing variations due to lighting, bringing out contrasts in detail.

This dialog presents the X- and Y- gaussian dimensions and the blurring weight from the JDialogUnsharpMask dialog and the cut-off frequency from the JDialogFrequencyFilter dialog. There is also a colour channel selection panel which permits the selection of colours to be processed when the image is in aRGB colour.

Described by Halyo, Rahman and Park:

Local Normalization seperates the image into a local or low-frequency signal, and a suface detail or high-frequency signal. The locally normalized signal is then obtained by normalizing (ie., dividing) the detail signal by the local average.

References:

  1. Local Normalization. http://bigwww.epfl.ch/demo/normalize/desc.html
  2. Halyo, Nesim; Rahman, Zia-ur; Park, Stephen. "Information Content in Nonlinear Local Normalization Processing of Digital Images". College of William and Mary. Williamsburg, Virgiana.
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Use serialVersionUID for interoperability.
      See Also:
    • UNSHARP_MIN

      public static final float UNSHARP_MIN
      minimum value for unsharpening variables, at 0.5.
      See Also:
    • UNSHARP_MAX

      public static final float UNSHARP_MAX
      maximum value for unsharpening variables, at 5.0.
      See Also:
    • UNSHARP_WEIGHT_MIN

      public static final double UNSHARP_WEIGHT_MIN
      minimum value for unsharpening weighting, at 0.0.
      See Also:
    • UNSHARP_WEIGHT_MAX

      public static final double UNSHARP_WEIGHT_MAX
      maximum value for unsharpening weighting, at 1.0.
      See Also:
    • FREQ_MIN

      public static final float FREQ_MIN
      minimum frequency value for blurring frequency, at 0.0.
      See Also:
    • FREQ_DEFAULT

      public static final float FREQ_DEFAULT
      default frequency value for blurring frequency, at 0.2.
      See Also:
    • BLUR_MIN

      public static final int BLUR_MIN
      minimum value for blurring, at 1.0.
      See Also:
    • algoLocal

      private AlgorithmLocalNormalization algoLocal
      DOCUMENT ME!
    • blurringDiameter

      private int blurringDiameter
      DOCUMENT ME!
    • blurringDiameterText

      private JTextField blurringDiameterText
      DOCUMENT ME!
    • blurringFreq

      private float blurringFreq
      user-selectable variables used in the FFT-blurring operation used as interim variables in starting the algorithm op.
    • blurringFreqText

      private JTextField blurringFreqText
      DOCUMENT ME!
    • colorPanel

      private JPanelColorChannels colorPanel
      DOCUMENT ME!
    • displayLoc

      private int displayLoc
      DOCUMENT ME!
    • errorComponent

      private JTextField errorComponent
      DOCUMENT ME!
    • resultImage

      private ModelImage resultImage
      DOCUMENT ME!
    • sourceImage

      private ModelImage sourceImage
      DOCUMENT ME!
    • titles

      private String[] titles
      DOCUMENT ME!
    • unsharp

      private float[] unsharp
      user-selectable variables used in the unsharping operation. used as interim variables in starting the algorithm op.
    • unsharpWeight

      private double unsharpWeight
      DOCUMENT ME!
    • unsharpWeightText

      private JTextField unsharpWeightText
      DOCUMENT ME!
    • unsharpXtext

      private JTextField unsharpXtext
      DOCUMENT ME!
    • unsharpYtext

      private JTextField unsharpYtext
      DOCUMENT ME!
    • unsharpZtext

      private JTextField unsharpZtext
      DOCUMENT ME!
    • userInterface

      private ViewUserInterface userInterface
      DOCUMENT ME!
  • Constructor Details

    • JDialogLocalNormalization

      public JDialogLocalNormalization()
      Empty constructor needed for dynamic instantiation (used during scripting).
    • JDialogLocalNormalization

      public JDialogLocalNormalization(JFrame owner, ModelImage mi)
      Creates an modal extension of JDialogBase, using the title, "Local Normalization". Creates an options panel; this contains: the inputs for the unsharp masking; the inputs for blurring; and the inputs for choosing which colour channels to process. This last set of options are not selectable on images which are not colour images. It creates the OKAY and CANCEL buttons on a panel, to b be placed at the bottom of the dialog.

      The panel is then pack()'d and then setVisible(true).

      Parameters:
      owner - DOCUMENT ME!
      mi - DOCUMENT ME!
  • Method Details

    • actionPerformed

      public void actionPerformed(ActionEvent ae)
      a button has been clicked! Cancel will dispose of the dialog, OK sets the variables and calls the algorithm; any errors in setting the variables upon OK are written to the debug pane. Help brings up the help text.
      Specified by:
      actionPerformed in interface ActionListener
      Overrides:
      actionPerformed in class JDialogBase
      Parameters:
      ae - DOCUMENT ME!
    • algorithmPerformed

      public void algorithmPerformed(AlgorithmBase algorithm)
      This method is required if the AlgorithmPerformed interface is implemented. It is called by the algorithms when it has completed or failed to to complete, so that the dialog can be display the result image and/or clean up.
      Specified by:
      algorithmPerformed in interface AlgorithmInterface
      Parameters:
      algorithm - Algorithm that caused the event.
    • getResultImage

      public ModelImage getResultImage()
      Accessor that returns the image.
      Returns:
      The result image.
    • setBlurringDiameter

      public void setBlurringDiameter(int dia)
      Accessor that sets the blurring diameter value.
      Parameters:
      dia - Value to set the blurring diameter to (should be positive and odd).
    • setBlurringFreq

      public void setBlurringFreq(float freq)
      Accessor that sets the blurring frequency value.
      Parameters:
      freq - Value to set the blurring frequency to (should be positive).
    • setDisplayLocNew

      public void setDisplayLocNew()
      Accessor that sets the display loc variable to new, so that a new image is created once the algorithm completes.
    • setDisplayLocReplace

      public void setDisplayLocReplace()
      Accessor that sets the display loc variable to replace, so the current image is replaced once the algorithm completes.
    • setUnsharp

      public void setUnsharp(float[] unsharp)
      Accessor that sets the unsharp array.
      Parameters:
      unsharp - Value to set the unsharp array to (should be between 0.5 and 5.0).
    • setUnsharp

      public void setUnsharp(float unsharpX, float unsharpY)
      Accessor that sets the unsharp array values.
      Parameters:
      unsharpX - Values to set the unsharp array values to (should be between 0.5 and 5.0).
      unsharpY - Values to set the unsharp array values to (should be between 0.5 and 5.0).
    • setUnsharpWeight

      public void setUnsharpWeight(double weight)
      Accessor that sets the unsharp weight value.
      Parameters:
      weight - Value to set the unsharp weight to (should be between 0.0 and 1.0).
    • buildColourPanel

      protected JPanel buildColourPanel()
      makes the panel to allow user selection of colour channels to filter. nothing editable when image not in ARGB or ARGB_USHORT or ARGB_UINTEGER or ARGB_FLOAT
      Returns:
      the colour panel with adjustable attributes already added
    • callAlgorithm

      protected void callAlgorithm()
      Once all the necessary variables are set, call the local normalization algorithm based on what type of image this is and whether or not there is a separate destination image.
      Specified by:
      callAlgorithm in class JDialogScriptableBase
    • doPostAlgorithmActions

      protected void doPostAlgorithmActions()
      Store the result image in the script runner's image table now that the action execution is finished.
      Overrides:
      doPostAlgorithmActions in class JDialogScriptableBase
    • setGUIFromParams

      protected void setGUIFromParams()
      Set the dialog GUI using the script parameters while running this algorithm as part of a script.
      Specified by:
      setGUIFromParams in class JDialogScriptableBase
    • storeParamsFromGUI

      protected void storeParamsFromGUI() throws ParserException
      Record the parameters just used to run this algorithm in a script.
      Specified by:
      storeParamsFromGUI in class JDialogScriptableBase
      Throws:
      ParserException - If there is a problem creating/recording the new parameters.
    • buildBlurringPanel

      private JPanel buildBlurringPanel()
      part of the algorithm rests on blurring the original image.

      This is the same as using as blurring filter; so, this panel is a modified JDialogFrequencyFilter, permitting only a Gaussian low-pass, so only a top-end frequency input is created.

      The panel is returned to the caller.

      Returns:
      The blurring parameter panel.
      See Also:
    • buildOkayCancelPanel

      private JPanel buildOkayCancelPanel()
      creates the planel which contains the OKAY and Cancel buttons. sets their sizes, colours and listeners.
      Returns:
      DOCUMENT ME!
    • buildOptionsPanel

      private JPanel buildOptionsPanel()
      part of the algorithm rests on finding the original image minus an estimation of the local mean. So the input panel to set variables related to finding an unsharp mask image is created here.

      Part of the algorithm rests on blurring the original image. So the input panel to set the variables related to blurring the image is created here.

      A colour image may have any of its three colour channels filtered, so a colour-selection panel is created. A colour panel will be generated even for a monochrome image, the colour panel will be disabled.

      Returns:
      A panel containing all the other algorithm option panels.
    • buildUnsharpPanel

      private JPanel buildUnsharpPanel()
      part of the algorithm rests on finding the original image minus an estimation of the local mean.

      This is the same as using as unsharp-mask filter; so, this panel is a recreation of the inputs made in the JDialogUnsharpMask.

      The panel is returned to the caller.

      Returns:
      The unsharp mask parameter panel.
      See Also:
    • checkBlurring

      private boolean checkBlurring()
      check the variables of the unsharping-mask panel as they are translated from dialog inputs (ie., JTextFields) to more usable, native types.

      The panel displays the appropriate error when there is an input violation.

      Returns:
      true when the variables were copied correctly; false when there is an error in an input;
    • checkText

      private float checkText(JTextField jtf, float a, float b)
      verify that the numeric value of the text of the submitted JTextField is between a and b.
      Parameters:
      jtf - The text field to check.
      a - The minimum allowable value for the text field.
      b - The maximum allowable value for the text field.
      Returns:
      The value contained within the text field.
      Throws:
      NullPointerException - if jtf is empty.
      IllegalArgumentException - when the String is either not translatable to a float (ie., when Float.parseFloat(jtf.getText()) throws a ClassCastException), or when the number is out-of-bounds. Note: a JTextField properly implementing makeNumericsOnly(JTextField) should always translate into a float in the example above.
      See Also:
    • checkText

      private double checkText(JTextField jtf, double a, double b)
      verify that the numeric value of the text of the submitted JTextField is between a and b.
      Parameters:
      jtf - The text field to check.
      a - The minimum allowable value for the text field.
      b - The maximum allowable value for the text field.
      Returns:
      The value contained within the text field.
      Throws:
      NullPointerException - if jtf is empty.
      IllegalArgumentException - when the String is either not translatable to a float (ie., when Float.parseFloat(jtf.getText()) throws a ClassCastException), or when the number is out-of-bounds. Note: a JTextField properly implementing makeNumericsOnly(JTextField) should always translate into a float in the example above.
      See Also:
    • checkUnsharping

      private boolean checkUnsharping()
      check the variables of the unsharping-mask panel as they are translated from dialog inputs (ie., JTextFields) to more usable, native types.

      The panel displays the appropriate error when there is an input violation.

      Returns:
      true when the variables were copied correctly; false when there is an error in an input;
    • createEntryField

      private JTextField createEntryField(String presetText)
      Builds a new JTextField, with the given String, sets its font (to MipavUtil.font12), sets the foreground colour (to Color.black), sets column width to 7, then returns the newly made JTextField.
      Parameters:
      presetText - the String to have the JTextField display.
      Returns:
      a black-text, font12'd, JTextField displaying presetText.
    • setVariables

      private boolean setVariables()
      Use the GUI results to set up the variables needed to run the algorithm.
      Returns:
      true if parameters set successfully, false otherwise.