decode_structured_light_patternT_decode_structured_light_patternDecodeStructuredLightPatternDecodeStructuredLightPattern (Operator)

Name

decode_structured_light_patternT_decode_structured_light_patternDecodeStructuredLightPatternDecodeStructuredLightPattern — Dekodieren der aufgenommenen Kamerabilder bei einem Verfahren mit strukturiertem Licht.

Signatur

decode_structured_light_pattern(CameraImages : : StructuredLightModel : )

Herror T_decode_structured_light_pattern(const Hobject CameraImages, const Htuple StructuredLightModel)

void DecodeStructuredLightPattern(const HObject& CameraImages, const HTuple& StructuredLightModel)

void HStructuredLightModel::DecodeStructuredLightPattern(const HImage& CameraImages) const

static void HOperatorSet.DecodeStructuredLightPattern(HObject cameraImages, HTuple structuredLightModel)

void HStructuredLightModel.DecodeStructuredLightPattern(HImage cameraImages)

Beschreibung

decode_structured_light_patterndecode_structured_light_patternDecodeStructuredLightPatternDecodeStructuredLightPatternDecodeStructuredLightPattern dekodiert die Kamerabilder CameraImagesCameraImagesCameraImagesCameraImagescameraImages, die zuvor bei einem Verfahren mit strukturiertem Licht aufgenommen wurden. Die bei der Dekodierung erzeugten Korrespondenzbilder und andere Zwischenergebnisse werden im Model StructuredLightModelStructuredLightModelStructuredLightModelStructuredLightModelstructuredLightModel gespeichert und können im Anschluss mit dem Operator get_structured_light_objectget_structured_light_objectGetStructuredLightObjectGetStructuredLightObjectGetStructuredLightObject abgerufen werden.

Im Folgenden wird der Dekodiervorgang ausführlich erklärt:

Wie in gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern angemerkt, ist es im ersten Schritt notwendig zu entscheiden, ob ein Kamerapixel eine Region beobachtet, die einen weißen Streifen reflektiert oder einen schwarzen Streifen reflektiert. Um diesen Entscheidungsprozess zu vereinfachen, werden Normalisierungsbilder benutzt und ein lokal wechselnder Schwellenwert bestimmt, der variierende Reflexionsgrade des Objekts und variierende Lichtverhältnisse verarbeiten kann. Während des Dekodiervorgangs der aufgenommenen Kamerabilder werden alle Gray-Code-Bilder mit diesem vorberechneten Schwellenwert verglichen. Ein Kamerapixel wird als hell klassifiziert, wenn sein Grauwert größer oder gleich diesem Schwellenwert ist.

Ferner wird während des Dekodiervorgangs die Musterregion bestimmt. Die Segmentierung wird vom Parameter 'min_gray_difference'"min_gray_difference""min_gray_difference""min_gray_difference""min_gray_difference" (siehe set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam) kontrolliert.

Angenommen, es wurden n Gray-Code-Bilder verarbeitet, erhält man für jedes Pixel einen binären n-bit Code. Aus dieser Folge lassen sich Zeile und Spalte des Monitors bis auf bestimmen.

Besteht das StructuredLightModelStructuredLightModelStructuredLightModelStructuredLightModelstructuredLightModel nicht nur aus Gray-Code-Bildern, sondern ist ein Hybrid-System mit Phasenbildern (see gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern), so werden im nächsten Schritt die Phasenbilder dekodiert. Das Ergebnis ist ein subpixelgenaues Korrespondenzbild zwischen Monitor- und Kamerakoordinaten, das die Information beinhaltet, welches Kamerapixel die Reflexion welches Monitorpixels beobachtet.

Wenn der Parameter 'pattern_type'"pattern_type""pattern_type""pattern_type""pattern_type" des Modells StructuredLightModelStructuredLightModelStructuredLightModelStructuredLightModelstructuredLightModel auf 'single_stripe'"single_stripe""single_stripe""single_stripe""single_stripe" gesetzt wird, wird im ersten Schritt des Dekodierprozesses entschieden, welcher Einzelstreifen sein Licht auf einen Kamerapixel wirft. Die Gray-Code-Folge und die Phase werden dann verwendet, um die Position innerhalb des gefundenen Einzelstreifens zu verfeinern.

Es kann vorkommen, dass die detektierte Gray-Code-Folge eines Pixels falsch ist. Dies kann zu Werten im Korrespondenzbild führen, die Monitor- Zeilen und -Spalten darstellen, die größer als die Monitor-Breite und -Höhe sind. Um diese Probleme zu vermeiden, ist der letzte Schritt des Dekodiervorgangs die Entfernung dieser Werte aus dem Korrespondenzbild.

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

CameraImagesCameraImagesCameraImagesCameraImagescameraImages (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte / uint2)

Aufgenommene Kamerabilder.

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)
* Set the expected black/white contrast in the region of interest
set_structured_light_model_param (StructuredLightModel, \
                                  'min_gray_difference', 70)
* Decode the camera images
decode_structured_light_pattern (CameraImages, StructuredLightModel)
* Get the computed correspondences and defects
get_structured_light_object (CorrespondenceImages, StructuredLightModel, \
                             'correspondence_image')
set_structured_light_model_param (StructuredLightModel, 'derivative_sigma', \
                                  Sigma)
get_structured_light_object (DefectImage, StructuredLightModel, \
                             'defect_image')

Ergebnis

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

Vorgänger

gen_structured_light_patterngen_structured_light_patternGenStructuredLightPatternGenStructuredLightPatternGenStructuredLightPattern

Nachfolger

get_structured_light_objectget_structured_light_objectGetStructuredLightObjectGetStructuredLightObjectGetStructuredLightObject

Siehe auch

create_structured_light_modelcreate_structured_light_modelCreateStructuredLightModelCreateStructuredLightModelCreateStructuredLightModel, set_structured_light_model_paramset_structured_light_model_paramSetStructuredLightModelParamSetStructuredLightModelParamSetStructuredLightModelParam

Modul

3D Metrology