gen_structured_light_patternT_gen_structured_light_patternGenStructuredLightPatternGenStructuredLightPattern (Operator)

Name

gen_structured_light_patternT_gen_structured_light_patternGenStructuredLightPatternGenStructuredLightPattern — Erstellen der Muster-Bilder zur Anzeige bei einem Verfahren mit strukturiertem Licht.

Signatur

gen_structured_light_pattern( : PatternImages : StructuredLightModel : )

Herror T_gen_structured_light_pattern(Hobject* PatternImages, const Htuple StructuredLightModel)

void GenStructuredLightPattern(HObject* PatternImages, const HTuple& StructuredLightModel)

HImage HStructuredLightModel::GenStructuredLightPattern() const

static void HOperatorSet.GenStructuredLightPattern(out HObject patternImages, HTuple structuredLightModel)

HImage HStructuredLightModel.GenStructuredLightPattern()

Beschreibung

gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern erzeugt die Muster-Bilder, die bei einem Verfahren mit strukturiertem Licht angezeigt werden. Verschiedene Parameter wie Breite und Höhe der Bilder, der Typ der Muster und die minimale Streifenbreite müssen zuvor mit dem Operator set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam für das Modell StructuredLightModelStructuredLightModelStructuredLightModelStructuredLightModelstructuredLightModel festgelegt werden. Je nach den gesetzten Parametern in StructuredLightModelStructuredLightModelStructuredLightModelStructuredLightModelstructuredLightModel kann Anzahl und Aussehen der Muster-Bilder variieren.

Generell können die Muster-Bilder in vier Gruppen unterteilt werden:

Allgemeine Information zu den Bildgruppen

Normalisierungsbilder:

Zum Dekodieren der Gray-Code-Bilder ist es notwendig zu entscheiden, ob ein Kamerapixel eine Region beobachtet, die einen weißen Streifen reflektiert oder einen schwarzen Streifen reflektiert. Um auch bei großer Variation des Reflexionsgrads der Oberfläche robust dekodieren zu können, werden Normalisierungsbilder benutzt um hell und dunkel beleuchtete Regionen besser zu identifizieren. Der einfachste, in den meisten Fällen aber auch ausreichende, Ansatz ist, ein vollständig schwarzes und ein vollständig weißes Bild zu erzeugen. Während des Dekodiervorgangs der aufgenommenen Kamerabilder (siehe decode_structured_light_patterndecode_structured_light_patternDecodeStructuredLightPatternDecodeStructuredLightPatternDecodeStructuredLightPattern) werden dann alle Gray-Code-Bilder mit dem Mittelwert des dunklen und hellen Bildes verglichen. Ein Kamerapixel wird als hell klassifiziert, wenn sein Grauwert größer oder gleich seinem zuvor berechneten Mittelwert ist. Ein weiterer Ansatz besteht darin, für jedes erzeugte Gray-Code-Bild wie im nächsten Absatz beschrieben auch eine invertierte Version des Gray-Code-Bilds zu erzeugen. Ein Kamerapixel wird dann als hell klassifiziert, wenn sein Grauwert im ersten Bild größer als sein Grauwert im invertierten Bild ist.

Gray-Code-Bilder:

Vor anwendungsnahen Arbeiten wie dem Detektieren von Defekten ist der erste Schritt in jeder Anwendung von strukturiertem Licht, eine Abbildung zwischen den Kamerapixeln und der Pixelebene des Monitors zu finden. Dies wird durch Anzeigen einer Bildfolge erreicht, die die Zeilen und Spalten des Monitors eindeutig kodieren. Wegen einiger Vorteile gegenüber anderen Mustertypen werden typischerweise Gray-Code-Bilder zur Kodierung verwendet. Ein Beispiel für eine Abfolge vertikaler und horizontaler Gray-Code-Bilder findet sich in der folgenden Abbildung.

Bildfolge vertikaler und horizontaler Gray-Code-Bilder wie sie von gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern erzeugt werden. Die Muster werden vom Monitor typischerweise vom gröbsten Muster zum feinsten angezeigt, wobei sich die Streifenbreite jeweils halbiert.

Obwohl die Benutzung von Gray-Code-Bildern eine einfache und zweckmäßige Herangehensweise darstellt, weist sie gewisse Beschränkungen auf. Ein Nachteil tritt auf, wenn viele Gray-Code-Bilder benötigt werden, um eine für die praktische Anwendung nötige räumliche Auflösung zu erreichen. Bei zunehmend feinerer Streifenauflösung wird das korrekte Dekodieren wegen Unschärfeeffekten immer schwieriger. Die dritte Bildgruppe (Phasenbilder) kann erzeugt werden, um diese Beschränkung zu überwinden.

Phasenbilder:

Phasenbilder benutzen gewöhnlich periodische Muster wie Sinus- oder Kosinus-Wellen, um später einen Winkel des Phasendurchlaufs zu rekonstruieren. In Kombination mit den Gray-Code-Bildern liefern sie dann die Korrespondenzen zwischen Monitor- und Kamerakoordinaten.

Um eine robuste Dekodierung in Hinblick auf Variation des Reflexionsgrads der Oberfläche und Rauschanfälligkeit zu ermöglichen, werden pro Orientierung (vertikal oder horizontal) vier Phasenbilder erzeugt. Die Bilder sind Kosinus-Wellen mit Phasenverschiebungen von , wobei .

Bildfolge vertikaler und horizontaler Phasenbilder wie sie von gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern erzeugt werden.

Der Hauptvorteil der Phasenbilder gegenüber den Gray-Code-Bildern besteht in subpixelgenauen Korrespondenzen zwischen Monitor- und Kamerakoordinaten. Wegen der Periodizität ist die Kodierung nur eindeutig bis auf ganzzahlige Vielfache der Periodenlänge. Um eine eindeutige Kodierung über das ganze Bild zu erreichen, ist die Kombination mit Gray-Code-Bildern notwendig.

Einzelstreifen-Bilder:

Einzelstreifen-Bilder bestehen aus einem hellen Streifen auf dunklem Hintergrund. Der helle Streifen wird derart über die Bilder verschoben, dass jeder Monitorpixel in genau einem Streifen enthalten ist. Um zu entscheiden, welcher helle Streifen in dem vom Kamerapixel beobachteten Bereich reflektiert wird, wird während der Dekodierung der hellste Pixelwert innerhalb der Sequenz einzelner Streifenbilder gewählt. Dies ermöglicht eine Dekodierung, die trotz Schwankungen der Oberflächenreflexion robust ist.

Bildfolge vertikaler und horizontaler Streifenbilder wie sie von gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern erzeugt werden, wenn 'pattern_type'"pattern_type""pattern_type""pattern_type""pattern_type" auf 'single_stripe'"single_stripe""single_stripe""single_stripe""single_stripe" gesetzt wird.

Die Gray-Code-Folge und die Phase werden dann verwendet, um die Position innerhalb des gefundenen Einzelsteifens zu verfeinern. Somit nimmt die Anzahl der erzeugten Gray-Code-Bilder typischerweise etwas ab, während zusätzliche Einzelstreifen-Bilder erzeugt werden.

Bildfolge vertikaler und horizontaler Gray-Code-Bilder wie sie von gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern erzeugt werden, wenn 'pattern_type'"pattern_type""pattern_type""pattern_type""pattern_type" auf 'single_stripe'"single_stripe""single_stripe""single_stripe""single_stripe" gesetzt wird.

Information über die Erzeugung der Bildgruppen

Erzeugung der Normalisierungsbilder:

Wie oben beschrieben, bietet HALCON zwei verschiedene Arten von Normalisierungsbildern. Standardmäßig ist 'normalization'"normalization""normalization""normalization""normalization" auf 'global'"global""global""global""global" gesetzt, was zur Erzeugung eines vollständig schwarzen und eines vollständig weißen Bilds führt. Zum Ändern der Methode so dass jedes Gray-Code-Bild einzeln invertiert wird, muss mit set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam 'normalization'"normalization""normalization""normalization""normalization" auf 'inverted_pattern'"inverted_pattern""inverted_pattern""inverted_pattern""inverted_pattern" gesetzt werden. Der Hauptvorteil der globalen Normalisierung ist die signifikant kleinere Bildanzahl während noch zufriedenstellende Ergebnisse erreicht werden. Nur für teilspiegelnde Oberflächen könnte die andere Methode robuster sein und sollte gewählt werden, falls die globale Normalisierung zu falschen Dekodier-Ergebnissen führt.

Erzeugung der Gray-Code-Bilder:

Größe, Anzahl und Aussehen der Gray-Code-Bilder hängt von folgenden Parametern ab (siehe set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam): 'pattern_width'"pattern_width""pattern_width""pattern_width""pattern_width", 'pattern_height'"pattern_height""pattern_height""pattern_height""pattern_height", 'min_stripe_width'"min_stripe_width""min_stripe_width""min_stripe_width""min_stripe_width" and 'pattern_orientation'"pattern_orientation""pattern_orientation""pattern_orientation""pattern_orientation".

Die ersten beiden Parameter legen die Größe der erzeugten Bilder fest und sollten normalerweise auf die Größe des Monitors gesetzt werden, der zum Anzeigen der Muster-Bilder verwendet wird. Der Parameter 'min_stripe_width'"min_stripe_width""min_stripe_width""min_stripe_width""min_stripe_width" legt die feinste Streifenbreite (in Pixel) der erzeugten Muster fest. Außerdem haben alle drei Parameter großen Einfluss auf die Anzahl der erzeugten Bilder.

Sei die maximale vertikale Streifenbreite und die maximale horizontale Streifenbreite. Dann ist die Anzahl der Gray-Code-Bilder in einer Orientierung (horizontal oder vertikal) gegeben durch

Der Parameter 'pattern_orientation'"pattern_orientation""pattern_orientation""pattern_orientation""pattern_orientation" setzt die Orientierung der erzeugten Gray-Code-Bilder (und Phasenbilder). Standardmäßig werden Bilder mit vertikalen und Bilder mit horizontalen Streifen erzeugt. Es ist auch möglich, nur Bilder einer Richtung zu erzeugen. Dies wird jedoch nicht empfohlen, da Änderungen der Oberfläche dann nur in einer Richtung detektiert werden können. Nur falls Änderungen der Oberfläche bewusst ignoriert werden sollten oder Defekte nur in einer Richtung zu erwarten sind, sollte dieser Parameter mit set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam verändert werden.

Erzeugung der Phasenbilder:

Da Phasenbilder geeignet sind, die praktischen Beschränkungen der Gray-Code-Bilder zu überwinden, ist ihre Erzeugung empfohlen und geschieht standardmäßig.

Falls die erreichte Genauigkeit der Gray-Code-Bilder ausreicht, kann die Erzeugung der Phasenbilder durch set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam ausgeschaltet werden, wobei 'pattern_type'"pattern_type""pattern_type""pattern_type""pattern_type" auf 'gray_code'"gray_code""gray_code""gray_code""gray_code" gesetzt wird.

Erzeugung der Einzelstreifen-Bilder:

Wenn die alleinige Verwendung von Gray-Code-Bildern und Phasenbildern nicht robust genug ist (dies kann zum Beispiel auf halbspiegelnden Oberflächen der Fall sein), kann die Erstellung von Einzelstreifen-Bildern mit set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam aktiviert werden, indem 'pattern_type'"pattern_type""pattern_type""pattern_type""pattern_type" auf 'single_stripe'"single_stripe""single_stripe""single_stripe""single_stripe" gesetzt wird.

Anzahl sowie Aussehen der Einzelstreifen-Bilder hängen von dem Parameter 'single_stripe_width'"single_stripe_width""single_stripe_width""single_stripe_width""single_stripe_width" ab, welcher die Streifenbreite in Pixeln festlegt (siehe set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam).

Während zusätzliche Einzelstreifen-Bilder erzeugt werden, nimmt die Anzahl der erzeugten Gray-Code-Bilder typischerweise etwas ab. Die Anzahl der Gray-Code-Bilder kann mit der obigen Formel berechnet werden, indem 'max_stripe_width'"max_stripe_width""max_stripe_width""max_stripe_width""max_stripe_width" durch 'single_stripe_width'"single_stripe_width""single_stripe_width""single_stripe_width""single_stripe_width" ersetzt wird.

Die Verwendung dieser Bilder wird in der Einleitung des Kapitels Inspektion / Strukturiertes Licht beschrieben.

Ausführungsinformationen

Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:

Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.

Parameter

PatternImagesPatternImagesPatternImagesPatternImagespatternImages (output_object)  (multichannel-)image(-array) objectHImageHImageHobject * (byte)

Generierte Muster-Bilder.

StructuredLightModelStructuredLightModelStructuredLightModelStructuredLightModelstructuredLightModel (input_control, Zustand wird modifiziert)  structured_light_model HStructuredLightModel, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Modells für strukturiertes Licht.

Beispiel (HDevelop)

* Create the model
create_structured_light_model ('deflectometry', StructuredLightModel)
* Set the size of the monitor
set_structured_light_model_param (StructuredLightModel, \
                                  'pattern_width', 1600)
set_structured_light_model_param (StructuredLightModel, \
                                  'pattern_height', 1200)
* Set the smallest width of the stripes in the pattern
set_structured_light_model_param (StructuredLightModel, \
                                  'min_stripe_width', 8)
* Generate the patterns to project
gen_structured_light_pattern (PatternImages, StructuredLightModel)
* Decode the camera images
decode_structured_light_pattern (CameraImages, StructuredLightModel)

Ergebnis

Der Operator gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern gibt 2 (H_MSG_TRUE) zurück, sofern alle Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung ausgelöst.

Vorgänger

set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam

Nachfolger

decode_structured_light_patterndecode_structured_light_patternDecodeStructuredLightPatternDecodeStructuredLightPatternDecodeStructuredLightPattern

Siehe auch

create_structured_light_modelcreate_structured_light_modelCreateStructuredLightModelCreateStructuredLightModelCreateStructuredLightModel, get_structured_light_model_paramget_structured_light_model_paramGetStructuredLightModelParamGetStructuredLightModelParamGetStructuredLightModelParam, get_structured_light_objectget_structured_light_objectGetStructuredLightObjectGetStructuredLightObjectGetStructuredLightObject

Modul

3D Metrology