diff options
Diffstat (limited to 'leptonica/prog/dewarptest1.c')
-rw-r--r-- | leptonica/prog/dewarptest1.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/leptonica/prog/dewarptest1.c b/leptonica/prog/dewarptest1.c new file mode 100644 index 00000000..333f6b4f --- /dev/null +++ b/leptonica/prog/dewarptest1.c @@ -0,0 +1,182 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * dewarptest1.c + * + * This exercise functions in dewarp.c for dewarping based on lines + * of horizontal text. It also creates a 24-image pdf of steps + * in the process. + */ + +#ifdef HAVE_CONFIG_H +#include <config_auto.h> +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +#define DO_QUAD 1 +#define DO_CUBIC 0 +#define DO_QUARTIC 0 + + /* Default LSF is quadratic on left and right edges. + * Set to 1 for linear LSF. */ +#define LINEAR_FIT_ON_EDGES 0 + +l_int32 main(int argc, + char **argv) +{ +L_DEWARP *dew1, *dew2; +L_DEWARPA *dewa; +PIX *pixs, *pixn, *pixg, *pixb, *pixd, *pixt1, *pixt2; +PIX *pixs2, *pixn2, *pixg2, *pixb2, *pixd2; + + setLeptDebugOK(1); + lept_mkdir("lept/model"); + lept_rmdir("lept/dewmod"); + lept_mkdir("lept/dewmod"); + +/* pixs = pixRead("1555.007.jpg"); */ + pixs = pixRead("cat.035.jpg"); +/* pixs = pixRead("cat.010.jpg"); */ + + /* Normalize for varying background and binarize */ + pixn = pixBackgroundNormSimple(pixs, NULL, NULL); + pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); + pixb = pixThresholdToBinary(pixg, 130); + + /* Run the basic functions */ + dewa = dewarpaCreate(2, 30, 1, 10, 30); + if (LINEAR_FIT_ON_EDGES) + dewarpaSetCurvatures(dewa, -1, -1, -1, 0, -1, -1); + dewarpaUseBothArrays(dewa, 1); + dew1 = dewarpCreate(pixb, 35); + dewarpaInsertDewarp(dewa, dew1); + dewarpBuildPageModel(dew1, "/tmp/lept/model/dewarp_model1.pdf"); + dewarpaApplyDisparity(dewa, 35, pixg, 200, 0, 0, &pixd, + "/tmp/lept/model/dewarp_apply1.pdf"); + + /* Write out some of the files to be imaged */ + lept_rmdir("lept/dewtest"); + lept_mkdir("lept/dewtest"); + pixWrite("/tmp/lept/dewtest/001.jpg", pixs, IFF_JFIF_JPEG); + pixWrite("/tmp/lept/dewtest/002.jpg", pixn, IFF_JFIF_JPEG); + pixWrite("/tmp/lept/dewtest/003.jpg", pixg, IFF_JFIF_JPEG); + pixWrite("/tmp/lept/dewtest/004.png", pixb, IFF_TIFF_G4); + pixWrite("/tmp/lept/dewtest/005.jpg", pixd, IFF_JFIF_JPEG); + pixt1 = pixRead("/tmp/lept/dewmod/0020.png"); + pixWrite("/tmp/lept/dewtest/006.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewmod/0030.png"); + pixWrite("/tmp/lept/dewtest/007.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewmod/0060.png"); + pixWrite("/tmp/lept/dewtest/008.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewmod/0070.png"); + pixWrite("/tmp/lept/dewtest/009.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewapply/002.png"); + pixWrite("/tmp/lept/dewtest/010.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewapply/003.png"); + pixWrite("/tmp/lept/dewtest/011.png", pixt1, IFF_PNG); + pixt2 = pixThresholdToBinary(pixt1, 130); + pixWrite("/tmp/lept/dewtest/012.png", pixt2, IFF_TIFF_G4); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + pixt1 = pixRead("/tmp/lept/dewmod/0041.png"); + pixWrite("/tmp/lept/dewtest/013.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewmod/0042.png"); + pixWrite("/tmp/lept/dewtest/014.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewmod/0051.png"); + pixWrite("/tmp/lept/dewtest/015.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewmod/0052.png"); + pixWrite("/tmp/lept/dewtest/016.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + + /* Normalize another image, that may not have enough textlines + * to build an accurate model */ +/* pixs2 = pixRead("1555.003.jpg"); */ + pixs2 = pixRead("cat.007.jpg"); +/* pixs2 = pixRead("cat.014.jpg"); */ + pixn2 = pixBackgroundNormSimple(pixs2, NULL, NULL); + pixg2 = pixConvertRGBToGray(pixn2, 0.5, 0.3, 0.2); + pixb2 = pixThresholdToBinary(pixg2, 130); + + /* Apply the previous disparity model to this image */ + dew2 = dewarpCreate(pixb2, 7); + dewarpaInsertDewarp(dewa, dew2); + dewarpaInsertRefModels(dewa, 0, 1); + dewarpaInfo(stderr, dewa); + dewarpaApplyDisparity(dewa, 7, pixg2, 200, 0, 0, &pixd2, + "/tmp/lept/model/dewarp_apply2.pdf"); + dewarpaDestroy(&dewa); + + /* Write out files for the second image */ + pixWrite("/tmp/lept/dewtest/017.jpg", pixs2, IFF_JFIF_JPEG); + pixWrite("/tmp/lept/dewtest/018.jpg", pixg2, IFF_JFIF_JPEG); + pixWrite("/tmp/lept/dewtest/019.png", pixb2, IFF_TIFF_G4); + pixWrite("/tmp/lept/dewtest/020.jpg", pixd2, IFF_JFIF_JPEG); + pixt1 = pixRead("/tmp/lept/dewmod/0060.png"); + pixWrite("/tmp/lept/dewtest/021.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewapply/002.png"); + pixWrite("/tmp/lept/dewtest/022.png", pixt1, IFF_PNG); + pixt2 = pixThresholdToBinary(pixt1, 130); + pixWrite("/tmp/lept/dewtest/023.png", pixt2, IFF_TIFF_G4); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + pixt1 = pixRead("/tmp/lept/dewmod/0070.png"); + pixWrite("/tmp/lept/dewtest/024.png", pixt1, IFF_PNG); + pixDestroy(&pixt1); + pixt1 = pixRead("/tmp/lept/dewapply/003.png"); + pixWrite("/tmp/lept/dewtest/025.png", pixt1, IFF_PNG); + pixt2 = pixThresholdToBinary(pixt1, 130); + pixWrite("/tmp/lept/dewtest/026.png", pixt2, IFF_TIFF_G4); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + /* Generate the big pdf file */ + convertFilesToPdf("/tmp/lept/dewtest", NULL, 135, 1.0, 0, 0, "Dewarp Test", + "/tmp/lept/dewarptest1.pdf"); + lept_stderr("pdf file made: /tmp/lept/model/dewarptest1.pdf\n"); + + pixDestroy(&pixs); + pixDestroy(&pixn); + pixDestroy(&pixg); + pixDestroy(&pixb); + pixDestroy(&pixd); + pixDestroy(&pixs2); + pixDestroy(&pixn2); + pixDestroy(&pixg2); + pixDestroy(&pixb2); + pixDestroy(&pixd2); + return 0; +} |