| Operatoren |
segment_characters — Segmentieren von Zeichen in einem gegebenen Bildbereich.
segment_characters(Region, Image : ImageForeground, RegionForeground : Method, EliminateLines, DotPrint, StrokeWidth, CharWidth, CharHeight, ThresholdOffset, Contrast : UsedThreshold)
Dieser Operator wird verwendet, um Zeichen aus einer Region im Bild Image zu segmentieren. Region wird lediglich zum Einschränken des Verarbeitungsbereiches verwendet. Die segmentierten Zeichen werden in RegionForeground zurückgeliefert.
Es stehen zwei unterschiedliche Methoden zur Verfügung, um die Zeichen zu detektieren. Beide Methoden gehen davon aus, dass die Zeichen dunkler als der Hintergrund sind. Sollte dies nicht zutreffen, dann sollte das Bild mittels invert_image invertiert werden.
Der Parameter Method bestimmt den Algorithmus der zur Segmentation des Textes verwendet wird. Die möglichen Werte sind
Diese Methode extrahiert Text, der lokal von seinem Hintergrund abweicht. Aus diesem Grund eignet er sich für inhomogen beleuchtete Bilder. Die Hervorhebung der Textränder führt zu einer genaueren Bestimmung des Textes. Dies ist vor allem dann nützlich, wenn der Hintergrund sehr texturiert ist. Der Parameter Contrast definiert den minimalen Kontrast, also die minimale Grauwertdifferenz zwischen dem Text und dem Hintergrund. Das Verhalten dieses Segmentationsverfahrens ist mit dem von var_threshold und dem Setzen von LightDark auf 'dark' identisch.
Der minimale Kontrast wird automatisch so geschätzt, dass die Zahl der winzigen Regionen reduziert wird. Dieses Verfahren ist besonders für verrauschte Bilder geeignet. Der Parameter ThresholdOffset kann zum Anpassen des Schwellwerts verwendet werden. Sei g(x,y) der Grauwert des Eingabebildes Image an der Position (x,y), dann wird die Schwellwertbedingung bestimmt durch:
g(x,y) <= UsedThreshold + ThresholdOffset.
Falls zusätzlich zu den Zeichen horizontale oder vertikale Linien in Richtung der Textzeilen segmentiert werden, so sollte EliminateLines auf 'true' gesetzt werden. Das Entfernen der Linien wird durch den maximalen Wert von CharWidth und den maximalen Wert von CharHeight beeinflusst. Weitere Informationen findet man in deren Parameterbeschreibungen.
DotPrint: Sollte auf 'true' gesetzt werden, wenn Dot-Prints gelesen werden sollen, ansonsten auf 'false'.
StrokeWidth: Spezifiziert die Strichstärke des Textes und wird zur Bestimmung von Filtergrößen für die Zeichendetektion verwendet. Die Filtergrößen werden auch durch die Parameter DotPrint, die durchschnittliche Zeichenbreite CharWidth und die durchschnittliche Zeichenhöhe CharHeight festgelegt.
CharWidth: Dieser Parameter kann durch ein Tupel, welches bis zu drei Werten besitzen kann, gesetzt werden. Der erste Wert ist die durchschnittliche Breite, der zweite ist die minimale und der dritte die maximale Zeichenbreite. Wenn die minimale Zeichenbreite auf -1 gesetzt wird, berechnet der Operator den Wert automatisch in Abhängigkeit von der durchschnittlichen Zeichenbreite. Das gleiche gilt für den Fall, dass der maximale Wert nicht gesetzt wird. Einige Beispiele:
[10] setzt die durchschnittliche Zeichenbreite auf 10, die minimale und maximale Zeichenbreite werden vom Operator berechnet.
[10,-1,20] setzt die durchschnittliche Zeichenbreite auf 10, der minimale Wert wird vom Operator bestimmt und der maximale Wert auf 20 gesetzt.
[10,5,20] setzt die durchschnittliche Zeichenbreite auf 10, der minimale Wert wird auf 5 und der maximale Wert auf 20 gesetzt.
CharHeight: Dieser Parameter kann durch ein Tupel, welches bis zu drei Werten besitzen kann, gesetzt werden. Der erste Wert ist die durchschnittliche Höhe, der zweite ist die minimale und der dritte die maximale Zeichenhöhe. Wenn die minimale Zeichenhöhe auf -1 gesetzt wird, berechnet der Operator den Wert automatisch in Abhängigkeit von der durchschnittlichen Zeichenhöhe. Das gleiche gilt für den Fall, dass der maximale Wert nicht gesetzt wird. Einige Beispiele:
[10] setzt die durchschnittliche Zeichenhöhe auf 10, die minimale und maximale Zeichenhöhe werden vom Operator berechnet.
[10,-1,20] setzt die durchschnittliche Zeichenhöhe auf 10, der minimale Wert wird vom Operator bestimmt und der maximale Wert auf 20 gesetzt.
[10,5,20] setzt die durchschnittliche Zeichenhöhe auf 10, der minimale Wert wird auf 5 und der maximale Wert auf 20 gesetzt.
ThresholdOffset: Hiermit kann der Schwellwert angepasst werden, der verwendet wird, wenn die Segmentierungsmethode Method auf den Wert 'local_auto_shape' gesetzt wurde.
Contrast: Definiert den minimalen Kontrast zwischen dem Text und dem Hintergrund. Dieser Parameter wird verwendet, wenn Method auf 'local_contrast_best' gesetzt wurde.
UsedThreshold: Dieser Parameter enthält nach der Ausführung den Schwellwert, der zur Segmentierung der Zeichen verwendet wurde.
ImageForeground enthält das Bild, das intern für die Segmentierung verwendet wurde.
Bildbereich mit den Textzeilen.
Eingabebild.
Zur Segmentierung verwendetes Bild.
Region der Zeichen.
Methode zum Segmentieren der Textzeichen.
Defaultwert: 'local_auto_shape'
Werteliste: 'local_auto_shape', 'local_contrast_best'
Entfernen von horizontalen and vertikalen Linien?
Defaultwert: 'false'
Werteliste: 'false', 'true'
Sollen Dot-Print-Zeichen detektiert werden?
Defaultwert: 'false'
Werteliste: 'false', 'true'
Strichstärke der Zeichen.
Defaultwert: 'medium'
Werteliste: 'bold', 'light', 'medium', 'ultra_light'
Breite eines Zeichens.
Defaultwert: 25
Typischer Wertebereich: 1 ≤ CharWidth
Restriktion: CharWidth >= 1
Höhe eines Zeichens.
Defaultwert: 25
Typischer Wertebereich: 1 ≤ CharHeight
Restriktion: CharHeight >= 1
Wert zur Anpassung der Segmentierung.
Defaultwert: 0
Minimale Grauwertdifferenz zwischen Text und Hintergrund.
Defaultwert: 10
Typischer Wertebereich: 1 ≤ Contrast
Restriktion: Contrast >= 1
Verwendete Schwellwert zur Segmentierung der Zeichen.
for Index := 1 to 5 by 1
read_image (Image, 'dot_print_rotated/dot_print_rotated_'+Index$'02d')
text_line_orientation (Image, Image, 50, rad(-30), rad(30), OrientationAngle)
rotate_image (Image, ImageRotate, deg(-OrientationAngle), 'constant')
segment_characters (ImageRotate, ImageRotate, ImageForeground, \
RegionForeground, 'local_auto_shape', 'false', 'false', 'medium', \
25, 25, 0, 10, UsedThreshold)
endfor
Sind die Eingabeparameter korrekt besetzt, dann liefert segment_characters den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.
Foundation
| Operatoren |