Leptonica 1.68
C Image Processing Library

findpattern2.c

Go to the documentation of this file.
00001 /*====================================================================*
00002  -  Copyright (C) 2001 Leptonica.  All rights reserved.
00003  -  This software is distributed in the hope that it will be
00004  -  useful, but with NO WARRANTY OF ANY KIND.
00005  -  No author or distributor accepts responsibility to anyone for the
00006  -  consequences of using this software, or for whether it serves any
00007  -  particular purpose or works at all, unless he or she says so in
00008  -  writing.  Everyone is granted permission to copy, modify and
00009  -  redistribute this source code, for commercial or non-commercial
00010  -  purposes, with the following restrictions: (1) the origin of this
00011  -  source code must not be misrepresented; (2) modified versions must
00012  -  be plainly marked as such; and (3) this notice may not be removed
00013  -  or altered from any source or modified source distribution.
00014  *====================================================================*/
00015 
00016 /*
00017  * findpattern2.c
00018  *
00019  *    findpattern2
00020  *
00021  *    This is setup with input parameters to work on feyn.tif.
00022  *
00023  *    It uses pixGenerateSelRandom() to generate the sels.
00024  *
00025  *    (1) We extract a "c" bitmap, generate a hit-miss sel, and
00026  *    then produce several 4 bpp colormapped renditions,
00027  *    with the pattern either removed or highlighted.
00028  *
00029  *    (2) We do the same with the word "Caltech".
00030  */
00031 
00032 #include <stdio.h>
00033 #include <stdlib.h>
00034 #include "allheaders.h"
00035 
00036     /* for pixDisplayHitMissSel() */
00037 static const l_uint32  HitColor = 0x33aa4400;
00038 static const l_uint32  MissColor = 0xaa44bb00;
00039 
00040 
00041 main(int    argc,
00042      char **argv)
00043 {
00044 BOX         *box;
00045 PIX         *pixs, *pixc, *pixp, *pixsel, *pixhmt;
00046 PIX         *pixd1, *pixd2, *pixd3;
00047 SEL         *selhm;
00048 static char  mainName[] = "findpattern2";
00049 
00050     if (argc != 1)
00051         exit(ERROR_INT(" Syntax:  findpattern2", mainName, 1));
00052 
00053     if ((pixs = pixRead("feyn.tif")) == NULL)
00054         exit(ERROR_INT("pixs not made", mainName, 1));
00055 
00056         /* -------------------------------------------- *
00057          * Extract the pattern for a single character   *
00058          * ---------------------------------------------*/
00059     box = boxCreate(599, 1055, 18, 23);
00060     pixc = pixClipRectangle(pixs, box, NULL);
00061 
00062         /* Make a hit-miss sel */
00063     selhm = pixGenerateSelRandom(pixc, 0.3, 0.2, 1, 6, 6, 0, 0, &pixp);
00064 
00065         /* Display the sel */
00066     pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor);
00067     pixDisplay(pixsel, 200, 200);
00068     pixWrite("/tmp/junkpixsel1", pixsel, IFF_PNG);
00069 
00070         /* Use the Sel to find all instances in the page */
00071     startTimer();
00072     pixhmt = pixHMT(NULL, pixs, selhm);
00073     fprintf(stderr, "Time to find patterns = %7.3f\n", stopTimer());
00074 
00075         /* Color each instance at full res */
00076     pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx,
00077                                      selhm->cy, 0x0000ff00, 1.0, 5);
00078     pixWrite("/tmp/junkpixd11", pixd1, IFF_PNG);
00079 
00080         /* Color each instance at 0.3 scale */
00081     pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx,
00082                                      selhm->cy, 0x0000ff00, 0.5, 5);
00083     pixWrite("/tmp/junkpixd12", pixd2, IFF_PNG);
00084 
00085         /* Remove each instance from the input image */
00086     pixd3 = pixCopy(NULL, pixs);
00087     pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx,
00088                                     selhm->cy, 1);
00089     pixWrite("/tmp/junkpixr1", pixd3, IFF_PNG);
00090 
00091     boxDestroy(&box);
00092     selDestroy(&selhm);
00093     pixDestroy(&pixc);
00094     pixDestroy(&pixp);
00095     pixDestroy(&pixsel);
00096     pixDestroy(&pixhmt);
00097     pixDestroy(&pixd1);
00098     pixDestroy(&pixd2);
00099     pixDestroy(&pixd3);
00100 
00101 
00102         /* -------------------------------------------- *
00103          *        Extract the pattern for a word        *
00104          * ---------------------------------------------*/
00105     box = boxCreate(208, 872, 130, 35);
00106     pixc = pixClipRectangle(pixs, box, NULL);
00107 
00108         /* Make a hit-miss sel */
00109     selhm = pixGenerateSelRandom(pixc, 1.0, 0.05, 2, 6, 6, 0, 0, &pixp);
00110 
00111         /* Display the sel */
00112     pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor);
00113     pixDisplay(pixsel, 200, 200);
00114     pixWrite("/tmp/junkpixsel2", pixsel, IFF_PNG);
00115 
00116         /* Use the Sel to find all instances in the page */
00117     startTimer();
00118     pixhmt = pixHMT(NULL, pixs, selhm);
00119     fprintf(stderr, "Time to find word patterns = %7.3f\n", stopTimer());
00120 
00121         /* Color each instance at full res */
00122     pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx,
00123                                      selhm->cy, 0x0000ff00, 1.0, 5);
00124     pixWrite("/tmp/junkpixd21", pixd1, IFF_PNG);
00125 
00126         /* Color each instance at 0.3 scale */
00127     pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx,
00128                                      selhm->cy, 0x0000ff00, 0.5, 5);
00129     pixWrite("/tmp/junkpixd22", pixd2, IFF_PNG);
00130 
00131         /* Remove each instance from the input image */
00132     pixd3 = pixCopy(NULL, pixs);
00133     pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx,
00134                                     selhm->cy, 1);
00135     pixWrite("/tmp/junkpixr2", pixd3, IFF_PNG);
00136 
00137     selDestroy(&selhm);
00138     boxDestroy(&box);
00139     pixDestroy(&pixc);
00140     pixDestroy(&pixp);
00141     pixDestroy(&pixsel);
00142     pixDestroy(&pixhmt);
00143     pixDestroy(&pixd1);
00144     pixDestroy(&pixd2);
00145     pixDestroy(&pixd3);
00146     pixDestroy(&pixs);
00147     return 0;
00148 }
00149 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines