KlassenKlassenKlassenKlassen | | | | Operatoren

find_1d_bar_codeT_find_1d_bar_codeFind1dBarCodefind_1d_bar_codeFind1dBarCodeFind1dBarCode (Operator)

Name

find_1d_bar_codeT_find_1d_bar_codeFind1dBarCodefind_1d_bar_codeFind1dBarCodeFind1dBarCode — Einen Barcode in einem Bild finden.

Warnung

find_1d_bar_codefind_1d_bar_codeFind1dBarCodefind_1d_bar_codeFind1dBarCodeFind1dBarCode ist veraltet und wird nur aus Gründen der Rückwärtskompatibilität zur Verfügung gestellt. Neue Applikationen zum Lesen von Barcode-Symbologien sollten stattdessen die Funktionalitäten im Kapitel Identifizierung / Barcode verwenden (siehe find_bar_codefind_bar_codeFindBarCodefind_bar_codeFindBarCodeFindBarCode).

Signatur

find_1d_bar_code(Image : CodeRegion : BarCodeDescr, GenericName, GenericValue : BarcodeFound, BarCodeElements, Orientation)

Herror T_find_1d_bar_code(const Hobject Image, Hobject* CodeRegion, const Htuple BarCodeDescr, const Htuple GenericName, const Htuple GenericValue, Htuple* BarcodeFound, Htuple* BarCodeElements, Htuple* Orientation)

Herror find_1d_bar_code(Hobject Image, Hobject* CodeRegion, const HTuple& BarCodeDescr, const HTuple& GenericName, const HTuple& GenericValue, HTuple* BarcodeFound, HTuple* BarCodeElements, HTuple* Orientation)

HRegion HImage::Find1dBarCode(const HTuple& BarCodeDescr, const HTuple& GenericName, const HTuple& GenericValue, HTuple* BarcodeFound, HTuple* BarCodeElements, HTuple* Orientation) const

HRegion HBarCode1D::Find1dBarCode(const HImage& Image, const HTuple& GenericName, const HTuple& GenericValue, HTuple* BarcodeFound, HTuple* BarCodeElements, HTuple* Orientation) const

void Find1dBarCode(const HObject& Image, HObject* CodeRegion, const HTuple& BarCodeDescr, const HTuple& GenericName, const HTuple& GenericValue, HTuple* BarcodeFound, HTuple* BarCodeElements, HTuple* Orientation)

HRegion HImage::Find1dBarCode(const HTuple& BarCodeDescr, const HTuple& GenericName, const HTuple& GenericValue, Hlong* BarcodeFound, HTuple* BarCodeElements, double* Orientation) const

HRegion HImage::Find1dBarCode(const HTuple& BarCodeDescr, const HString& GenericName, double GenericValue, Hlong* BarcodeFound, HTuple* BarCodeElements, double* Orientation) const

HRegion HImage::Find1dBarCode(const HTuple& BarCodeDescr, const char* GenericName, double GenericValue, Hlong* BarcodeFound, HTuple* BarCodeElements, double* Orientation) const

void HOperatorSetX.Find1dBarCode(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*CodeRegion, [in] VARIANT BarCodeDescr, [in] VARIANT GenericName, [in] VARIANT GenericValue, [out] VARIANT* BarcodeFound, [out] VARIANT* BarCodeElements, [out] VARIANT* Orientation)

IHRegionX* HBarCode1DX.Find1dBarCode(
[in] IHImageX* Image, [in] VARIANT BarCodeDescr, [in] VARIANT GenericName, [in] VARIANT GenericValue, [out] Hlong* BarcodeFound, [out] VARIANT* BarCodeElements, [out] double* Orientation)

IHRegionX* HImageX.Find1dBarCode(
[in] VARIANT BarCodeDescr, [in] VARIANT GenericName, [in] VARIANT GenericValue, [out] Hlong* BarcodeFound, [out] VARIANT* BarCodeElements, [out] double* Orientation)

static void HOperatorSet.Find1dBarCode(HObject image, out HObject codeRegion, HTuple barCodeDescr, HTuple genericName, HTuple genericValue, out HTuple barcodeFound, out HTuple barCodeElements, out HTuple orientation)

HRegion HImage.Find1dBarCode(HTuple barCodeDescr, HTuple genericName, HTuple genericValue, out int barcodeFound, out HTuple barCodeElements, out double orientation)

HRegion HImage.Find1dBarCode(HTuple barCodeDescr, string genericName, double genericValue, out int barcodeFound, out HTuple barCodeElements, out double orientation)

Beschreibung

find_1d_bar_codefind_1d_bar_codeFind1dBarCodefind_1d_bar_codeFind1dBarCodeFind1dBarCode sucht einen Barcode in einem Bild. Übergeben wird die Barcode Beschreibung die mit gen_1d_bar_code_descrgen_1d_bar_code_descrGen1dBarCodeDescrgen_1d_bar_code_descrGen1dBarCodeDescrGen1dBarCodeDescr oder gen_1d_bar_code_descr_gengen_1d_bar_code_descr_genGen1dBarCodeDescrGengen_1d_bar_code_descr_genGen1dBarCodeDescrGenGen1dBarCodeDescrGen erzeugt wurde. Hierdurch wird festgelegt, welche Art von Barcode gefunden werden soll.

Als Ergebnis werden die Dicken der Elemente und die Orientierung des Barcodes zurückgegeben. Zusätzlich erhält man die Region, in der der Barcode liegt. Falls ein Barcode gefunden wurde, liefert BarcodeFoundBarcodeFoundBarcodeFoundBarcodeFoundBarcodeFoundbarcodeFound den Wert 1, sonst 0.

Zur Steuerung der internen Bildverarbeitung können über die Parameter GenericNameGenericNameGenericNameGenericNameGenericNamegenericName und GenericValueGenericValueGenericValueGenericValueGenericValuegenericValue gezielt Steuerparameter übergeben werden. Dies geschieht, indem bei GenericNameGenericNameGenericNameGenericNameGenericNamegenericName die Liste der Namen der Parameter als Strings übergeben werden. Bei GenericValueGenericValueGenericValueGenericValueGenericValuegenericValue werden die zugehörigen Werte an den gleichen Indexpositionen übergeben. Normalerweise ist es nicht nötig, die Werte zu ändern. Dies ist nur bei schwierigen Aufnahmebedingungen oder bei speziellen Barcodes empfohlen. Im Einzelnen handelt es sich hierbei um folgende Werte:

'amplitude_sobel'

Mindestamplitude für die Kantensuche: Die Barcode-Suche basiert im ersten Schritt auf dem Sobelfilter. Dies hat gegenüber einem Schwellenwertverfahren den Vorteil, dass das Bild ungleichmäßig ausgeleuchtet sein kann. Im Falle eines sehr schlechten Kontrastes (Unterschied zwischen hellen und dunklen Elementen des Barcodes) kann dieser Wert kleiner gewählt werden, um alle Teile zu finden. Falls der Kontrast sehr gut ist, kann der Wert auch größer gewählt werden, um die Laufzeit zu verbessern. Die Wirkung kann mit dem Operator sobel_dirsobel_dirSobelDirsobel_dirSobelDirSobelDir mit dem Kantentyp 'sum_abs' getestet werden.

Vorbesetzung: 70

Verwendung: Suche der Barcode-Region

'min_size_element'

Bei der Analyse von Objekten, die (Teile von) Elemente(n) sein können, wird dieser Parameter zum Unterdrücken von sehr kleinen Objekten verwendet. Es ist zu beachten, dass bei schlechter Bildqualität ein Element zunächst in mehrere Bruchstücke zerfallen kann. Der Parameter muss hier größer als das kleinste Bruchstück gewählt werden. Bei guter Bildqualität kann der Wert erhöht werden. Dies verbessert die Laufzeit. Der Wert muss aber immer kleiner als die Länge eines Elementes (in Pixeln) sein. Ist der Wert zu groß, kann der gefundene Barcode unvollständig sein.

Vorbesetzung: 30

Verwendung: Suche der Barcode-Region

'max_size_element'

Analog zur Mindestgröße von Barcode-Teilen werden mit diesem Parameter zu große Teile unterdrückt. Es ist zu beachten, dass bei geringer Auflösung mehrere Elemente bei der Vorverarbeitung verschmelzen können. Der Wert ist also entsprechend groß zu wählen. Weiterhin sollte der Wert kleiner sein als die Größe des gesamten Barcodes.

Vorbesetzung: 15000

Verwendung: Suche der Barcode-Region

'angle_range'

Dieser Parameter hat die gleiche Funktion wie der Parameter 'sum_angles', nur wird er bei der Suche nach Elementen des Barcodes verwendet. Er hat somit Einfluss auf die Schätzung der Ausrichtung der Elemente. Bei schlechten Aufnahmen muss der Wert groß sein. Kleinere Werte haben eine kürzere Laufzeit zur Folge. Der Wert wird in Grad angegeben. Dieser Parameter braucht nicht geändert zu werden.

Vorbesetzung: 24

Verwendung: Suche der Barcode-Region

'correct_angle'

Dieser Wert hat Einfluss auf die Entscheidung, ob eine Region ein Barcode-Element sein kann. Hierzu wird die Orientierung aller Randpunkte eines potentiellen Elementes bestimmt. Wenn genügend Punkte die gleiche Orientierung haben wird die Region als Elementkandidat akzeptiert. Eine Erhöhung des Wertes schränkt die Auswahl stärker ein und verbessert damit die Laufzeit. Um so schlechter die Bildqualität ist, um so kleiner muss der Wert sein.

Vorbesetzung: 50 (Prozent)

Verwendung: Suche der Barcode-Region

'dilation_factor'

Zunächst werden die einzelnen Elemente des Barcodes gesucht, die dann anschließend zu dem gesamten Barcode (CodeRegionCodeRegionCodeRegionCodeRegionCodeRegioncodeRegion) zusammengefasst werden. Hierzu wird der morphologische Operator Closing verwendet. Das Maß der Dilatation wird automatisch geschätzt. Sollte diese Schätzung zu hoch oder zu niedrig sein, kann dies mit dem Parameter korrigiert werden. Dies kann bei Barcodes mit großen Lücken (Wert erhöhen) oder bei Barcodes die zu dicht an anderen Objekten liegen (Wert erniedrigen) nötig sein. Der Parameter ist unabhängig von der Bildqualität.

Vorbesetzung: 1

Verwendung: Suche der Barcode-Region

'sum_angles'

Dieser Parameter wird für die abschließende Bestimmung der Orientierung des Barcodes verwendet (Wert von OrientationOrientationOrientationOrientationOrientationorientation). Hierzu werden alle Kantenrichtungen, die innerhalb des Barcodes auftreten, bestimmt. Zunächst wird die häufigste Orientierung bestimmt. Unter Miteinbeziehung der Nachbarorientierungen wird das Ergebnis durch Mittelung berechnet. Mit dem Parameter wird der Winkelbereich der mit einbezogenen Nachbarorientierungen festlegt. Der Wert wird in Grad angegeben. Dieser Parameter braucht nicht geändert zu werden.

Vorbesetzung: 40

Verwendung: Suche der Barcode-Region

'min_area_bar_code'

Dieser Wert dient zur abschließenden Beurteilung der potentiellen Barcode-Region. Der Parameter gibt die Mindestfläche der Gesamtregion vor. Werden zu kleine Regionen gefunden, kann dieser Wert erhöht werden. Der Parameter ist dann von Bedeutung, wenn kleine Regionen mit gleicher Ausrichtung wie die Barcode-Elemente im Bild vorhanden sind. Der Parameter ist unabhängig von der Bildqualität.

Vorbesetzung: 1000

Verwendung: Suche der Barcode-Region

'sigma_project'

Für die Extraktion der Barcode-Elemente werden die Grauwerte der Barcode-Region in Richtung der Elemente projeziert. Die so erhaltenen Daten werden vor der Dickenbestimmung geglättet. Bei großen Abständen zwischen den Elementen kann die Glättung erhöht werden, um Scheinstrukturen zu unterdrücken. Der Wert sollte auf jeden Fall größer als 0.5 sein.

Vorbesetzung: 0.7

Verwendung: Suche der Barcode-Region

'element_orientation'

Für die Extraktion der Barcode-Elemente werden die Grauwerte der Barcode-Region in Richtung der Elemente projeziert. Mit diesem Wert kann die Richtung der Elemente vorgegeben werden. Die Richtung wir in Grad angegeben -360 bis +360.

Vorbesetzung: Keine Auswahl

Verwendung: Suche der Barcode-Region

'element_orientation_tolerance'

Für die Extraktion der Barcode-Elemente werden die Grauwerte der Barcode-Region in Richtung der Elemente projeziert. Mit diesem Wert kann die Toleranz für die Richtung der Elemente eingestellt werden. Der Wert wird zu 'element_orientation' addiert, bzw. subtrahiert.

Vorbesetzung: 10

Verwendung: Extraktion der Elementdicken

'amplitude_project'

Bei der Bestimmung der Elementdicken aus den Grauwertprojektionen bestimmt dieser Parameter die Mindestamplitude (Grauwertunterschiede) bei den Übergängen von Hell nach Dunkel und Dunkel nach Hell. Bei starken Störungen (Flecken) kann dieser Wert erhöht werden, um Scheinstrukturen zu unterdrücken. Bei sehr schwachen Kontrasten (z.B. bei einer geringen Auflösung und sehr dünnen Elementen) muss der Wert klein sein.

Vorbesetzung: 3

Verwendung: Extraktion der Elementdicken

'width_project'

Die Grauwertprojektionen werden nur in einem inneren Bereich der Barcode-Region entlang meherer Linien bestimmt (siehe unten). Der Parameter gibt die halbe Breite des Bereiches an, der zur Berechnung der Grauwertprojektionen verwendet wird. Falls der Winkel der Barcode-Region nicht gut geschätzt wird, sollte dieser Wert klein sein. Falls Störungen im Barcode auftreten (z.B. Kratzer, Flecken), kann dieser Wert erhöht werden, um diese Störungen zu überbrücken. Bei sehr schmalen Barcodes sollte der Wert klein gewählt werden.

Vorbesetzung: 5

Verwendung: Extraktion der Elementdicken

'add_length_project'

Da die Barcode-Region manchmal zu kurz extrahiert wird, verlängert dieser Parameter die Region in beide Richtungen um den angegebenen Betrag in Pixeln. Falls andere Objekte in der Nähe des Barodes liegen, kann dies zu einer Extraktion von falschen Elementen führen. In diesem Fall sollte der Wert verkleinert werden. Werden die Anfangs- und Endelemente nicht gefunden, ist der Wert zu erhöhen.

Vorbesetzung: 5

Verwendung: Extraktion der Elementdicken

'interpolation_project'

Mit diesem Parameter wird die Art der Grauwertinterpolation bei der Grauwertprojektion festgelegt. Bei einem Wert von 1 wird eine bilineare Interpolation verwendet. Bei dem Wert 0 wird keine Interpolation verwendet. Ohne Interpolation ist die Berechnung schneller, jedoch ist die Qualität nicht so gut und es kann zu Fehlmessungen kommen.

Vorbesetzung: 1

Verwendung: Extraktion der Elementdicken

'num_scanlines'

Dieser Wert bestimmt die maximale Anzahl von Linien, entlang derer versucht wird, den Barcode zu extrahieren. Der Wert sollte relativ groß gewählt werden, falls zu erwarten ist, dass stark gestörte Barcodes gelesen werden müssen. Falls 'num_scanlines'"num_scanlines""num_scanlines""num_scanlines""num_scanlines""num_scanlines" auf einen Wert größer als 1 gesetzt wird, wird der Wert von 'width_project'"width_project""width_project""width_project""width_project""width_project" mit 5 vorbesetzt, andernfalls mit 25. Diese Vorbesetzung dient dazu, auch mit einer einzigen Linie die Erkennung des Barcodes robuster zu machen.

Vorbesetzung: 9

Verwendung: Extraktion der Elementdicken

'max_extra_elements'

Dieser Wert dient dazu, eventuell in der Umbebung des Barcodes extrahierte, zu den Strichen des Barcodes parallele Elemente zu eliminieren, und so eine korrekte Dekodierung zu ermöglichen. Der Wert gilt für beide Enden des Barcodes getrennt, so dass insgesamt 2*'max_extra_elements'"max_extra_elements""max_extra_elements""max_extra_elements""max_extra_elements""max_extra_elements" Elemente (Striche und Lücken) eliminiert werden können. Auf jeder Seite des Barcodes können also bis zu 'max_extra_elements'"max_extra_elements""max_extra_elements""max_extra_elements""max_extra_elements""max_extra_elements"/2 Striche eliminiert werden.

Vorbesetzung: 6

Verwendung: Extraktion der Elementdicken

Es ist zu beachten, dass die beschriebenen Parameter im Normalfall nicht verändert werden sollten. Eine Veränderung erfordert Erfahrung in der Bildverarbeitung.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte / uint2)

Bild, das Barcode enthält.

CodeRegionCodeRegionCodeRegionCodeRegionCodeRegioncodeRegion (output_object)  region objectHRegionHRegionHRegionHRegionXHobject *

Region des Barcode.

BarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrBarCodeDescrbarCodeDescr (input_control)  barcode_1d HTupleHTupleHBarCode1D, HTupleHBarCode1DX, VARIANTHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double) (BSTR / Hlong / double) (char* / Hlong / double)

Beschreibung eines Barcode-Typs

GenericNameGenericNameGenericNameGenericNameGenericNamegenericName (input_control)  attribute.name(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Namen der optionalen Steuerparameter.

Defaultwert: []

Werteliste: 'add_length_project'"add_length_project""add_length_project""add_length_project""add_length_project""add_length_project", 'amplitude_project'"amplitude_project""amplitude_project""amplitude_project""amplitude_project""amplitude_project", 'amplitude_sobel'"amplitude_sobel""amplitude_sobel""amplitude_sobel""amplitude_sobel""amplitude_sobel", 'angle_range'"angle_range""angle_range""angle_range""angle_range""angle_range", 'correct_angle'"correct_angle""correct_angle""correct_angle""correct_angle""correct_angle", 'dilation_factor'"dilation_factor""dilation_factor""dilation_factor""dilation_factor""dilation_factor", 'element_orientation'"element_orientation""element_orientation""element_orientation""element_orientation""element_orientation", 'element_orientation_tolerance'"element_orientation_tolerance""element_orientation_tolerance""element_orientation_tolerance""element_orientation_tolerance""element_orientation_tolerance", 'interpolation_project'"interpolation_project""interpolation_project""interpolation_project""interpolation_project""interpolation_project", 'max_extra_elements'"max_extra_elements""max_extra_elements""max_extra_elements""max_extra_elements""max_extra_elements", 'max_size_element'"max_size_element""max_size_element""max_size_element""max_size_element""max_size_element", 'min_size_element'"min_size_element""min_size_element""min_size_element""min_size_element""min_size_element", 'num_scanlines'"num_scanlines""num_scanlines""num_scanlines""num_scanlines""num_scanlines", 'sigma_project'"sigma_project""sigma_project""sigma_project""sigma_project""sigma_project", 'sum_angles'"sum_angles""sum_angles""sum_angles""sum_angles""sum_angles", 'width_project'"width_project""width_project""width_project""width_project""width_project"

GenericValueGenericValueGenericValueGenericValueGenericValuegenericValue (input_control)  attribute.value(-array) HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Wert der optionalen Steuerparameter.

Defaultwert: []

BarcodeFoundBarcodeFoundBarcodeFoundBarcodeFoundBarcodeFoundbarcodeFound (output_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Information ob der Barcode gefunden wurde.

Werteliste: 0, 1

BarCodeElementsBarCodeElementsBarCodeElementsBarCodeElementsBarCodeElementsbarCodeElements (output_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Breiten der Elemente.

OrientationOrientationOrientationOrientationOrientationorientation (output_control)  angle.rad HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Orientierung des Barcodes.

Beispiel (C++ (HALCON 5.0-10.0))

HTuple   empty;   // empty list of values
HTuple   BarCodeDescr;
HTuple   BarcodeFound,Elements,Orientation;
HTuple   Characters,Reference,IsCorrect;
Hobject  Image,CodeRegion;

gen_1d_bar_code_descr("EAN 13",13,13,&BarCodeDescr);
find_1d_bar_code(Image,&CodeRegion,BarCodeDescr,empty,empty,
                 &BarcodeFound,&Elements,&Orientation);
if (BarcodeFound[0].l)
{
  decode_1d_bar_code(Elements,BarCodeDescr,
                     &Characters,&Reference,&IsCorrect);
  if (IsCorrect[0].l)
    for (int i=0; i<Characters.Num(); i++)
    {
      char *value = Characters[i];
    }
}

Ergebnis

find_1d_bar_codefind_1d_bar_codeFind1dBarCodefind_1d_bar_codeFind1dBarCodeFind1dBarCode liefert den Wert 2 (H_MSG_TRUE), sofern die die Parameter korrekt sind.

Modul

Bar Code


KlassenKlassenKlassenKlassen | | | | Operatoren