# mmdil
Dilate an image by a structuring element.

## Synopsis

y = mmdil( f, b = None )

Implemented in Python.

### Input

f | Image Gray-scale (uint8 or uint16) or binary image.
b | Structuring Element Default: `None` (3x3 elementary cross)

### Output

y | Image

## Description

mmdil performs the dilation of image `f` by the structuring element `b`. Dilation is a neighbourhood operator that compares locally `b` with `f`, according to an intersection rule. Since Dilation is a fundamental operator to the construction of all other morphological operators, it is also called an elementary operator of Mathematical Morphology. When `f` is a gray-scale image, `b` may be a flat or non-flat structuring element.

## Examples

Numerical examples

    >>> f=mmbinary([
       [0, 0, 0, 0, 0, 0, 1],
       [0, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 0, 0]])

    >>> b=mmbinary([1, 1, 0])

    >>> mmdil(f,b)

    array([[0, 0, 0, 0, 0, 1, 1],
           [1, 1, 0, 0, 0, 0, 0],
           [0, 0, 0, 1, 1, 0, 0]],'1')

    >>> f=uint8([
       [ 0,   1,  2, 50,  4,  5],
       [ 2,   3,  4,  0,  0,  0],
       [12, 255, 14, 15, 16, 17]])

    >>> mmdil(f,b)

    array([[  1,   2,  50,  50,   5,   5],
           [  3,   4,   4,   0,   0,   0],
           [255, 255,  15,  16,  17,  17]],'b')

Binary image:

    >>> f=mmbinary(mmreadgray('blob.tif'))

    >>> bimg=mmbinary(mmreadgray('blob1.tif'))

    >>> b=mmimg2se(bimg)

    >>> mmshow(f)

    >>> mmshow(mmdil(f,b))

    >>> mmshow(mmdil(f,b),mmgradm(f))

f | mmdil(f,b) |

mmdil(f,b),mmgradm(f) |

Gray-scale image:

    >>> f=mmreadgray('pcb_gray.tif')

    >>> b=mmsedisk(5)

    >>> mmshow(f)

    >>> mmshow(mmdil(f,b))

f | mmdil(f,b) |

## Equation

Flat structuring element:
Non-flat structuring element:
Where

## Source Code

    def mmdil(f, b=None):
        from Numeric import maximum, NewAxis, ones
        if b is None: b = mmsecross()
        if len(f.shape) == 1: f = f[NewAxis,:]
        h,w = f.shape
        x,v = mmmat2set(b)
        if len(x)==0:
            y = (ones((h,w)) * mmlimits(f)[0]).astype(f.typecode())
        else:
            if mmisbinary(v):
                v = mmintersec(mmgray(v,'int32'),0)
            mh,mw = max(abs(x)[:,0]),max(abs(x)[:,1])
            y = (ones((h+2*mh,w+2*mw)) * mmlimits(f)[0]).astype(f.typecode())
            for i in range(x.shape[0]):
                if v[i] > -2147483647:
                    y[mh+x[i,0]:mh+x[i,0]+h, mw+x[i,1]:mw+x[i,1]+w] = maximum(
                        y[mh+x[i,0]:mh+x[i,0]+h, mw+x[i,1]:mw+x[i,1]+w], mmadd4dil(f,v[i]))
            y = y[mh:mh+h, mw:mw+w]
        return y

## See also

mmfreedom | Control automatic data type conversion.
mmcdil | Dilate an image conditionally.
mmero | Erode an image by a structuring element.
mmsebox | Create a box structuring element.
mmsecross | Diamond structuring element and elementary 3x3 cross.
mmimg2se | Create a structuring element from a pair of images.
mmsesum | N-1 iterative Minkowski additions

## See also

mmfreedom | Control automatic data type conversion.
mmsedil | Dilate one structuring element by another
mmcdil | Dilate an image conditionally.
mmero | Erode an image by a structuring element.
mmsecross | Diamond structuring element and elementary 3x3 cross.
mmimg2se | Create a structuring element from a pair of images.
mmsesum | N-1 iterative Minkowski additions

[`mmcero`] [Up] [`mmero`] |
Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center.