query_calib_data_observ_indices
— Abfragen von Information zur Beziehung zwischen Kameras,
Kalibrierkörpern und Kalibrierkörperposen.
query_calib_data_observ_indices( : : CalibDataID, ItemType, ItemIdx : Index1, Index2)
Ein Kalibrierdatenmodell (CalibDataID
) speichert einen Satz von
Beobachtungsdaten, die mit set_calib_data_observ_points
zum
Modell hinzugefügt werden. Jede Beobachtung wird einer Kamera
und einer Kalibrierkörperpose zugeordnet. Der Operator
query_calib_data_observ_indices
liefert die Indizes von
Beobachtungsdaten zurück, welche einer bestimmten Kamera bzw. einer
bestimmten Kalibrierkörperpose zugeordnet sind.
Für ItemType
='camera' muss ein gültiger Kameraindex
in ItemIdx
eingegeben werden. Das ist eine Zahl, die zwischen 0
und NumCameras-1
liegt, wobei NumCameras
mit dem Operator
create_calib_data
bereits bei der Erstellung des Modells gesetzt
wurde. Dann liefern die Ausgabeparameter Index1
und Index2
eine Liste von Kalibrierkörperindizes bzw. eine Liste von
Poseindizes zurück. Die Einträge beider Listen bilden Schlüsselpaare
[Index1[I],Index2[I]]
der 'beobachteten' Kalibrierkörperposen
mit I=0..|Index1|-1
und |Index1| = |Index2|
.
Für ItemType
='calib_obj_pose' muss ein gültiger
Kalibrierkörperindex in ItemIdx
eingegeben werden. Das ist
eine Zahl, die zwischen 0 und NumCalibObjects-1
liegt, wobei
NumCalibObjects
mit dem Operator create_calib_data
bereits bei der Erstellung des Modells gesetzt wurde. Dann liefern die
Ausgabeparameter Index1
und Index2
eine Liste von
Kameraindizes bzw. eine Liste von Kalibrierkörperposen-Indizes zurück.
Jedes Paar [Index1[I],Index2[I]]
mit I=0..|Index1|-1
und |Index1| = |Index2|
, bedeutet, dass die Kamera
Index1[I]
die Kalibrierkörperpose [ItemIdx, Index2[I]]
'beobachtet'.
Dieser Operator ist insbesondere dann nützlich, wenn die Beobachtungsdaten eines Kalibrierdatenmodells untersucht werden sollen. Das ist typischerweise der Fall bei Kalibrierdatenmodellen, die aus einer Datei gelesen werden und deren Konfiguration und Inhalt noch unbekannt sind. Darüber hinaus wird der Operator zum Abfragen einer Liste aller Posen, welche einem Kalibrierkörper zugeordnet sind, benutzt (siehe Beispiel).
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.
CalibDataID
(input_control, Zustand wird modifiziert) calib_data →
(handle)
Handle des Kalibrierdatenmodells.
ItemType
(input_control) string →
(string)
Typ des abgefragten Elements.
Defaultwert: 'camera'
Werteliste: 'calib_obj' , 'camera'
ItemIdx
(input_control) number →
(integer)
Index einer Kamera ID oder eines Kalibrierkörpers (je nach
Auswahl in ItemType
).
Defaultwert: 0
Wertevorschläge: 0, 1, 2
Index1
(output_control) number-array →
(integer)
Liste von Kalibriermarkennummer oder Liste von
Kameranummer (je nach Auswahl in ItemType
).
Index2
(output_control) number-array →
(integer)
Kalibrierkörpernummer.
* Read a calibration model from a file. read_calib_data ('calib_data.ccd',CalibDataID) * Get calibration object indices assigned to calibration object 0. query_calib_data_observ_indices (CalibDataID, 'calib_obj', 0, _, \ CalibObjPoseIndices) * CalibObjPoseIndices contains the list of pose indices of calibration * object 0. In order to be stored in the model, each calibration object * needs to be observed by at least one camera in the setup (a calibration * object pose that is not observed by any camera cannot be stored in * the model). Typically, a calibration object pose can be observed by more * than one camera. Hence, some calibration object pose indices might appear * repeatedly in CalibObjPoseIndices. We use tuple_sort and tuple_uniq to * extract a unique list of calibration object pose indices for calibration * object 0. tuple_sort (CalibObjPoseIndices, CalibObjPoseIndices) tuple_uniq (CalibObjPoseIndices, CalibObjPoseIndices) * Get poses of calibration objects observed by camera 2. calibrate_cameras (CalibDataID, Error) query_calib_data_observ_indices (CalibDataID, 'camera', 2, CalibObjIndices,\ CalibObjPoseIndices) for I := 0 to |CalibObjIndices|-1 by 1 get_calib_data (CalibDataID, 'calib_obj_pose', \ [CalibObjIndices[I], CalibObjPoseIndices[I]], \ 'pose', CalibObjPose) endfor
Calibration