int im_dilate(in, out, m)
IMAGE *in, *out;
INTMASK *m;
int im_erode(in, out, m)
IMAGE *in, *out;
INTMASK *m;
int im_dilate_raw(in, out, m)
IMAGE *in, *out;
INTMASK *m;
int im_erode_raw(in, out, m)
IMAGE *in, *out;
INTMASK *m;
Mask coefficients can be either 0 (for object) or 255 (for background) or 128 (for do not care).
The mask should have odd length sides and the origin of the mask is at location (m->xsize/2,m->ysize/2) integer division. All algorithms have been based on the book "Fundamentals of Digital Image Processing" by A. Jain, pp 384-388, Prentice-Hall, 1989. Essentially, im_dilate(3) sets pixels in the output if *any* part of the mask matches, whereas im_erode(3) sets pixels only if *all* of the mask matches.
im_dilate(3) dilates the image pointed by in, according to the mask pointed by m and writes the result in the location pointed by the IMAGE descriptor out. The output image is the same size as the input, in the manner of im_conv(3).
im_dilate_raw(3) works as im_dilate(3), but does not expand the input.
im_erode(3) erodes the image pointed by in, according to the mask pointed by m and writes the result in the location pointed by the IMAGE descriptor out. Again, the output image is forced to have the same size as the input.
im_erode_raw(3) works as im_erode(3), but does not expand the input.
See the boolean operations im_andimage(3), im_orimage(3) and im_eorimage(3) for analogues of the usual set difference and set union operations.