ImageFilterDemo

From RoboJackets Wiki
Revision as of 18:51, 23 October 2005 by AndyB (talk | contribs)
Jump to navigation Jump to search
Screenshot

ImageFilterDemo is a program that allows rapid prototyping of image filters in Java. This program was written by David Foster.

David, It seems that Tucker Blach has his CS4361 class write blob detection software every year, and he provides a "An infrastructure for doing video processing of AVI files. Written in C." The manual is available here, and the source code is available here along with a sample .avi. Here is his software download page. Seems to be similar to the ImageFilterDemo only written in C. --AndyB 18:51, 23 Oct 2005 (EDT)

Program & Source Code

  • v1.0
    • Original version
  • v1.0.1
    • Added PixelBufferFilter2, a new type of filter.
    • Added contour extraction filters for the horizontal, vertical, and plus (horizontal+vertical) directions.
  • v1.0.2
    • Addressed issue with loading certain images on Windows systems.
      • Specifically, java.awt.Toolkit.prepareImage(Image, int, int, ImageObserver) on Windows does not notify the specified ImageObserver when images are finished loading under certain conditions.
      • Credit goes to Andy for discovering this bug.
  • v1.0.3
    • "Select..." button for selecting files now remembers the last file that was selected (even across different invocations of the program).
    • Added support for dragging & dropping files into the "file well".
  • v1.0.4
    • Added ability to save filtered images to disk.
  • v1.1
    • Added support for filter parameters that are manipulatable in the GUI.
    • Cleaned up and updated the README file.
  • v1.1.1
    • Fixed bug: The GUI editors for the filter parameters now check to make sure that the inputted value for a parameter is within the parameter's minimum and maximum values.
  • v1.2
    • Made plugin architecture easier to use.
      • To add a plugin to the GUI now, just add its .class file to the plugins folder.
      • This can be done automatically if you write your plugin inside the srcplugins folder and then build it using the make pluginsWithDist command.
    • Updated README file to explain the new way of adding plugins to the GUI.
  • v1.2.1
    • Minor corrections make to the Makefile.
    • Added color conversion routines (between ARGB and AHSB) to the Pixels utility class.
    • Added several new filters:
      • RGB Channel Filters
        1. RedChannelFilter
        2. GreenChannelFilter
        3. BlueChannelFilter
      • HSB Channel Filters
        1. HueChannelFilter
        2. SaturationChannelFilter
        3. BrightnessChannelFilter
      • BarrelHilighterFilter (experimental) - hilights areas of images where the difference (Red - Green) = Orange is large
  • v1.2.2
    • Added BufferedImageFilter2, a new type of filter.
    • Added PixelBufferToBufferedImageFilter, a new type of filter.
  • v1.2.3
    • Added FloatFilterParam, a new type of filter parameter.
    • Added DoubleFilterParam, a new type of filter parameter.
    • Added a Threshold parameter to BarrelHilighterFilter.
    • Added BarrelBlobFinder, an experimental new filter that locates and draws bounding boxes around barrels.
  • v1.2.4
    • Addressed issue with loading certain images on Mac OS X:
      • Specifically java.awt.image.ImageProducer.startProduction(ImageConsumer) on Mac OS X incorrectly invokes imageComplete(...) on the passed ImageConsumer.
        • When a valid input image is loaded, imageComplete(...) is (correctly) invoked with the status STATICIMAGEDONE. But at the time of this invocation, attempts to query the loaded image's width/height fail (incorrectly).
        • Also, after this first invocation of imageComplete(...), it is invoked yet again, but this time (incorrectly) with the status IMAGEERROR. This is a nonsensical status value, given that the image was already reported as being fully loaded.
      • Due to the particular way in which ImageFilterDemo checked whether the image was loaded successfully, this strange pattern of invocation resulted in the message "Unable to load image!" being briefly displayed before the input image was rendered.
      • To address this issue, the image loading code was rewritten to use the Image I/O API instead of the AWT Image API.

Future Versions (Planned)

  • v2.0
    • New input source: Image sequences
    • New input source: Movies (.mov, or other formats that QuickTime can handle)
    • Added support for temporal filters. These are filters that are designed for processing several images in sequence.

Feature Requests

  • Ability to apply multiple filters (in a specific order) --Andy
    • Workaround:
      1. Load the original image.
      2. Select the first filter.
      3. Save the filtered image.
      4. Load the filtered image.
      5. Select the next filter.
      6. Repeat until no more filters.
  • Ability to save config profiles for each filter. --Andy
    • ...to file, to preferences, or to both? --David