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.
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 |
See Also: javax.media.jai.KernelJAI since: JAI 1.1 |