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:

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