<html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"> <title>mmdcalc</title> <link href="../tbxdok.css" rel="stylesheet"> </head> <body> <table class="topNav"> <tr> <td class="index"> [<a href="../mmdemos/mmdbrain.html"><tt>mmdbrain</tt></a>] [<a href="index.html">Up</a>] [<a href="../mmdemos/mmdcells.html"><tt>mmdcells</tt></a>] </td> <td class="title">Demonstrations</td> </tr> </table> <h1>mmdcalc <br> <span class="subtitle">Extract the keys of a calculator. </span> </h1> <div class="descr"> <H2>Description</H2> <div class="H2"> <p> This procedure detects the keys in a gray-scale image of a calculator. The approach used is watershed Beucher's paradigm. The internal markers are the numbers on the keys and the external markers are obtained by the skiz of the keys background. </p> </div> </div> <div class="script"> <H2>Demo Script</H2> <div class="H2"> <div class="slide"> <H3>Reading</H3> <div class="H3"> <p> <p> The gray-scale image of the calculator is read. </p> <div class="example"> <div class="listing"> <pre class="user">>>> a = mmreadgray('keyb.tif');</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(a);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_001.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_001.jpg">a</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Gradient image</H3> <div class="H3"> <p> <p> The image edges are enhanced by the gradient operator. </p> <div class="example"> <div class="listing"> <pre class="user">>>> b = mmgradm(a, mmsebox());</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(b);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_002.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_002.jpg">b</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Inside marker: Opening top-hat</H3> <div class="H3"> <p> <p> The opening top-hat procedure enhances the small objects relatively to its background. In the calculator image, the digits are enhanced. </p> <div class="example"> <div class="listing"> <pre class="user">>>> c = mmopenth(a,mmsebox(5));</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(c);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_003.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_003.jpg">c</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Inside marker: Thresholding </H3> <div class="H3"> <p> <p> The threshold operator is used to separated the enhanced objects. This procedure is quite robust, since the background was reduced to very low levels with the opening top-hat. </p> <div class="example"> <div class="listing"> <pre class="user">>>> d = mmthreshad(c, uint8(150));</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(d);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_004.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_004.jpg">d</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Inside marker: Final</H3> <div class="H3"> <p> <p> In order to have just one object (i.e., connected component) inside each key, a dilation is applied. </p> <div class="example"> <div class="listing"> <pre class="user">>>> e = mmdil(d, mmsebox(3));</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(e);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_005.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_005.jpg">e</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Outside markers</H3> <div class="H3"> <p> <p> The outside markers are built by taking the watershed (skiz) of the complement of internal markers image. </p> <div class="example"> <div class="listing"> <pre class="user">>>> f = mmwatershed(mmneg(e));</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(f);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_006.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_006.jpg">f</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Both markers</H3> <div class="H3"> <p> <p> The markers used are the union of the internal and external markers detected. They are displayed as overlay on the gradient image. </p> <div class="example"> <div class="listing"> <pre class="user">>>> g = mmunion(e,f);</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(b,g);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_007.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_007.jpg">b,g</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Constrained watershed</H3> <div class="H3"> <p> <p> The calculator keys are extracted by applying the watershed operator on the gradient image, constrained by the markers detected. </p> <div class="example"> <div class="listing"> <pre class="user">>>> h = mmcwatershed(b,g,mmsebox());</pre> <pre class="computer"></pre> <pre class="user">>>> mmshow(h);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_008.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_008.jpg">h</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> <div class="slide"> <H3>Show the result</H3> <div class="H3"> <p> <p> Superposition of the detected contours on the input image. </p> <div class="example"> <div class="listing"> <pre class="user">>>> mmshow(a,h);</pre> <pre class="computer"></pre> </div> <table class="images"> <tbody align="center"> <tr class="image" valign="bottom"> <td><img width="295" src="../images/img_mmdcalc_009.jpg"></td> <td class="spare"></td> </tr> <tr class="title" valign="baseline"> <td><a href="../images/img_mmdcalc_009.jpg">a,h</a></td> <td class="spare"></td> </tr> </tbody> </table> </div> </p> </div> </div> </div> </div> <center> <table class="botNav"> <tr> <td class="index"> [<a href="../mmdemos/mmdbrain.html"><tt>mmdbrain</tt></a>] [<a href="index.html">Up</a>] [<a href="../mmdemos/mmdcells.html"><tt>mmdcells</tt></a>] </td> <td rowspan="2" class="xhtml"><a href="http://www.python.org"><img width="55" alt="Python" height="22" src="../PythonPoweredSmall.gif"></a></td> </tr> <tr> <td class="copyright">Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center.</td> </tr> </table> </center> </body> </html>