# mmdruler
Detect defects in a ruler.

## Description

The input image is a gray-scale image of a ruler, that has a number touching a tick mark. This number and mark are detected based on morphological and connected filtering.

## Demo Script

### Reading

The gray-scale image of the ruler is read.

    >>> a = mmreadgray('mm3.tif');

    >>> mmshow(a);

a |

### Segmentation

The close top-hat operator followed by a thresholding is applied.

    >>> b = mmthreshad( mmcloseth(a,mmsebox(5)),40);

    Warning: Converting input image from int32 to uint8.

    >>> mmshow(b);

b |

### Size filtering

The vertical lines longer than 50 pixels are detected.

    >>> c = mmopen(b,mmseline(50,90));

    >>> mmshow(c);

c |

### Ruler tick marks filtering

It closes ruler tick marks gaps.

    >>> d =mmclose(c,mmseline(15));

    >>> mmshow(d);

d |

### Ruler tick marks connection

It detects all objects connected to the ruler tick markers.

    >>> e = mminfrec(d,b);

    >>> mmshow(e);

e |

### Ruler tick mark vertical connection

It detects all objects vertically connected to the ruler tick mark. Note that the 3x1 rectangle is used as structuring element in the vertical reconstruction.

    >>> f = mminfrec(d,b,mmseline(3,90));

    >>> mmshow(f);

f |

### Non ruler tick mark vertical connection

The residues obtained from the previous image.

    >>> g = mmsubm(e,f);

    >>> mmshow(g);

g |

### Ruler tick marks detection

It uses an opening by an elementary cross structuring element to eliminate the artifacts.

    >>> h = mmopen(g);

    >>> mmshow(h);

h |

### Objects detection

It detects the objects connected to ruler tick marks. A reconstruction from the ruler marks detected is applied.

    >>> i = mminfrec(h, b);

    >>> mmshow(i);

i |

### Final presentation

Overlay the detected defect over the original image

    >>> mmshow(a,i);

a,i |

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