Pix Pix::ThresholdToValue(int threshval, int setval) { if(IsEmpty()) return Pix(); PIX *dPix = pixThresholdToValue(NULL, pix, threshval, setval); if(!dPix) return Pix(); return Pix(&dPix); } // END Pix::ThresholdToValue()
int main(int argc, char **argv) { char *filein; l_float32 angle, conf, deg2rad; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; PIX *pix6, *pix7, *pix8, *pix9; static char mainName[] = "lineremoval"; if (argc != 2) return ERROR_INT(" Syntax: lineremoval filein", mainName, 1); filein = argv[1]; deg2rad = 3.14159 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); /* threshold to binary, extracting much of the lines */ pix1 = pixThresholdToBinary(pixs, 170); pixWrite("/tmp/dave-proc1.png", pix1, IFF_PNG); pixDisplayWrite(pix1, 1); /* find the skew angle and deskew using an interpolated * rotator for anti-aliasing (to avoid jaggies) */ pixFindSkew(pix1, &angle, &conf); pix2 = pixRotateAMGray(pixs, deg2rad * angle, 255); pixWrite("/tmp/dave-proc2.png", pix2, IFF_PNG); pixDisplayWrite(pix2, 1); /* extract the lines to be removed */ pix3 = pixCloseGray(pix2, 51, 1); pixWrite("/tmp/dave-proc3.png", pix3, IFF_PNG); pixDisplayWrite(pix3, 1); /* solidify the lines to be removed */ pix4 = pixErodeGray(pix3, 1, 5); pixWrite("/tmp/dave-proc4.png", pix4, IFF_PNG); pixDisplayWrite(pix4, 1); /* clean the background of those lines */ pix5 = pixThresholdToValue(NULL, pix4, 210, 255); pixWrite("/tmp/dave-proc5.png", pix5, IFF_PNG); pixDisplayWrite(pix5, 1); pix6 = pixThresholdToValue(NULL, pix5, 200, 0); pixWrite("/tmp/dave-proc6.png", pix6, IFF_PNG); pixDisplayWrite(pix6, 1); /* get paint-through mask for changed pixels */ pix7 = pixThresholdToBinary(pix6, 210); pixWrite("/tmp/dave-proc7.png", pix7, IFF_PNG); pixDisplayWrite(pix7, 1); /* add the inverted, cleaned lines to orig. Because * the background was cleaned, the inversion is 0, * so when you add, it doesn't lighten those pixels. * It only lightens (to white) the pixels in the lines! */ pixInvert(pix6, pix6); pix8 = pixAddGray(NULL, pix2, pix6); pixWrite("/tmp/dave-proc8.png", pix8, IFF_PNG); pixDisplayWrite(pix8, 1); pix9 = pixOpenGray(pix8, 1, 9); pixWrite("/tmp/dave-proc9.png", pix9, IFF_PNG); pixDisplayWrite(pix9, 1); pixCombineMasked(pix8, pix9, pix7); pixWrite("/tmp/dave-result.png", pix8, IFF_PNG); pixDisplayWrite(pix8, 1); pixDisplayMultiple("/tmp/display/file*"); return 0; }
int main_line_removal() { PIX* pixs_source = pixRead("dave-start.png"); if (!pixs_source) { printf("Error opening file"); return 1; } double deg2rad = 3.1415926535 / 180.; l_float32 angle, conf, score; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; pix1 = pixThresholdToBinary(pixs_source, 160); printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-1.tif", pix1, IFF_TIFF_G4); pixFindSkew(pix1, &angle, &conf); pix2 = pixRotateAMGray(pixs_source, deg2rad * angle, 160); printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-2.tif", pix2, IFF_TIFF_G4); l_int32 HORIZ = 1; l_int32 VERT = 3; pix3 = pixCloseGray(pix2, 51, HORIZ); //k?p?c 51? printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-3.tif", pix3, IFF_TIFF_G4); pix4 = pixErodeGray(pix3, 5, VERT); //k?p?c 5? printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-4.tif", pix4, IFF_TIFF_G4); pix5 = pix4; pix5 = pixThresholdToValue(pix5, pix4, 230, 255); printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-5.tif", pix5, IFF_TIFF_G4); pix6 = pix5; pix6 = pixThresholdToValue(pix5, pix5, 210, 0); printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-6.tif", pix6, IFF_TIFF_G4); pix7 = pixThresholdToBinary(pix6, 230); printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-7.tif", pix7, IFF_TIFF_G4); pixInvert(pix6, pix6); pix8 = pixAddGray(NULL, pix2, pix6); printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-8.tif", pix8, IFF_TIFF_G4); VERT = 7; pix9 = pixOpenGray(pix8, 3, VERT); printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-9.tif", pix9, IFF_TIFF_G4); if (pixCombineMasked(pix8, pix9, pix7)) { printf("!!!Error while combining pixs!!!\n"); } printf("Create line removal image\n"); pixWrite("line-removal/result.line-removal-final.tif", pix8, IFF_TIFF_G4); printf("\n---\nEnd\n"); getchar(); return 0; }