RecData

typedef struct RecData_tag {
  ReInit  init;
  ReParm  parm; 
  ReImage image; 
  long    image_top; 
  long    image_bottom;
  long    busy; 
  INT_PTR hWND_rec_finished;
  long  left, top;  
  long  width, height;
  long  result_flags; 
  void  *result_image; 
  long  result_width; 
  long  result_height; 
  long  projection[2];
  short italic, bold;
  short strokelen, black; 
  #if defined(__STDC__)
    char  rec_char[REC_ALT][REC_CHAR_SIZE];
  #else
    union {
      char  rec_char[REC_ALT][REC_CHAR_SIZE]; 
      short rec_char2[REC_ALT][REC_CHAR_SIZE/2]; 
    };
  #endif
  unsigned char rec_value[REC_ALT];
  long rec_top[REC_ALT]; 
  long rec_bottom[REC_ALT]; 
} RecData;
      

Elemente:

init
Parameter für die Initialisierung eines Klassifikators. Ist vor rec_init() zu besetzen.
parm
Die Arbeit des Moduls REC 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 RecData.
image
Unter dieser Struktur ReImage wird das zu erkennende oder anderweitig zu bearbeitende Bild erwartet oder geliefert.
image_top, image_bottom
In image_top und image_bottom 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_rec_finished
Dieser Parameter hat nur für Windows Bedeutung. Ist er besetzt, so sendet rec_do() Messages an jenes Window, dessen Handle durch diesen Wert beschrieben ist. Sobald die Vorverarbeitung des Bildes abgeschlossen ist, setzt rec_do() folgenden Aufruf ab:
SendMessage((HWND) rec->hWND_rec_finished, WM_USER,
(WPARAM)(REC_MESSAGE | REX_IMGREADY), (LPARAM) rec);

Dadurch kann vor der Erkennung auf das Resultat der Bildvorverarbeitung (rec->image) zugegriffen werden. Der Pointer wird für diesen Aufruf auf das interne vorverarbeitete Bild umgesetzt. Sobald die Erkennung eines Zeichens abgeschlossen ist, setzt rec_do() folgenden Aufruf ab: SendMessage((HWND) rec->hWND_rec_finished, WM_USER,
(WPARAM)(REC_MESSAGE | REX_FINISHED), (LPARAM) rec);

Im Fehlerfall enthält wParm noch das Bit REX_ERROR.
left, top
Position des Zeichens nach der Schmutzbehandlung.
width, height
Höhe und Breite des Zeichens nach der Schmutzbehandlung.
result_flags
Das Element result_flags wird mit RESULT_FLAG_RESPELL besetzt, wenn das entsprechende Resultat durch ein Wörterbuch bestätigt wurde (RESPELL).
RESULT_FLAG_RESPELL_CONFIRMED wird gesetzt wenn durch RESPELL bestätigt wurde.
RESULT_FLAG_RESPELL_GENERATED wird gesetzt wenn durch RESPELL generiert wurde.
RESULT_FLAG_RESPELL zur Abfrage ob RESULT_FLAG_RESPELL_CONFIRMED oder
<RESULT_FLAG_RESPELL_GENERATED gesetzt wurden.
result_image
Wenn TYPO_KEEPIMG bei dem Parameter parm.typograph gesetzt ist, werden die segmentieren Einzelzeichen intern gespeichert. Der benötigte Speicher ist von REL allokiert und verwaltet, kann aber direkt mit der Funktion rel_freeimages() freigegeben werden. Bilder sind zeilenweise gespeichert, die oberste Zeile ist die erste. Die Zeilen sind pixelweise von links nach rechts gespeichert. Jeder Pixel wird als 1 Byte dargestellt. result_height beinhaltet die Zeilenanzahl, result_width die Spaltenanzahl des Bildes. In den Datenstrukturen RecData und RelResult steht vor result_image das umschreibende Rechteck von result_image. Dies beschreibt die Position des Bildes im Gesamtbild, welches zur Erkennung übergeben wurde. Zu beachten ist, dass die Dimensionen von result_image und dem umschreibenden Rechteck nicht identisch sein müssen, da grosse Bilder vor der Erkennung komprimiert werden und result_image aus dem komprimierten Bild gewonnen wird.
result_width, result_height
Höhe und Breite von result_image (kann komprimiert sein).
projection[2]
Projektion gemäss Schräglage von Anfang und Ende des Zeichens auf die Grundlinie.
italic, bold

Schräglage der Zeichen (italic)
Schräglage Hier werden die ermittelte Schräglage des Zeichens sowie dessen Strichdicke zurückgeliefert. Bereits die Definition der Schräglage eines Zeichens ist nicht ganz einfach. Wir legen dazu je eine Tangente von oben und von unten an das jeweilige Zeichen und verbinden den oberen mit dem unteren Berührungspunkt. Der Berührungspunkt selbst wird gegebenenfalls durch Mittelwertsbildung bestimmt. Man beachte, dass hierbei verschiedene Zeichen wie etwa L oder k in ihrer Normallage stets eine Schräglage nach links haben, andere nach rechts. Für langgezogene Zeichen wie Minuszeichen ist die Angabe einer Schräglage sinnlos. Der bei italic zurückgegebene Wert lässt sich inhaltlich wie folgt beschreiben: normierte Zeilenhöhe mit 64 Pixel
Schräglage
Man nehme zunächst einen senkrechten Strich und drehe diesen um seinen Mittelpunkt in die entsprechende Schräglage. Nun messe man bei einer Zeilenhöhe von 64 Pixel die Anzahl der Pixel vom Schnittpunkt der senkrechten Geraden mit der Oberkante der Zeile bis zum Schnittpunkt der gedrehten Geraden. Dieser Wert wird unter italic eingetragen. Diese Definition hat gegenüber einer Winkelangabe den Vorteil, dass der berechnete italic-Wert unmittelbar für eine Schräglagen-Korrektur durch horizontale Scherung verwendet werden kann. Unter bold wird die Strichdicke des Zeichens zurückgegeben, gemessen in Einheiten halber Pixelbreite. Ein Wert von 3 entspricht somit einer mittleren Strichdicke von 1 1/2 Pixel.
strokelen, black
Unter strokelen wird die Gesamt-Strichlänge des Zeichens zurückgegeben. Multipliziert mit der oben beschriebenen mittleren Strichdicke bold erhält man eine grobe Schätzung für die (doppelte) Anzahl der Schwarzpunkte des Zeichens. Einen genaueren Wert liefert black - dort wird die prozentuale Schwärzung des übergebenen Bildes zurückgegeben (100 * Schwarzpunkte / Bildpunkte).
rec_char, rec_char2
Unter rec_char wird für das zugehörige Zeichen die 2-Byte-Kennung je nach eingestellter Codepage zurückgegeben, das Resultat der Erkennung. Das erste Zeichen ist im allgemeinen der zugehörige ANSI-Code, das zweite charakterisiert gegebenenfalls Formklassen. Beispielsweise wird für eine normale Handschrift-Null "0_", für eine durchgestrichene Handschrift-Null "0W" zurückgeliefert. Ist das Resultat der Erkennung nicht eindeutig, so werden bis zu 8 (REC_ALT) Alternativen in Reihenfolge absteigender Sicherheit zurückgeliefert. Ein leerer oder mit Blank besetzter String bedeutet "kein Resultat" oder "keine weiteren Alternativen". Eine Übersicht der in KADMOS verfügbaren Kennungen und Formklassen mit ihren 2-Byte-Kennungen finden Sie auf unserer Webseite. rec_char2 hat die gleiche Bedeutung und Position wie rec_char. Es beschreibt die Kennungen im Unicode, also mit dem Datentyp short anstelle von char.
rec_value
Für jedes erkannte Zeichen wird hier - gegebenenfalls für alle Alternativen - die Sicherheit der jeweiligen Erkennung zurückgegeben. Kleine Werte stehen für hohe Sicherheit, Werte über 128 stehen für grosse Unsicherheit.
rec_top, rec_bottom
Für jede der erkannten Alternativen wird hier zurückgegeben, wo sich das Zeichen in der Zeile korrekterweise befinden sollte. Die Werte werden analog zu image_top und image_bottom gebildet, bezogen auf die spezifizierte base_line. Wurde der Wert von base_line beim Aufruf von rec_do() nicht spezifiziert, so beziehen sich die zurückgegebenen Werte auf base_line=64.

Verweise: