javax.media.jai.operator
Class ErodeDescriptor

java.lang.Object
  extended byjavax.media.jai.OperationDescriptorImpl
      extended byjavax.media.jai.operator.ErodeDescriptor
All Implemented Interfaces:
OperationDescriptor, RegistryElementDescriptor, Serializable

public class ErodeDescriptor
extends OperationDescriptorImpl

An OperationDescriptor describing the "Erode" operation.

Gray Scale Erosion is a spatial operation that computes each output sample by subtracting elements of a kernel from the samples surrounding a particular source sample. The mathematical formulation for erosion operation is:

For a kernel K with a key position (xKey, yKey), the erosion of image I at (x,y) is given by:

     max{ f:  f + K(xKey+i, yKey+j) <= I(x+i,y+j): all (i,j)}

      "all" possible (i,j) means that both I(x+i,y+j) and K(xKey+i, yKey+j)
      are in bounds. Otherwise, the value is set to 0.
      "f" represents all possible floats satisfying the restriction.

 

Intuitively, the kernel is like an unbrella and the key point is the handle. At every point, you try to push the umbrella up as high as possible but still underneath the image surface. The final height of the handle is the value after erosion. Thus if you want the image to erode from the upper right to bottom left, the following would do.

00X
0X0
X00

Note that even if every entry of a kernel is zero, the erosion changes the image. Different key positions will also lead to different erosion results for such zero kernels.

Pseudo code for the erosion operation is as follows. Assuming the kernel K is of size M rows x N cols and the key position is (xKey, yKey).

 
 // erosion
 for every dst pixel location (x,y){
    tmp = infinity;
    for (i = -xKey; i < M - xKey; i++){
       for (j = -yKey; j < N - yKey; j++){
          if((x+i, y+j) are in bounds of src){
             tmp = min{tmp, src[x + i][y + j] - K[xKey + i][yKey + j]};
          }
       }
    }
    dst[x][y] = tmp;
    if (dst[x][y] == infinity)
        dst[x][y] = 0;
 }
 

The kernel cannot be bigger in any dimension than the image data.

Binary Image Erosion requires the kernel to be binary, that is, to have values 0 and 1 for each kernel entry. Intuitively, binary erosion slides the kernel key position and place it at every point (x,y) in the src image. The dst value at this position is set to 1 if the entire kernel lies within the image bounds and the src image value is 1 wherever the corresponding kernel value is 1." Otherwise, the value after erosion at (x,y) is set to 0. Erosion usually shrinks images, but it can fill holes with kernels like

 [1 0 1] 
and the key position at the center.

Pseudo code for the binary erosion operation is as follows.

 // erosion
 for every dst pixel location (x,y){
    dst[x][y] = 1;
    for (i = -xKey; i < M - xKey; i++){
       for (j = -yKey; j < N - yKey; j++){
         if((x+i,y+j) is out of bounds of src ||
             src(x+i, y+j)==0 && Key(xKey+i, yKey+j)==1){
            dst[x][y] = 0; break;
          }
       }
    }
 }

 The following can be used as references for the underlying
 connection between these two algorithms.

 

Reference: An Introduction to Nonlinear Image Processing, by Edward R. Bougherty and Jaakko Astola, Spie Optical Engineering Press, 1994. It should be noted that this operation automatically adds a value of Boolean.TRUE for the JAI.KEY_REPLACE_INDEX_COLOR_MODEL to the given configuration so that the operation is performed on the pixel values instead of being performed on the indices into the color map if the source(s) have an IndexColorModel. This addition will take place only if a value for the JAI.KEY_REPLACE_INDEX_COLOR_MODEL has not already been provided by the user. Note that the configuration Map is cloned before the new hint is added to it. The operation can be smart about the value of the JAI.KEY_REPLACE_INDEX_COLOR_MODEL RenderingHints, i.e. while the default value for the JAI.KEY_REPLACE_INDEX_COLOR_MODEL is Boolean.TRUE, in some cases the operator could set the default.

Resource List
Name Value
GlobalName Erode
LocalName Erode
Vendor com.sun.media.jai
Description Performs kernel based Erode on an image.
DocURL http://java.sun.com/products/java-media/jai/forD evelopers/jai-apidocs/javax/media/jai/operator/ErodeDescriptor.html
Version 1.1
arg0Desc The erode kernel.

Parameter List
Name Class Type Default Value
kernel javax.media.jai.KernelJAI NO_PARAMETER_DEFAULT

Since:
JAI 1.1
See Also:
KernelJAI, Serialized Form

Field Summary
 
Fields inherited from class javax.media.jai.OperationDescriptorImpl
sourceNames, supportedModes
 
Fields inherited from interface javax.media.jai.OperationDescriptor
NO_PARAMETER_DEFAULT
 
Constructor Summary
ErodeDescriptor()
          Constructor.
 
Method Summary
static RenderedOp create(RenderedImage source0, KernelJAI kernel, RenderingHints hints)
          Performs binary kernel based Erode operation on the image.
 PropertyGenerator[] getPropertyGenerators()
          Returns an array of PropertyGenerators implementing property inheritance for the "Erode" operation.
 
Methods inherited from class javax.media.jai.OperationDescriptorImpl
arePropertiesSupported, getDefaultSourceClass, getDestClass, getDestClass, getInvalidRegion, getName, getNumParameters, getNumSources, getParamClasses, getParamDefaults, getParamDefaultValue, getParameterListDescriptor, getParamMaxValue, getParamMinValue, getParamNames, getPropertyGenerators, getRenderableDestClass, getRenderableSourceClasses, getResourceBundle, getResources, getSourceClasses, getSourceClasses, getSourceNames, getSupportedModes, isImmediate, isModeSupported, isRenderableSupported, isRenderedSupported, makeDefaultSourceClassList, validateArguments, validateArguments, validateParameters, validateParameters, validateRenderableArguments, validateRenderableSources, validateSources, validateSources
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ErodeDescriptor

public ErodeDescriptor()
Constructor.

Method Detail

getPropertyGenerators

public PropertyGenerator[] getPropertyGenerators()
Returns an array of PropertyGenerators implementing property inheritance for the "Erode" operation.

Specified by:
getPropertyGenerators in interface OperationDescriptor
Overrides:
getPropertyGenerators in class OperationDescriptorImpl
Returns:
An array of property generators.
See Also:
OperationDescriptorImpl.getPropertyGenerators(java.lang.String)

create

public static RenderedOp create(RenderedImage source0,
                                KernelJAI kernel,
                                RenderingHints hints)
Performs binary kernel based Erode operation on the image.

Creates a ParameterBlockJAI from all supplied arguments except hints and invokes JAI.create(String,ParameterBlock,RenderingHints).

Parameters:
source0 - RenderedImage source 0.
kernel - The binary convolution kernel.
hints - The RenderingHints to use. May be null.
Returns:
The RenderedOp destination.
Throws:
IllegalArgumentException - if source0 is null.
IllegalArgumentException - if kernel is null.
See Also:
JAI, ParameterBlockJAI, RenderedOp