Class JDialogLocalNormalization

  • All Implemented Interfaces:
    AlgorithmInterface, ScriptableActionInterface, DialogDefaultsInterface, java.awt.event.ActionListener, java.awt.event.FocusListener, java.awt.event.ItemListener, java.awt.event.WindowListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.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:
    JDialogUnsharpMask, JDialogFrequencyFilter, AlgorithmLocalNormalization, Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class javax.swing.JDialog

        javax.swing.JDialog.AccessibleJDialog
      • Nested classes/interfaces inherited from class java.awt.Dialog

        java.awt.Dialog.AccessibleAWTDialog, java.awt.Dialog.ModalExclusionType, java.awt.Dialog.ModalityType
      • Nested classes/interfaces inherited from class java.awt.Window

        java.awt.Window.AccessibleAWTWindow, java.awt.Window.Type
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Constructor Summary

      Constructors 
      Constructor Description
      JDialogLocalNormalization()
      Empty constructor needed for dynamic instantiation (used during scripting).
      JDialogLocalNormalization​(javax.swing.JFrame owner, ModelImage mi)
      Creates an modal extension of JDialogBase, using the title, "Local Normalization".
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void actionPerformed​(java.awt.event.ActionEvent ae)
      a button has been clicked!
      void algorithmPerformed​(AlgorithmBase algorithm)
      This method is required if the AlgorithmPerformed interface is implemented.
      private javax.swing.JPanel buildBlurringPanel()
      part of the algorithm rests on blurring the original image.
      protected javax.swing.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_FLOAT
      private javax.swing.JPanel buildOkayCancelPanel()
      creates the planel which contains the OKAY and Cancel buttons. sets their sizes, colours and listeners.
      private javax.swing.JPanel buildOptionsPanel()
      part of the algorithm rests on finding the original image minus an estimation of the local mean.
      private javax.swing.JPanel buildUnsharpPanel()
      part of the algorithm rests on finding the original image minus an estimation of the local mean.
      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.
      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.
      private double checkText​(javax.swing.JTextField jtf, double a, double b)
      verify that the numeric value of the text of the submitted JTextField is between a and b.
      private float checkText​(javax.swing.JTextField jtf, float a, float b)
      verify that the numeric value of the text of the submitted JTextField is between a and b.
      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.
      private javax.swing.JTextField createEntryField​(java.lang.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.
      protected void doPostAlgorithmActions()
      Store the result image in the script runner's image table now that the action execution is finished.
      ModelImage getResultImage()
      Accessor that returns the image.
      void setBlurringDiameter​(int dia)
      Accessor that sets the blurring diameter value.
      void setBlurringFreq​(float freq)
      Accessor that sets the blurring frequency value.
      void setDisplayLocNew()
      Accessor that sets the display loc variable to new, so that a new image is created once the algorithm completes.
      void setDisplayLocReplace()
      Accessor that sets the display loc variable to replace, so the current image is replaced once the algorithm completes.
      protected void setGUIFromParams()
      Set the dialog GUI using the script parameters while running this algorithm as part of a script.
      void setUnsharp​(float[] unsharp)
      Accessor that sets the unsharp array.
      void setUnsharp​(float unsharpX, float unsharpY)
      Accessor that sets the unsharp array values.
      void setUnsharpWeight​(double weight)
      Accessor that sets the unsharp weight value.
      private boolean setVariables()
      Use the GUI results to set up the variables needed to run the algorithm.
      protected void storeParamsFromGUI()
      Record the parameters just used to run this algorithm in a script.
      • Methods inherited from class javax.swing.JDialog

        addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
      • Methods inherited from class java.awt.Dialog

        addNotify, getModalityType, getTitle, hide, isModal, isResizable, isUndecorated, setBackground, setModal, setModalityType, setOpacity, setResizable, setShape, setTitle, setUndecorated, show, toBack
      • Methods inherited from class java.awt.Window

        addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, toFront
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • serialVersionUID

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

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

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

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

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

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

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

        public static final int BLUR_MIN
        minimum value for blurring, at 1.0.
        See Also:
        Constant Field Values
      • blurringDiameter

        private int blurringDiameter
        DOCUMENT ME!
      • blurringDiameterText

        private javax.swing.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 javax.swing.JTextField blurringFreqText
        DOCUMENT ME!
      • displayLoc

        private int displayLoc
        DOCUMENT ME!
      • errorComponent

        private javax.swing.JTextField errorComponent
        DOCUMENT ME!
      • resultImage

        private ModelImage resultImage
        DOCUMENT ME!
      • sourceImage

        private ModelImage sourceImage
        DOCUMENT ME!
      • titles

        private java.lang.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 javax.swing.JTextField unsharpWeightText
        DOCUMENT ME!
      • unsharpXtext

        private javax.swing.JTextField unsharpXtext
        DOCUMENT ME!
      • unsharpYtext

        private javax.swing.JTextField unsharpYtext
        DOCUMENT ME!
      • unsharpZtext

        private javax.swing.JTextField unsharpZtext
        DOCUMENT ME!
    • Constructor Detail

      • JDialogLocalNormalization

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

        public JDialogLocalNormalization​(javax.swing.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 Detail

      • actionPerformed

        public void actionPerformed​(java.awt.event.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 java.awt.event.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 javax.swing.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_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
      • buildBlurringPanel

        private javax.swing.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:
        JDialogUnsharpMask
      • buildOkayCancelPanel

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

        private javax.swing.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 javax.swing.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:
        JDialogUnsharpMask
      • 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​(javax.swing.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:
        java.lang.NullPointerException - if jtf is empty.
        java.lang.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:
        MipavUtil.makeNumericsOnly(JTextField, boolean), NullPointerException, IllegalArgumentException
      • checkText

        private double checkText​(javax.swing.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:
        java.lang.NullPointerException - if jtf is empty.
        java.lang.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:
        MipavUtil.makeNumericsOnly(JTextField, boolean), NullPointerException, IllegalArgumentException
      • 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 javax.swing.JTextField createEntryField​(java.lang.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.