Difference between revisions of "ImageFilterDemo"
Jump to navigation
Jump to search
(release of version 1.4.1) |
(→Program & Source Code: release of v1.5) |
||
Line 102: | Line 102: | ||
** Extended the '''Pixels''' class with methods for converting to/from grayscale pixels. | ** Extended the '''Pixels''' class with methods for converting to/from grayscale pixels. | ||
** Added '''Histograms''', a utility class with methods for creating and analyzing normal histograms as well as probability histograms. | ** Added '''Histograms''', a utility class with methods for creating and analyzing normal histograms as well as probability histograms. | ||
+ | * v1.5 - ''Will be posted soon!'' | ||
+ | ** Added a "scaling factor" slider to the ImageFilterDemo UI. Scaling images to smaller sizes improves performance in general. | ||
+ | ** Added some new filters | ||
+ | *** Added '''WhiteHilighterFilter''', a new filter that hilights white pixels (in a binary fashion) | ||
+ | **** The method used to identify white pixels is the same as the one that '''BarrelBlobFinder''' uses to find white stripes on barrels. | ||
+ | *** Added '''BarrelBlobDeleter''', a new filter that fills the boundaries of identified barrels with the background color of the image. | ||
+ | **** The parameters of this filter precisely match those of '''BarrelBlobFinder'''. | ||
+ | *** Added contour extraction filters for the diagonal, antidiagonal, and star (horizontal + vertical + diagonal + antidiagonal) directions. | ||
+ | **** DiagonalContourExtractionFilter | ||
+ | **** AntidiagonalContourExtractionFilter | ||
+ | **** StarContourExtractionFilter | ||
+ | *** Added '''GrayscaleFilter''', a new filter that converts images to grayscale (and optionally thresholds that grayscale image). | ||
+ | *** Added '''LinearHoughTransform''', an experimental new filter that detects lines of white pixels in a grayscale image. | ||
+ | **** This implementation of the Hough transform is still rather rudimentary - the format of the output is difficult to interpret without detailed knowledge of the implementation. | ||
+ | **** It is quite likely that I will release another implementation of the Hough transform whose output is easier to interpret. | ||
+ | **** I might mention that this filter has difficulty detecting lines that are almost but not exactly diagonal. | ||
+ | ***** The directional resolution of the implementation is low for lines approaching a diagonal (or antidiagonal) direction. | ||
+ | *** Added '''LineGenerator''', a new filter that displays a line with a specified axis, slope, and intercept. | ||
+ | **** The lines that this filter can generate are precisely the ones that the current implementation of '''LinearHoughTransform''' can search for. | ||
+ | ** Enhanced some existing filters | ||
+ | *** Made the list of barrel-boundaries identified by '''BarrelBlobFinder''' accessible to external code via the <tt>getBarrelBoundList()</tt> function. | ||
+ | ** Enhanced the '''Pixels''' utility class | ||
+ | *** Added the <tt>grayToColor</tt> and <tt>graysToColors</tt> methods. These methods are useful for converting levels of gray into <tt>java.awt.Color</tt>s. | ||
+ | *** Added the <tt>grayToARGB</tt> method. | ||
+ | *** Added <tt>WHITE_ARGB_PIXEL</tt> and <tt>BLACK_ARGB_PIXEL</tt> constants. | ||
== Future Versions (Planned) == | == Future Versions (Planned) == |
Revision as of 13:31, 16 November 2005
ImageFilterDemo is a program that allows rapid prototyping of image filters in Java. This program was written by David Foster.
It appears that Tucker Blach has written a similar program, but in C instead of Java. See the talk page.
The BarrelBlobFinder filter, bundled with ImageFilterDemo v1.2.3 and later, is an implementation of one of the barrel detection algorithms.
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.
- Addressed issue with loading certain images on Windows systems.
- 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.
- Made plugin architecture easier to use.
- 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
- RedChannelFilter
- GreenChannelFilter
- BlueChannelFilter
- HSB Channel Filters
- HueChannelFilter
- SaturationChannelFilter
- BrightnessChannelFilter
- BarrelHilighterFilter (experimental) - hilights areas of images where the difference (Red - Green) = Orange is large
- RGB Channel Filters
- 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.
- Specifically java.awt.image.ImageProducer.startProduction(ImageConsumer) on Mac OS X incorrectly invokes imageComplete(...) on the passed ImageConsumer.
- Addressed issue with loading certain images on Mac OS X:
- v1.2.5
- Enhanced BarrelBlobFinder to determine barrel widths a lot more accurately.
- Specifically, BarrelBlobFinder can now deal with barrels whose bottoms appear curved (which is common) more robustly.
- Enhanced BarrelBlobFinder to determine barrel widths a lot more accurately.
- v1.3
- New input source: Image sequences
- Choose an input file from a folder of images.
- Click the "Play" button in the lower-left corner of the window.
- New input source: Image sequences
- v1.3.1
- Added GrayscaleLevelHistogram, a new filter that displays a histogram showing the frequencies of different levels of grays in the input image.
- Created to assist in evaluating adaptive thresholding algorithms.
- Added GrayscaleLevelHistogram, a new filter that displays a histogram showing the frequencies of different levels of grays in the input image.
- v1.3.2
- Added OtsuThresholdingAlgorithm, an implementation of the Otsu thresholding algorithm.
- Modified GrayscaleLevelHistogram to display the optimal threshold value for the output histogram, as calculated by the Otsu thresholding algorithm.
- v1.4
- Fixed a behavioral bug in ImageFilterDemo that caused the filter pipeline to be cleared continuously while image sequences were being played.
- Optimized the input pipeline for the internal classes PixelBufferToBufferedImageFilterAsBufferedImageFilter2, PixelBufferFilterAsBufferedImageFilter, and PixelBufferFilter2AsBufferedImageFilter (from 170-280 ms to 30-50 ms - 3.2 times faster), which implicitly improves the performance of all filters that implement PixelBufferToBufferedImageFilter, PixelBufferFilter, PixelBufferFilter2, or PixelFilter, including:
- BarrelBlobFilter
- BarrelHilighterFilter
- GrayscaleLevelHistogram (filter)
- HorizontalContourExtractionFilter, VerticalContourExtractionFilter
- PlusContourExtractionFilter (special case - speedup x 3, or 9.6 times faster)
- HorizontalFlipFilter
- RGBInversionFilter
- RedChannelFilter, GreenChannelFilter, BlueChannelFilter
- HueChannelFilter, SaturationChannelFilter, BrightnessChannelFilter
- Optimized the output pipeline for the internal classes PixelBufferFilterAsBufferedImageFilter and PixelBufferFilter2AsBufferedImageFilter (from 90-105 ms to 20-30 ms - 4 times faster), which implicitly improves the performance of all filters that implement PixelBufferFilter, PixelBufferFilter2, or PixelFilter, including:
- BarrelHilighterFilter
- HorizontalContourExtractionFilter, VerticalContourExtractionFilter
- PlusContourExtractionFilter
- HorizontalFlipFilter
- RGBInversionFilter
- RedChannelFilter, GreenChannelFilter, BlueChannelFilter
- HueChannelFilter, SaturationChannelFilter, BrightnessChannelFilter
- Added BufferedImages, a new utility class for performing certain operations on BufferedImages in a optimized fashion.
- Modified the GUI name of BarrelHilighterFilter to "Barrel Hilighter (Orange = Red-Green)".
- v1.4.1
- Extended the Pixels class with methods for converting to/from grayscale pixels.
- Added Histograms, a utility class with methods for creating and analyzing normal histograms as well as probability histograms.
- v1.5 - Will be posted soon!
- Added a "scaling factor" slider to the ImageFilterDemo UI. Scaling images to smaller sizes improves performance in general.
- Added some new filters
- Added WhiteHilighterFilter, a new filter that hilights white pixels (in a binary fashion)
- The method used to identify white pixels is the same as the one that BarrelBlobFinder uses to find white stripes on barrels.
- Added BarrelBlobDeleter, a new filter that fills the boundaries of identified barrels with the background color of the image.
- The parameters of this filter precisely match those of BarrelBlobFinder.
- Added contour extraction filters for the diagonal, antidiagonal, and star (horizontal + vertical + diagonal + antidiagonal) directions.
- DiagonalContourExtractionFilter
- AntidiagonalContourExtractionFilter
- StarContourExtractionFilter
- Added GrayscaleFilter, a new filter that converts images to grayscale (and optionally thresholds that grayscale image).
- Added LinearHoughTransform, an experimental new filter that detects lines of white pixels in a grayscale image.
- This implementation of the Hough transform is still rather rudimentary - the format of the output is difficult to interpret without detailed knowledge of the implementation.
- It is quite likely that I will release another implementation of the Hough transform whose output is easier to interpret.
- I might mention that this filter has difficulty detecting lines that are almost but not exactly diagonal.
- The directional resolution of the implementation is low for lines approaching a diagonal (or antidiagonal) direction.
- Added LineGenerator, a new filter that displays a line with a specified axis, slope, and intercept.
- The lines that this filter can generate are precisely the ones that the current implementation of LinearHoughTransform can search for.
- Added WhiteHilighterFilter, a new filter that hilights white pixels (in a binary fashion)
- Enhanced some existing filters
- Made the list of barrel-boundaries identified by BarrelBlobFinder accessible to external code via the getBarrelBoundList() function.
- Enhanced the Pixels utility class
- Added the grayToColor and graysToColors methods. These methods are useful for converting levels of gray into java.awt.Colors.
- Added the grayToARGB method.
- Added WHITE_ARGB_PIXEL and BLACK_ARGB_PIXEL constants.
Future Versions (Planned)
- v2.0
- 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 simultaneously (in a specific order) --Andy
- Workaround:
- Load the original image.
- Select the first filter.
- Save the filtered image.
- Load the filtered image.
- Select the next filter.
- Repeat until no more filters.
- Workaround:
- Ability to save config profiles for each filter. --Andy
- ...to file, to preferences, or to both? --David