gen_structured_light_pattern
— Erstellen der Muster-Bilder zur Anzeige bei einem Verfahren mit
strukturiertem Licht.
gen_structured_light_pattern( : PatternImages : StructuredLightModel : )
gen_structured_light_pattern
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_param
für das Modell
StructuredLightModel
festgelegt werden.
Je nach den gesetzten Parametern in StructuredLightModel
kann
Anzahl und Aussehen der Muster-Bilder variieren.
Generell können die Muster-Bilder in vier Gruppen unterteilt werden:
Normalisierungsbilder
Gray-Code-Bilder
Phasenbilder
Einzelstreifen-Bilder
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_pattern
) 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.
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 .
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.
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.
Erzeugung der Normalisierungsbilder:
Wie oben beschrieben, bietet HALCON zwei verschiedene Arten von
Normalisierungsbildern. Standardmäßig ist 'normalization' auf
'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_param
'normalization' auf
'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_param
):
'pattern_width' , 'pattern_height' ,
'min_stripe_width' and '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' 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' 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_param
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_param
ausgeschaltet werden, wobei
'pattern_type' auf '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_param
aktiviert werden, indem
'pattern_type' auf 'single_stripe' gesetzt wird.
Anzahl sowie Aussehen der Einzelstreifen-Bilder hängen von dem
Parameter 'single_stripe_width' ab, welcher die Streifenbreite in
Pixeln festlegt (siehe set_structured_light_model_param
).
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' durch 'single_stripe_width' ersetzt wird.
Die Verwendung dieser Bilder wird in der Einleitung des Kapitels Inspektion / Strukturiertes Licht beschrieben.
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.
PatternImages
(output_object) (multichannel-)image(-array) →
object (byte)
Generierte Muster-Bilder.
StructuredLightModel
(input_control, Zustand wird modifiziert) structured_light_model →
(handle)
Handle des Modells für strukturiertes Licht.
* 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)
Der Operator gen_structured_light_pattern
gibt 2 (H_MSG_TRUE) zurück,
sofern alle Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung
ausgelöst.
set_structured_light_model_param
decode_structured_light_pattern
create_structured_light_model
,
get_structured_light_model_param
,
get_structured_light_object
3D Metrology