set_surface_model_paramT_set_surface_model_paramSetSurfaceModelParamSetSurfaceModelParamset_surface_model_param — Setzen von Parametern eines Oberflächenmodells.
Setzt die Kamerapose der Kamera mit Nummer X.
X ist ein 0-basierter Index und standardmäßig 0 (erste Kamera).
Beim Hinzufügen einer neuen Kamera wird die Pose standardmäßig auf
die Nullpose [0,0,0,0,0,0,0] gesetzt, was bedeutet,
dass die Kamera und der 3D-Sensor den gleichen Ursprung haben.
Löscht alle vorher im Oberflächenmodell gesetzten Kameras.
Objektsymmetrien definieren.
Die folgenden Parameter können verwendet werden, um im Oberflächenmodell
Symmetrien des Objekts zu setzen.
Diese Information kann verwendet werden, um das oberflächenbasierte
Matching zu beschleunigen.
Für mit 'train_3d_edges'"train_3d_edges""train_3d_edges""train_3d_edges""train_3d_edges""train_3d_edges" erstellte Oberflächenmodelle können
keine Symmetrien gesetzt werden.
Standardmäßig sind keine Symmetrien aktiviert.
Zu beachten ist, dass set_surface_model_paramset_surface_model_paramSetSurfaceModelParamSetSurfaceModelParamSetSurfaceModelParamset_surface_model_param beim
Ändern der Symmetrien einige interne Datenstrukturen neu aufbaut,
damit das oberflächenbasierte Matching schneller wird.
Dies kann einige Sekunden dauern.
Setzt die Richtung der Symmetrieachse des Modells.
GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value muss ein Tupel mit drei Zahlen sein, welche die
x-, y- und z-Werte der Achsenrichtung sind.
Das Modell wird modifiziert, um diese Information zum Beschleunigen
des oberflächenbasierten Matchings zu verwenden.
Ein Objekt (Zylinder), wobei [0,0,1] die Richtung der
Symmetrieachse ist.
Wird 'symmetry_axis_direction'"symmetry_axis_direction""symmetry_axis_direction""symmetry_axis_direction""symmetry_axis_direction""symmetry_axis_direction" zusammen mit einer
Einschränkung des Posenbereichs verwendet (siehe unten),
wird der Wert von 'symmetry_axis_direction'"symmetry_axis_direction""symmetry_axis_direction""symmetry_axis_direction""symmetry_axis_direction""symmetry_axis_direction" zusätzlich
verwendet, als wäre er mit
'pose_restriction_allowed_axis_direction'"pose_restriction_allowed_axis_direction""pose_restriction_allowed_axis_direction""pose_restriction_allowed_axis_direction""pose_restriction_allowed_axis_direction""pose_restriction_allowed_axis_direction" gesetzt worden.
Wird 'symmetry_axis_origin'"symmetry_axis_origin""symmetry_axis_origin""symmetry_axis_origin""symmetry_axis_origin""symmetry_axis_origin" zusammen mit einer
Einschränkung des Posenbereichs verwendet (siehe unten),
wird der Wert von 'symmetry_axis_origin'"symmetry_axis_origin""symmetry_axis_origin""symmetry_axis_origin""symmetry_axis_origin""symmetry_axis_origin" zusätzlich
verwendet, als wäre er mit
'pose_restriction_allowed_axis_origin'"pose_restriction_allowed_axis_origin""pose_restriction_allowed_axis_origin""pose_restriction_allowed_axis_origin""pose_restriction_allowed_axis_origin""pose_restriction_allowed_axis_origin" gesetzt worden.
Setzt eine oder mehr Symmetrieposen des Modells
(siehe create_posecreate_poseCreatePoseCreatePoseCreatePosecreate_pose).
Das Modell muss, wenn es mit einer dieser Posen transformiert wird,
zu sich selbst identisch sein.
Das Modell wird modifiziert, um diese Information zum Beschleunigen
des oberflächenbasierten Matchings zu verwenden.
Wenn eine oder mehr Symmetrieposen gesetzt werden, erzeugt
set_surface_model_paramset_surface_model_paramSetSurfaceModelParamSetSurfaceModelParamSetSurfaceModelParamset_surface_model_param intern alle durch Invertierung
und Verkettung dieser Posen erzeugbaren weiteren Posen.
Um alle derart intern erstellten Posen zu erhalten, kann
get_surface_model_paramget_surface_model_paramGetSurfaceModelParamGetSurfaceModelParamGetSurfaceModelParamget_surface_model_param mit dem Parameter
'symmetry_poses_all'"symmetry_poses_all""symmetry_poses_all""symmetry_poses_all""symmetry_poses_all""symmetry_poses_all" verwendet werden.
Wenn intern mehr als 100 Posen gefunden werden, wird ein Fehler
zurückgegeben, da dies auf ungültige Symmetrieposen hindeutet.
Standardmäßig gibt es keine Poseneinschränkungen, d.h. das Modell
wird in allen möglichen Rotationen gesucht.
Zu beachten ist, dass set_surface_model_paramset_surface_model_paramSetSurfaceModelParamSetSurfaceModelParamSetSurfaceModelParamset_surface_model_param beim
Ändern der Poseneinschränkungen einige interne Datenstrukturen neu
aufbaut, damit das oberflächenbasierte Matching schneller wird.
Dies kann einige Sekunden dauern.
Setzt die Referenzpose des Modells.
Die Referenzpose kann zusammen mit
'pose_restriction_max_angle_diff'"pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff"
verwendet werden, um den erlaubten Rotationsbereichs des Modells
einzuschränken.
Andernfalls muss GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value eine Pose sein (siehe
create_posecreate_poseCreatePoseCreatePoseCreatePosecreate_pose).
Der Translationsanteil der Pose wird ignoriert.
Zu beachten ist auch, dass sowohl
'pose_restriction_reference_pose'"pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose" als auch
'pose_restriction_max_angle_diff'"pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff" gesetzt werden
müssen, damit eine Poseneinschränkung aktiv ist.
Legt fest, um wie viel die Rotation eine beim oberflächenbasierten
Matching gefundenen Pose von der Rotation der mit
'pose_restriction_reference_pose'"pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose" gesetzten Referenzpose
abweichen darf.
Der Winkel wird im Bogenmaß angegeben.
Andernfalls muss GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value ein Winkel sein, der angibt,
um wie viel die Rotation einer gefundenen Pose 'P'"P""P""P""P""P"
von der Referenzpose 'R'"R""R""R""R""R" abweiche darf.
Der Vergleich erfolgt für jeden der Modellpunkte über die Gleichung
, wobei der Vektor des 3D-Punktes ist.
Rotation um die mit diesem Parameter gesetzte Achse werden
beim Vergleichen von gefundenen Posen mit
der mit 'pose_restriction_reference_pose'"pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose""pose_restriction_reference_pose" gesetzten
Referenzpose ignoriert.
Andernfalls muss GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value drei Werte enthalten,
die die Richtung der zu ignorierenden Achse in Modellkoordinaten
enthält.
Wenn eine solche Achse gesetzt ist, so darf sich ihre Richtung in
einer gefundenen Pose von der Richtung der Achse in der
Referenzpose höchstens um den mit
'pose_restriction_max_angle_diff'"pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff""pose_restriction_max_angle_diff" gesetzten Winkel
unterscheiden.
Der Vergleich der Rotation einer gefundenen Pose mit der
Referenzpose erfolgt dann mit der Gleichung
.
Setzen der Selbstähnlichkeit.
Die folgenden Parameter können verwendet werden, um die
Optimierung bezüglich selbstähnlicher Posen zu steuern.
Die Parameter können nur gesetzt werden, wenn create_surface_modelcreate_surface_modelCreateSurfaceModelCreateSurfaceModelCreateSurfaceModelcreate_surface_model
mit aktiviertem Parameter 'train_self_similar_poses'"train_self_similar_poses""train_self_similar_poses""train_self_similar_poses""train_self_similar_poses""train_self_similar_poses"
aufgerufen wurde.
Zu beachten ist, dass set_surface_model_paramset_surface_model_paramSetSurfaceModelParamSetSurfaceModelParamSetSurfaceModelParamset_surface_model_param beim
Ändern der Selbstähnlichkeitssuche einige interne Datenstrukturen neu
aufbaut, damit das oberflächenbasierte Matching schneller wird.
Dies kann einige Sekunden dauern.
Setzt die selbstähnlichen Posen des Modells.
Dies sind Posen, unter denen das Objekt sehr ähnlich aussieht, und
die daher bei der Suche verwechselt werden können.
In einigen Fällen kann dieser Operator bereits am Modell durchgeführte
Änderungen nicht mehr rückgängig machen, wenn während der
Aktualisierung der internen Datenstrukturen ein Fehler wie z.B. zu wenig
Speicher auftritt. In diesem Fall kann das Modell in einem
inkonsistenten, nur teilweise geänderten Zustand bleiben.
Das Modell sollte dann gelöscht und neu erzeugt werden.
Dies betrifft nicht Fehler, die aufgrund ungültiger Parameterwerte
auftreten, da diese schon vor der Aktualisierung des Modells
geprüft werden.
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.
Wenn alle Parameter korrekt sind liefert set_surface_model_paramset_surface_model_paramSetSurfaceModelParamSetSurfaceModelParamSetSurfaceModelParamset_surface_model_param den
Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.