create_sheet_of_light_model
— Anlegen eines generischen Modells zur Durchführung von 3D-Messungen
nach dem Lichtschnittverfahren.
create_sheet_of_light_model(ProfileRegion : : GenParamName, GenParamValue : SheetOfLightModelID)
Mit Hilfe von create_sheet_of_light_model
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_param
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 SheetOfLightModelID
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:
ProfileRegion
:
definiert die Region des
Profilbildes, die durch den Operator
measure_profile_sheet_of_light
verarbeitet wird. Diese
Region sollte rechteckig sein und kann zum Beispiel mit Hilfe von
gen_rectangle1
erzeugt werden. Wenn ProfileRegion
nicht rechteckig ist wird ihre kleinste umschließende Region benutzt.
ProfileRegion
wird nur von dem Operator
measure_profile_sheet_of_light
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_param
für eine detaillierte
Beschreibung der Modellparameter):
wird auf 'center_of_gravity' gesetzt
wird auf 100 gesetzt
wird auf 512 gesetzt
wird auf 'first' gesetzt
wird auf 'none' gesetzt
wird auf '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 GenParamName
und
GenParamValue
ist es möglich die Standardwerte des
Lichtschnitt-Modells zu ändern. Diese Änderungen können ebenfalls mit dem
Operator set_sheet_of_light_param
durchgeführt werden. Bei diesem
Operator kann jedoch nur ein einziger Parameter verändert werden, während
mit create_sheet_of_light_model
mehrere Parameter mit einem Aufruf
verändert werden können. set_sheet_of_light_param
liefert eine
detaillierte Beschreibung der Modellparameter.
Bitte beachten Sie, dass die folgenden Modellparameter nicht mit dem
Operator create_sheet_of_light_model
, sondern nur mit dem Operator
set_sheet_of_light_param
gesetzt werden können:
'camera_parameter' , 'camera_pose' ,
'lightplane_pose' , und 'movement_pose' .
In jedem Fall können die aktuell eingestellten Modellparameter mit
get_sheet_of_light_param
ausgelesen werden. Die Namen der Parameter,
die für das konkrete Modell gesetzt bzw. abgefragt werden können, liefert
query_sheet_of_light_params
.
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_param
auf den Wert '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_y' , 'scale_z' , 'offset_x' ,
'offset_y' ,'offset_z' . Die Beschreibung von
set_sheet_of_light_param
enthält detaillierte Informationen
über diese Parameter.
Verwendung des Handles in mehreren Threads
Es ist zu beachten, dass man bei der Verwendung eines Lichtschnitt-Modells '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 entsprechenden Operatoreintrags 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.
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.
ProfileRegion
(input_object) region →
object
Region in welcher die zu detektierenden Profile gesucht werden. Wenn diese Region nicht rechteckig ist, wird die kleinste umschließende rechteckige Region verwendet.
GenParamName
(input_control) attribute.name(-array) →
(string)
Namen der generischen Parameter, die für die Detektion des Profils eingestellt werden können.
Defaultwert: 'min_gray'
Werteliste: 'ambiguity_solving' , 'calibration' , 'method' , 'min_gray' , 'num_profiles' , 'offset_x' , 'offset_y' , 'offset_z' , 'scale' , 'scale_x' , 'scale_y' , 'scale_z' , 'score_type'
GenParamValue
(input_control) attribute.value(-array) →
(integer / real / string)
Wert der generischen Parameter, die für die Detektion des Profils eingestellt werden können.
Defaultwert: 50
Wertevorschläge: 'default' , 'center_of_gravity' , 'last' , 'first' , 'brightest' , 'none' , 'intensity' , 'width' , 'offset_scale' , 50, 100, 150, 180
SheetOfLightModelID
(output_control) sheet_of_light_model →
(handle)
Handle für den Zugriff auf das Lichtschnitt-Modell
* 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
create_sheet_of_light_model
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.
set_sheet_of_light_param
,
measure_profile_sheet_of_light
clear_sheet_of_light_model
,
calibrate_sheet_of_light
3D Metrology