X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fgocr%2Focr0.h;fp=lib%2Fgocr%2Focr0.h;h=4c67d77ba5d6f1ccb997bea0ae50703b2444b89e;hb=8154e11e1c06aefe18c16b33f2b12d6de21273a4;hp=0000000000000000000000000000000000000000;hpb=e8fe2f290123fc66181709a8a5263ad9e91c6939;p=swftools.git diff --git a/lib/gocr/ocr0.h b/lib/gocr/ocr0.h new file mode 100644 index 0000000..4c67d77 --- /dev/null +++ b/lib/gocr/ocr0.h @@ -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