KlassenKlassenKlassenKlassen | | | | Operatoren

create_sheet_of_light_modelcreate_sheet_of_light_modelCreateSheetOfLightModelcreate_sheet_of_light_modelCreateSheetOfLightModelCreateSheetOfLightModel (Operator)

Name

create_sheet_of_light_modelcreate_sheet_of_light_modelCreateSheetOfLightModelcreate_sheet_of_light_modelCreateSheetOfLightModelCreateSheetOfLightModel — Anlegen eines generischen Modells zur Durchführung von 3D-Messungen nach dem Lichtschnittverfahren.

Signatur

create_sheet_of_light_model(ProfileRegion : : GenParamNames, GenParamValues : SheetOfLightModelID)

Herror create_sheet_of_light_model(const Hobject ProfileRegion, const char* GenParamNames, const Hlong GenParamValues, Hlong* SheetOfLightModelID)

Herror T_create_sheet_of_light_model(const Hobject ProfileRegion, const Htuple GenParamNames, const Htuple GenParamValues, Htuple* SheetOfLightModelID)

Herror create_sheet_of_light_model(Hobject ProfileRegion, const HTuple& GenParamNames, const HTuple& GenParamValues, Hlong* SheetOfLightModelID)

HSheetOfLightModel HRegion::CreateSheetOfLightModel(const HTuple& GenParamNames, const HTuple& GenParamValues) const

void HSheetOfLightModel::CreateSheetOfLightModel(const HRegion& ProfileRegion, const HTuple& GenParamNames, const HTuple& GenParamValues)

void CreateSheetOfLightModel(const HObject& ProfileRegion, const HTuple& GenParamNames, const HTuple& GenParamValues, HTuple* SheetOfLightModelID)

HSheetOfLightModel HRegion::CreateSheetOfLightModel(const HTuple& GenParamNames, const HTuple& GenParamValues) const

HSheetOfLightModel HRegion::CreateSheetOfLightModel(const HString& GenParamNames, Hlong GenParamValues) const

HSheetOfLightModel HRegion::CreateSheetOfLightModel(const char* GenParamNames, Hlong GenParamValues) const

void HSheetOfLightModel::HSheetOfLightModel(const HRegion& ProfileRegion, const HTuple& GenParamNames, const HTuple& GenParamValues)

void HSheetOfLightModel::HSheetOfLightModel(const HRegion& ProfileRegion, const HString& GenParamNames, Hlong GenParamValues)

void HSheetOfLightModel::HSheetOfLightModel(const HRegion& ProfileRegion, const char* GenParamNames, Hlong GenParamValues)

void HSheetOfLightModel::CreateSheetOfLightModel(const HRegion& ProfileRegion, const HTuple& GenParamNames, const HTuple& GenParamValues)

void HSheetOfLightModel::CreateSheetOfLightModel(const HRegion& ProfileRegion, const HString& GenParamNames, Hlong GenParamValues)

void HSheetOfLightModel::CreateSheetOfLightModel(const HRegion& ProfileRegion, const char* GenParamNames, Hlong GenParamValues)

void HOperatorSetX.CreateSheetOfLightModel(
[in] IHUntypedObjectX* ProfileRegion, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues, [out] VARIANT* SheetOfLightModelID)

IHSheetOfLightModelX* HRegionX.CreateSheetOfLightModel(
[in] VARIANT GenParamNames, [in] VARIANT GenParamValues)

void HSheetOfLightModelX.CreateSheetOfLightModel(
[in] IHRegionX* ProfileRegion, [in] VARIANT GenParamNames, [in] VARIANT GenParamValues)

static void HOperatorSet.CreateSheetOfLightModel(HObject profileRegion, HTuple genParamNames, HTuple genParamValues, out HTuple sheetOfLightModelID)

HSheetOfLightModel HRegion.CreateSheetOfLightModel(HTuple genParamNames, HTuple genParamValues)

HSheetOfLightModel HRegion.CreateSheetOfLightModel(string genParamNames, int genParamValues)

public HSheetOfLightModel(HRegion profileRegion, HTuple genParamNames, HTuple genParamValues)

public HSheetOfLightModel(HRegion profileRegion, string genParamNames, int genParamValues)

void HSheetOfLightModel.CreateSheetOfLightModel(HRegion profileRegion, HTuple genParamNames, HTuple genParamValues)

void HSheetOfLightModel.CreateSheetOfLightModel(HRegion profileRegion, string genParamNames, int genParamValues)

Beschreibung

Mit Hilfe von create_sheet_of_light_modelcreate_sheet_of_light_modelCreateSheetOfLightModelcreate_sheet_of_light_modelCreateSheetOfLightModelCreateSheetOfLightModel wird ein generisches Modell zur Durchführung von 3D-Messungen nach dem Lichtschnittverfahren angelegt.

Das Lichtschnittverfahren ermöglicht es, die Oberfläche von lichtstreuenden Körpern zu rekonstruieren. Hierfür werden eine Kamera mit Flächensensor und ein Lichtlinienprojektor (typischerweise ein Laserlinienprojektor) benötigt. Der Linienprojektor und die Kamera haben eine feste Anordnung zueinander. Ihre optischen Achsen bilden einen sogenannten Triangulationswinkel, dessen Wert typischerweise zwischen 30° und 60° ausgewählt wird. Die projizierte Lichtlinie beschreibt eine Ebene im Raum. Diese Ebene schneidet die Oberfläche des zu messenden Körpers, so dass ein Profil der Oberfläche für die Kamera sichtbar wird. Durch relative Bewegung des zu messenden Körpers unter dem Messsystem (bestehend aus Kamera und Linienprojektor in fester Anordnung) können nacheinander mehrere Profile aufgenommen werden, und somit die gesamte Oberfläche des Körpers rekonstruiert werden. Je nach Anforderung kann der zu messende Körper unter dem Messsystem bewegt werden oder auch das Messsystem über dem Körper. Bitte bemerken Sie, dass die Profile annähernd waagerecht orientiert sein müssen, weil sie spaltenweise verarbeitet werden.

Wenn die geometrischen Eigenschaften des Messsystems bekannt sind, ist es möglich kalibrierte dreidimensionale Koordinaten der rekonstruierten Oberfläche zu berechnen. Die Referenzdokumentation zum Operator set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam liefert einen Überblick über die hierzu benötigte Information. Sind diese Informationen nicht vorhanden, so wird als Ergebnis der Messung nur ein Disparitätsbild erzeugt, bei welchem die Pixelwerte der subpixel-genauen Position des detektierten Profils entsprechen.

Als Ergebnis liefert der Operator in SheetOfLightModelIDSheetOfLightModelIDSheetOfLightModelIDSheetOfLightModelIDSheetOfLightModelIDsheetOfLightModelID ein Handle zurück, das für alle weiteren Lichtschnittverfahren-Operationen verwendet wird, beispielsweise um Modelleinstellungen zu ändern, um Profile zu messen, um Kalibriertransformationen anzuwenden oder um auf die Messergebnisse zuzugreifen.

Erforderliche ikonische Eingabeparameter

Der folgende ikonische Parameter muss gesetzt werden, um Messungen durchführen zu können:

ProfileRegionProfileRegionProfileRegionProfileRegionProfileRegionprofileRegion:

definiert die Region des Profilbildes, die durch den Operator measure_profile_sheet_of_lightmeasure_profile_sheet_of_lightMeasureProfileSheetOfLightmeasure_profile_sheet_of_lightMeasureProfileSheetOfLightMeasureProfileSheetOfLight verarbeitet wird. Diese Region sollte rechteckig sein und kann zum Beispiel mit Hilfe von gen_rectangle1gen_rectangle1GenRectangle1gen_rectangle1GenRectangle1GenRectangle1 erzeugt werden. Wenn ProfileRegionProfileRegionProfileRegionProfileRegionProfileRegionprofileRegion nicht rechteckig ist wird ihre kleinste umschließende Region benutzt. ProfileRegionProfileRegionProfileRegionProfileRegionProfileRegionprofileRegion wird nur von dem Operator measure_profile_sheet_of_lightmeasure_profile_sheet_of_lightMeasureProfileSheetOfLightmeasure_profile_sheet_of_lightMeasureProfileSheetOfLightMeasureProfileSheetOfLight berücksichtigt und wird bei der Verarbeitung von Disparitätsbildern ignoriert.

Standardeinstellung des Lichtschnitt-Modells

Die Standardeinstellungen des Lichtschnitt-Modells wurden ausgewählt, um Messungen in einer Grundkonfiguration durchführen zu können. Die folgende Liste gibt einen Überblick über die Standardwerte der Modellparameter (siehe set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam für eine detaillierte Beschreibung der Modellparameter):

'method'"method""method""method""method""method"

wird auf 'center_of_gravity'"center_of_gravity""center_of_gravity""center_of_gravity""center_of_gravity""center_of_gravity" gesetzt

'min_gray'"min_gray""min_gray""min_gray""min_gray""min_gray":

wird auf 100 gesetzt

'num_profiles'"num_profiles""num_profiles""num_profiles""num_profiles""num_profiles"

wird auf 512 gesetzt

'ambiguity_solving'"ambiguity_solving""ambiguity_solving""ambiguity_solving""ambiguity_solving""ambiguity_solving"

wird auf 'first'"first""first""first""first""first" gesetzt

'score_type'"score_type""score_type""score_type""score_type""score_type"

wird auf 'none'"none""none""none""none""none" gesetzt

'calibration'"calibration""calibration""calibration""calibration""calibration"

wird auf 'none'"none""none""none""none""none" gesetzt

Ändern der Modelleinstellung

Wir empfehlen die Modelleinstellungen an die konkrete Messaufgabe anzupassen, um die Qualität der Messung zu erhöhen oder um die Laufzeit zu verkürzen. Eine Änderung der Modelleinstellung ist ebenfalls erforderlich, um kalibrierte Messwerte zu ermitteln.

Mit Hilfe der generischen Parameter GenParamNamesGenParamNamesGenParamNamesGenParamNamesGenParamNamesgenParamNames und GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues ist es möglich die Standardwerte des Lichtschnitt-Modells zu ändern. Diese Änderungen können ebenfalls mit dem Operator set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam durchgeführt werden. Bei diesem Operator kann jedoch nur ein einziger Parameter verändert werden, während mit create_sheet_of_light_modelcreate_sheet_of_light_modelCreateSheetOfLightModelcreate_sheet_of_light_modelCreateSheetOfLightModelCreateSheetOfLightModel mehrere Parameter mit einem Aufruf verändert werden können. set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam liefert eine detaillierte Beschreibung der Modellparameter.

Bitte beachten Sie, dass die folgenden Modellparameter nicht mit dem Operator create_sheet_of_light_modelcreate_sheet_of_light_modelCreateSheetOfLightModelcreate_sheet_of_light_modelCreateSheetOfLightModelCreateSheetOfLightModel, sondern nur mit dem Operator set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam gesetzt werden können: 'camera_parameter'"camera_parameter""camera_parameter""camera_parameter""camera_parameter""camera_parameter", 'camera_pose'"camera_pose""camera_pose""camera_pose""camera_pose""camera_pose", 'lightplane_pose'"lightplane_pose""lightplane_pose""lightplane_pose""lightplane_pose""lightplane_pose", und 'movement_pose'"movement_pose""movement_pose""movement_pose""movement_pose""movement_pose".

In jedem Fall können die aktuell eingestellten Modellparameter mit get_sheet_of_light_paramget_sheet_of_light_paramGetSheetOfLightParamget_sheet_of_light_paramGetSheetOfLightParamGetSheetOfLightParam ausgelesen werden. Die Namen der Parameter, die für das konkrete Modell gesetzt bzw. abgefragt werden können, liefert query_sheet_of_light_paramsquery_sheet_of_light_paramsQuerySheetOfLightParamsquery_sheet_of_light_paramsQuerySheetOfLightParamsQuerySheetOfLightParams.

Verwendung des vereinfachten Parameter des Lichtschnitt-Modells

Wenn ein einfacher Aufbau vorliegt oder keine metrische Messung nötig ist, können die Disparitäten mit einem stark vereinfachten Parametersatz in 3D umgewandelt werden.

Durch das Setzen der Kalibrierung mit Hilfe von set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam auf den Wert 'offset_scale'"offset_scale""offset_scale""offset_scale""offset_scale""offset_scale" werden die Kameraparameter und Posen des Lichschnitt-Modells so gesetzt, dass Pixel als Maßstab für eine Überführung in 3D genutzt werden können. Das erlaubt das erzeugen von 3D Modellen und 3D Bildern aus einem unkalibrierten Aufbau.

Die sechs vereinfachten Parameter, die die Transformation von Disparitäten in 3D steuern sind: 'scale_x'"scale_x""scale_x""scale_x""scale_x""scale_x", 'scale_y'"scale_y""scale_y""scale_y""scale_y""scale_y", 'scale_z'"scale_z""scale_z""scale_z""scale_z""scale_z", 'offset_x'"offset_x""offset_x""offset_x""offset_x""offset_x", 'offset_y'"offset_y""offset_y""offset_y""offset_y""offset_y",'offset_z'"offset_z""offset_z""offset_z""offset_z""offset_z". Die Beschreibung von set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam enthält detaillierte Informationen über diese Parameter.

Freigabe des Lichtschnitt-Modells

Da in create_sheet_of_light_modelcreate_sheet_of_light_modelCreateSheetOfLightModelcreate_sheet_of_light_modelCreateSheetOfLightModelCreateSheetOfLightModel und während der weiteren Arbeit mit dem Modell Speicher reserviert wird, sollte das Modell, wenn es nicht mehr benötigt wird, mit clear_sheet_of_light_modelclear_sheet_of_light_modelClearSheetOfLightModelclear_sheet_of_light_modelClearSheetOfLightModelClearSheetOfLightModel wieder freigegeben werden.

Verwendung des Handles in mehreren Threads

Es ist zu beachten, dass man bei der Verwendung eines Lichtschnitt-Modells 'SheetOfLightModelID'"SheetOfLightModelID""SheetOfLightModelID""SheetOfLightModelID""SheetOfLightModelID""SheetOfLightModelID" in mehreren Threads sorgfältig umgehen muss. Ein und dasselbe Handle kann nicht gleichzeitig von unterschiedlichen Threads verwendet werden, wenn diese das Handle modifizieren. Somit muss man besonders vorsichtig sein, wenn die Threads solche Operatoren aufrufen, die Änderungen an den Daten des Handles vornehmen. Ein entsprechender Hinweis ist in dem 'Attention' Abschnitt der Operatoren zu finden. Falls man trotzdem dasselbe Handle in Operatoren verwenden möchte, die gleichzeitig in unterschiedlichen Threads das Handle modifizieren, müssen die Threads synchronisiert werden. Damit wird sichergestellt, dass die Threads keinen gleichzeitigen Zugriff auf das Handle haben. Wenn man nicht sicher ist, ob die Verwendung eines Handles thread-safe ist, kann man im 'Attention' Abschnitt des entsprechenen Opertoreintrags im Referenzhandbuch nachsehen, ob es eine Warnung gibt, die auf dieses Problem hinweist. Unterschiedliche Handles hingegen können unabhängig und sicher in unterschiedlichen Threads verwendet werden.

Parallelisierung

Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.

Parameter

ProfileRegionProfileRegionProfileRegionProfileRegionProfileRegionprofileRegion (input_object)  region objectHRegionHRegionHRegionHRegionXHobject

Region in welcher die zu detektierenden Profile gesucht werden. Wenn diese Region nicht rechteckig ist, wird die kleinste umschließende rechteckige Region verwendet.

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

Namen der generischen Parameter, die für die Detektion des Profils eingestellt werden können.

Defaultwert: 'min_gray' "min_gray" "min_gray" "min_gray" "min_gray" "min_gray"

Werteliste: 'ambiguity_solving'"ambiguity_solving""ambiguity_solving""ambiguity_solving""ambiguity_solving""ambiguity_solving", 'calibration'"calibration""calibration""calibration""calibration""calibration", 'method'"method""method""method""method""method", 'min_gray'"min_gray""min_gray""min_gray""min_gray""min_gray", 'num_profiles'"num_profiles""num_profiles""num_profiles""num_profiles""num_profiles", 'offset_x'"offset_x""offset_x""offset_x""offset_x""offset_x", 'offset_y'"offset_y""offset_y""offset_y""offset_y""offset_y", 'offset_z'"offset_z""offset_z""offset_z""offset_z""offset_z", 'scale'"scale""scale""scale""scale""scale", 'scale_x'"scale_x""scale_x""scale_x""scale_x""scale_x", 'scale_y'"scale_y""scale_y""scale_y""scale_y""scale_y", 'scale_z'"scale_z""scale_z""scale_z""scale_z""scale_z", 'score_type'"score_type""score_type""score_type""score_type""score_type"

GenParamValuesGenParamValuesGenParamValuesGenParamValuesGenParamValuesgenParamValues (input_control)  attribute.value(-array) HTupleHTupleHTupleVARIANTHtuple (integer / real / string) (int / long / double / string) (Hlong / double / HString) (Hlong / double / char*) (Hlong / double / BSTR) (Hlong / double / char*)

Wert der generischen Parameter, die für die Detektion des Profils eingestellt werden können.

Defaultwert: 50

Werteliste: 50, 100, 150, 180, 'brightest'"brightest""brightest""brightest""brightest""brightest", 'center_of_gravity'"center_of_gravity""center_of_gravity""center_of_gravity""center_of_gravity""center_of_gravity", 'default'"default""default""default""default""default", 'first'"first""first""first""first""first", 'intensity'"intensity""intensity""intensity""intensity""intensity", 'last'"last""last""last""last""last", 'none'"none""none""none""none""none", 'offset_scale'"offset_scale""offset_scale""offset_scale""offset_scale""offset_scale", 'width'"width""width""width""width""width"

SheetOfLightModelIDSheetOfLightModelIDSheetOfLightModelIDSheetOfLightModelIDSheetOfLightModelIDsheetOfLightModelID (output_control)  sheet_of_light_model HSheetOfLightModel, HTupleHTupleHSheetOfLightModel, HTupleHSheetOfLightModelX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle für den Zugriff auf das Lichtschnitt-Modell

Beispiel (HDevelop)

* Create the rectangular region in which the profiles are measured.
gen_rectangle1 (ProfileRegion, 120, 75, 195, 710)
*
* Create a model in order to measure profiles according to
* the sheet-of-light technique. Simultaneously set some
* parameters for the model.
create_sheet_of_light_model (ProfileRegion, ['min_gray','num_profiles', \
                             'ambiguity_solving','score_type'], \
                             [70,290,'first','width'], \
  SheetOfLightModelID)
*
* Measure the profile from successive images
for Index := 1 to 290 by 1
    read_image (ProfileImage, 'sheet_of_light/connection_rod_'+Index$'.3')
    dev_display (ProfileImage)
    dev_display (ProfileRegion)
    measure_profile_sheet_of_light (ProfileImage, SheetOfLightModelID, [])
endfor
*
* Get the resulting disparity and score images
get_sheet_of_light_result (Disparity, SheetOfLightModelID, 'disparity')
get_sheet_of_light_result (Score, SheetOfLightModelID, 'score')
*
* Close the sheet-of-light handle once the measurement
* has been performed
clear_sheet_of_light_model (SheetOfLightModelID)

Ergebnis

create_sheet_of_light_modelcreate_sheet_of_light_modelCreateSheetOfLightModelcreate_sheet_of_light_modelCreateSheetOfLightModelCreateSheetOfLightModel liefert den Wert 2 (H_MSG_TRUE), wenn die übergebenen Parameter korrekt sind, und das Model angelegt werden kann. Ansonsten wird eine Fehlerbehandlung durchgeführt.

Vorgänger

gen_rectangle1gen_rectangle1GenRectangle1gen_rectangle1GenRectangle1GenRectangle1

Nachfolger

set_sheet_of_light_paramset_sheet_of_light_paramSetSheetOfLightParamset_sheet_of_light_paramSetSheetOfLightParamSetSheetOfLightParam, measure_profile_sheet_of_lightmeasure_profile_sheet_of_lightMeasureProfileSheetOfLightmeasure_profile_sheet_of_lightMeasureProfileSheetOfLightMeasureProfileSheetOfLight

Siehe auch

clear_sheet_of_light_modelclear_sheet_of_light_modelClearSheetOfLightModelclear_sheet_of_light_modelClearSheetOfLightModelClearSheetOfLightModel, calibrate_sheet_of_lightcalibrate_sheet_of_lightCalibrateSheetOfLightcalibrate_sheet_of_lightCalibrateSheetOfLightCalibrateSheetOfLight

Modul

3D Metrology


KlassenKlassenKlassenKlassen | | | | Operatoren