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:
Zeichenposition
- 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: