(patched) gocr-0.44
[swftools.git] / lib / gocr / ocr0.h
diff --git a/lib/gocr/ocr0.h b/lib/gocr/ocr0.h
new file mode 100644 (file)
index 0000000..4c67d77
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _OCR0_H
+#define _OCR0_H
+#include "pgm2asc.h"
+
+/* ----------------------------------------------------------------
+   - functions with thousand of lines make the compilation very slow
+     therefore the ocr0-function is splitted in subfunctions
+   - shared data used often in ocr0-subroutines are stored
+     in ocr0_shared structure.
+ *  ------------------------------------------------------------  */
+
+typedef struct ocr0_shared {  /* shared variables and properties */
+
+  struct box *box1;  /* box in whole image */
+  pix *bp;           /* extracted temporarly box, cleaned */
+  int cs;            /* global threshold value (gray level) */
+
+                      /* ToDo: or MACROS: X0 = box1->x0 */
+  int x0, x1, y0, y1; /* box coordinates related to box1 */
+  int dx, dy;         /* size of box */
+  int hchar, gchar;   /* relation to m1..m4 */
+  int aa[4][4];       /* corner points, see xX (x,y,dist^2,vector_idx) v0.41 */
+  holes_t holes;      /* list of holes (max MAX_HOLES) */
+
+} ocr0_shared_t;
+
+/* tests for umlaut */
+int testumlaut(struct box *box1, int cs, int m, wchar_t *modifier);
+/* detect chars */
+wchar_t ocr0(struct box *box1, pix  *b, int cs);
+/* detect numbers */
+wchar_t ocr0n(ocr0_shared_t *sdata);
+
+static inline int sq(int x) { return x*x; } /* square */
+
+/*
+ * go from vector j1 to vector j2 and measure maximum deviation of
+ *   the steps from the line connecting j1 and j2
+ * return the squared maximum distance
+ *   in units of the box size times 1024
+ */ 
+int line_deviation( struct box *box1, int j1, int j2 );
+
+/*
+ * search vectors between j1 and j2 for nearest point a to point r 
+ * example:
+ * 
+ *     r-> $$...$$   $ - mark vectors
+ *         @@$..@@   @ - black pixels
+ *         @@$..@@   . - white pixels
+ *         @@@@.$@
+ *     a-> @@$@$@@
+ *         @$.@@@@
+ *         @@..$@@
+ *         @@..$@@
+ *  j1 --> $$...$$ <-- j2
+ *     
+ * ToDo: vector aa[5] = {rx,ry,x,y,d^2,idx} statt rx,ry?
+ *          j1 and j2 must be in the same frame
+ *          return aa?
+ */
+int nearest_frame_vector( struct box *box1, int j1, int j2, int rx, int ry);
+#endif