64 lines
2 KiB
Text
64 lines
2 KiB
Text
|
#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
|