chiark / gitweb /
antialiasing text conversion: canonimage has 0..AAMAXVAL
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Jul 2009 10:16:32 +0000 (11:16 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Jul 2009 10:16:32 +0000 (11:16 +0100)
pctb/ocr.h
pctb/structure.c

index 9a2b2c7..5269723 100644 (file)
 #include "common.h"
 
 
 #include "common.h"
 
 
+#define AADEPTH 3
+#define AAMAXVAL ((1<<AADEPTH)-1)
+
+
 typedef uint32_t Pixcol;
 #define PSPIXCOL(priscan) priscan##32
 
 typedef uint32_t Pixcol;
 #define PSPIXCOL(priscan) priscan##32
 
index a3cca0b..5a59388 100644 (file)
@@ -496,11 +496,12 @@ static void find_table_entry(Rect commod, int colno, Rect *cell) {
        ((double)here_chan - (double)bg_chan) /
        ((double)fg_chan   - (double)bg_chan);
       alpha[i]= alpha_chan;
        ((double)here_chan - (double)bg_chan) /
        ((double)fg_chan   - (double)bg_chan);
       alpha[i]= alpha_chan;
-      alpha_mean += alpha_chan / 3;
+      alpha_mean += alpha_chan * (1/3.0);
     }
 
     }
 
-    double alpha_min = alpha_mean - 0.13;
-    double alpha_max = alpha_mean + 0.13;
+    double thresh= 1.0/AAMAXVAL;
+    double alpha_min= alpha_mean - thresh;
+    double alpha_max= alpha_mean + thresh;
     for (i=0; i<3; i++)
       MUST( alpha_min <= alpha[i] && alpha[i] <= alpha_max,
            MI(i);MRGB(here);MRGB(background);MRGB(foreground);
     for (i=0; i<3; i++)
       MUST( alpha_min <= alpha[i] && alpha[i] <= alpha_max,
            MI(i);MRGB(here);MRGB(background);MRGB(foreground);
@@ -509,12 +510,12 @@ static void find_table_entry(Rect commod, int colno, Rect *cell) {
     MUST( 0 <= alpha_mean && alpha_mean <= 1,
          MRGB(here);MRGB(background);MRGB(foreground);
          MF(alpha_mean) );
     MUST( 0 <= alpha_mean && alpha_mean <= 1,
          MRGB(here);MRGB(background);MRGB(foreground);
          MF(alpha_mean) );
-    int here_int= 7*alpha_mean;
-    if (!(here_int==0 || here_int==7)) monochrome=0;
+    int here_int= AAMAXVAL*alpha_mean;
+    if (!(here_int==0 || here_int==AAMAXVAL)) monochrome=0;
     cim->d[p.y * cim->w + p.x]= '0' + here_int;
   }
 
     cim->d[p.y * cim->w + p.x]= '0' + here_int;
   }
 
-  debug_rect("cell07", colno, *cell);
+  debug_rect("cell0M", colno, *cell);
 
   require_rectangle_r(*cell, "0123456789", __LINE__);
 }
 
   require_rectangle_r(*cell, "0123456789", __LINE__);
 }
@@ -531,9 +532,9 @@ static void ocr_rectangle(Rect r, const OcrCellType ct, FILE *tsv_output) {
       Point here= { x+r.tl.x, y+r.tl.y };
       int pixel= get_p(here);
       switch (pixel) {
       Point here= { x+r.tl.x, y+r.tl.y };
       int pixel= get_p(here);
       switch (pixel) {
-      case ' ':           break;
-      case '0':           break;
-      case '7': cx |= rv; break;
+      case ' ':                      break;
+      case '0':                      break;
+      case '0'+AAMAXVAL:  cx |= rv;  break;
       default:
        MUST(!"wrong pixel",
             MC(pixel);MP(here);MSB(ocr_celltype_name(ct));MR(r); );
       default:
        MUST(!"wrong pixel",
             MC(pixel);MP(here);MSB(ocr_celltype_name(ct));MR(r); );