RelData
typedef struct RelData_tag {
ReInit init;
ReParm parm;
ReImage image;
long image_top;
long image_bottom;
long busy;
INT_PTR hWND_rel_finished;
KADMOS_ERROR (KADMOS_API *rec_hook)(RecData *);
void *filler1;
long left, top;
long width, height;
short rel_deskew;
short rel_char_space;
short rel_blank_width;
short rel_blank_min;
short rel_grid_len;
short rel_graph_len;
short rel_result_len;
short filler2;
RelGrid *rel_grid;
RelGraph *rel_graph;
RelResult *rel_result;
void *filler3;
} RelData;
Elemente:
init
- Parameter für die Initialisierung eines Klassifikators. Ist vor
rel_init() zu besetzen.
parm
- Die Arbeit des Moduls
REL kann mit einer Vielzahl von Parametern gesteuert werden.
Diese Parameter sind in einer Struktur ReParm zusammengefasst. Eine solche Struktur ist nun Bestandteil
der für den Aufruf des Moduls benötigten Datenstruktur RelData.
image
- Unter dieser Struktur
ReImage wird das zu erkennende oder anderweitig zu bearbeitende
Bild erwartet oder geliefert.
image_top, image_bottom
- Hier können, bezogen auf den unter
base_line gegebenen Massstab, Ober- und Unterkante
des Zeichens mitgegeben werden. Bei einem Wert base_line=64 wären typische Werte für einzelne Zeichen:

- A image_top=0, image_bottom=64,
- Ü image_top=-16, image_bottom=64
- a image_top=14, image_bottom=64,
- g image_top=14, image_bottom=82
Werden hier keine Werte spezifiziert, so bleiben beim Modul REC alle alternativen Erkennungsergebnisse erhalten.
Beim Modul REL werden diese Werte durch eine intelligente Ermittlung des Linienverlaufs (Grundlinie, Oberlinie)
für jedes Zeichen ermittelt und zum Ausschluss nicht in die Zeilenstruktur passender Zeichen ausgewertet. Für
die Steuerung dieser Auswertung bzw. des Ausschlusses sind die im Parameter pos beschriebenen Spezifikationen
POS_NOLINECONTEXT, POS_SOFTLINECONTEXT und POS_HARDLINECONTEXT von Bedeutung.
busy
- Hier wird angezeigt, ob die Erkennung noch in Arbeit (1) oder bereits abgeschlossen ist (0).
Dies ist insbesondere bei Parallelverarbeitung von Bedeutung.
hWND_rel_finished
- Dieser Parameter hat nur für Windows Bedeutung. Ist er besetzt, so sendet
rel_do()
Messages an jenes Window, dessen Handle durch diesen Wert beschrieben ist. Sobald die Vorverarbeitung einer Zeile
abgeschlossen ist, setzt rel_do() folgenden Aufruf ab:
SendMessage((HWND) rel->hWND_rel_finished, WM_USER,
(WPARAM)(REL_MESSAGE | REX_IMGREADY), (LPARAM) rel);
Dadurch kann vor der Erkennung auf das Resultat der Bildvorverarbeitung (rel->image) zugegriffen werden. Der
Pointer wird für diesen Aufruf auf das interne vorverarbeitete Bild umgesetzt. Sobald die Erkennung einer Zeile
abgeschlossen ist, setzt rel_do() folgenden Aufruf ab:
SendMessage((HWND) rel->hWND_rel_finished, WM_USER, (WPARAM)
(REL_MESSAGE | REX_FINISHED), (LPARAM) rel);
Im Fehlerfall enthält wParm noch das Bit REX_ERROR.
rec_hook
- Hier kann eine eigene Funktion angegeben werden die der vorgeschriebenen Deklaration genügt.
Die Module
REP und REL rufen nach erfolgter Zeilen- und Zeichensegmentierung letztendlich stets
die Funktion rec_do() des Moduls REC mit einer zugehörigen Struktur RecData auf.
Ist bei rec_hook eine Funktion eingetragen, so wird diese unmittelbar nach jedem dieser
rec_do()-Aufrufe mit der zugehörigen RecData-Struktur ausgeführt. Man hat dadurch eine ganze
Reihe von Möglichkeiten zur Verfolgung und sogar Steuerung der Einzelzeichen-Erkennung, zur Sammlung der segmentierten
Rasterbilder oder auch zum Abbruch der Erkennung. Es wird nämlich der Rückgabewert der Funktion rec_hook
derart ausgewertet, dass bei einem Wert verschieden von RE_SUCCESS das Modul rel_do() seine
Arbeit beendet und ebenfalls mit diesem Rückgabewert zurückkehrt. Dadurch wird auch gegebenenfalls das Modul
rep_do() seine Arbeit beenden und mit diesem Wert zurückkehren. Will man eine derartige hook-Funktion
mit eigenen Parametern versorgen, so ist hierfür der Pointer hookparm in der Struktur ReParm vorgesehen.
Hinterlegt man etwa vor einem Aufruf von rel_do() bei hookparm eine Adresse
(z.B. auf private Daten), so wird diese Adresse von rel_do() vor jedem Aufruf von rec_do() in
die zugehörige Struktur RecData auf hookparm kopiert, wo sie von der hook-Funktion
abgerufen werden kann.
filler1
- 8 Byte Alignment.
left, top
- Zeilenposition im Gesamtbild.
width, height
- Höhe und Breite der Zeile im Gesamtbild.
rel_deskew
- Korrigierte Drehung des Bildes.
rel_char_space
rel_char_space beschreibt den mittleren Abstand zweier aufeinanderfolgender Zeichen
der bearbeiteten Textzeile, also den Abstand vom Anfang eines Zeichens zum Anfang des nächsten. Man benötigt
diese Angaben unter Umständen für eine vorlagengetreue Wiedergabe des gelesenen Textes, insbesondere bei
äquidistanten Schriften.
rel_blank_width
rel_blank_width wird bei äquidistanten Schriften auf Null gesetzt. Sofern jedoch
ermittelt wurde, dass eine Proportionalschrift vorlag, so wird hier die festgestellte mittlere Breite des Blank-Zeichens
zurückgegeben.
rel_blank_min
rel_blank_min wird bei äquidistanten Schriften ebenfalls auf Null gesetzt.
Bei Proportionalschriften wird hier derjenige Grenzwert zurückgeliefert, ab dem Abstände zwischen zwei buchstaben
als Blank zu werten sind.
rel_grid_len
- Dieses Element befindet sich im Resultatteil der Strukturen
RelData und RepResult.
Sofern Informationen über Linien oder Boxen zurückgeliefert werden sollen, muss vor dem Aufruf von rel_init()
oder rep_init() bei rel_grid_maxlen ein Maximalwert eingetragen werden. rel_grid
muss beim Aufruf von rel_do() auf allokierten Speicherplatz verweisen, der entsprechend viele Strukturen
RelGrid aufnehmen kann. Nach dem Aufruf von rel_do() ist unter rel_grid_len dann
die Anzahl der tatsächlich erkannten Strukturelemente abgelegt.
rel_graph_len, rel_result_len
- Diese Elemente befinden sich im Resultatteil der Strukturen
RelData und RepResult
und liefern die Anzahl der erkannten Einzelergebnisse zurück. Die Elemente rel_graph_maxlen und
rel_result_maxlen sind jedoch vor dem Aufruf von rel_init() oder rep_init() mit
den Maximal-Werten zu besetzen, entsprechend der Allokation der beiden Felder rel_graph und
rel_result. Diese Vorab-Information hat den einzigen Zweck zu sichern, dass das Modul rel_do()
auch wirklich nur bis zum Ende des unter rel_graph und rel_result bereitgestellten
Speicherbereiches Eintragungen vornimmt. Nach jedem Aufruf von rel_do() oder rep_do()
liefern rel_graph_len und rel_result_len die Anzahl der in rel_graph und
rel_result aktuell besetzten Feldelemente zurück.
filler2
- 8 Byte Alignment.
*rel_grid
- Dieses Element befindet sich im Resultatteil der Strukturen
RelData und RepResult.
Sofern Informationen über Linien oder Boxen zurückgeliefert werden sollen, muss vor dem Aufruf von
rel_init() oder rep_init() bei rel_grid_maxlen ein Maximalwert eingetragen werden.
rel_grid muss beim Aufruf von rel_do() auf allokierten Speicherplatz verweisen, der entsprechend
viele Strukturen RelGrid aufnehmen kann. Nach dem Aufruf von rel_do() ist unter
rel_grid_len dann die Anzahl der tatsächlich erkannten Strukturelemente abgelegt.
*rel_graph, *rel_result
- Diese beiden Felder verweisen auf die Ergebnisse von Segmentierung und Klassifikation. Die Resultate
sind in Feldern des Typs
RelGraph und RelResult enthalten. rel_graph und
rel_result müssen vor einem Aufruf von rel_do() mit Pointern auf einen Speicherbereich besetzt
werden. rel_do() trägt dann dort die Resultate ein. Siehe auch rel_graph_len,
rel_graph_maxlen, rel_result_len und rel_result_maxlen.
filler3
- 8 Byte Alignment.
Verweise: