register_object_model_3d_global
— Verfeinern der relativen Lagen der eingegebenen 3D-Objektmodelle
zueinander, basierend auf deren Überlappung.
register_object_model_3d_global( : : ObjectModels3D, HomMats3D, From, To, GenParamName, GenParamValue : HomMats3DOut, Scores)
register_object_model_3d_global
verfeinert die relative Lage
der angegebenen 3D-Objektmodelle zueinander, dieser Vorgang wird auch
globale Registrierung genannt. Ausgehend von
den mit HomMats3D
angegebenen genäherten relativen Lagen
der Modelle aus ObjectModels3D
zueinander werden paarweise
Überlappungsbereiche gesucht. Alle
Eingabemodelle mit erkannten Überlappungen werden im Rahmen
einer Ausgleichungsrechnung so gegeneinander verschoben, dass
die Überlappung maximal ist. Dieser Vorgang wird dann iterativ wiederholt.
Die Lagen der Modelle mit
der höchsten erreichten Überlappung werden in HomMats3DOut
relativ zu einem globalen Referenzsystem zurückgegeben. Die entsprechenden
Transformationen können mit dem Operator affine_trans_object_model_3d
auf die angegebenen 3D-Objektmodelle angewandt werden, um sie in ein
gemeinsames Koordinatensystem zu überführen. Der Parameter
Scores
enthält pro 3D-Objektmodell die Anzahl an gefundenen
Nachbarn mit ausreichender Überlappung.
Wenn für mindestens ein 3D-Objektmodell keine Überlappung gefunden wird,
wird eine Fehlerbehandlung durchgeführt.
Die genäherten relativen Lagen der Modelle müssen mithilfe der Parameter
From
und To
konfiguriert und in HomMats3D
angegeben werden. Es gibt drei mögliche Wege die relative Lage anzugeben:
Erstens kann durch das Setzen von From
auf 'global'
die Interpretation des Parameters HomMats3D
als ein Satz von globalen Transformationen zu einem gemeinsamen
Koordinatenursprung festgelegt werden. Die Anzahl der
Transformationen in HomMats3D
(je 12 Werte pro Transformation)
muss in diesem Fall gleich der Anzahl der 3D-Objektmodelle sein. Der
Parameter To
darf in diesem Fall nicht gesetzt sein.
Diese Parametrisierung
ist für Fälle gedacht, in denen entweder das aufgenommene Objekt oder
die Kamera statisch
bleibt und auf das jeweils Andere eine bekannte Transformation angewandt
wird, z.B. durch einen Drehteller oder einen Roboter. In diesem Fall werden
alle Nachbarschaften, die aufgrund der angegebenen Startlösung denkbar sind,
für die Optimierung berücksichtigt.
Zweitens kann durch das Setzen von From
auf 'previous'
die Interpretation des Parameters HomMats3D
als ein Satz von
relativen Verschiebungen zum jeweils vorhergehenden 3D-Objektmodell festgelegt
werden. Hierfür wird eine Transformation weniger als die Anzahl der
3D-Objektmodelle
benötigt, da die erste Transformation sich auf die Transformation vom ersten
3D-Objektmodell in das Referenzsystem des zweiten bezieht, usw.
Der Parameter
To
darf in diesem Fall nicht gesetzt sein. Der Fall sollte angewandt
werden, wenn die Kamera und das aufgenommene Objekt frei gegeneinander
bewegt werden
und die Transformation jeweils nur zur vorherigen Aufnahme ermittelt wird,
z.B. mit dem Operator register_object_model_3d_pair
.
In diesem Fall werden alle Nachbarschaften, die aufgrund der angegebenen
Startlösung denkbar sind, für die Optimierung berücksichtigt.
Drittens kann durch das Angeben von Indexpaaren in From
und
To
jede einzelne Transformation in HomMats3D
beschrieben werden. Die angegebenen Transformationen sind demnach immer die
benötigten Transformationen, um das 3D-Objektmodell mit Index
From
in das Koordinatensystem des 3D-Objektmodells mit Index
To
zu verschieben. Die Indizes beziehen sich auf die
Eingabeparameter von ObjectModels3D
.
In diesem Fall werden nur die Nachbarschaften berücksichtigt, die auch
angegeben sind, somit sollten alle nötigen Überlappungen auch
angegeben werden. Dies muss so geschehen, dass zwischen jedem Paar von
Eingabeobjekten ein entsprechender Pfad von Transformationen vorhanden ist.
Wenn ObjectModels3D
3D-Primitive enthält, werden diese intern in
Punktwolken umgewandelt und anschließend als solche behandelt.
Die numerisch maximal erreichbare Positionsgenauigkeit liegt bei etwa 0.1% der Punktwolkengröße. Die Genauigkeit hängt weiter vom Rauschen der Daten, von der Anzahl der Datenpunkte und von der Form der Punktwolken ab.
Der Vorgang der globalen Registrierung kann mit den
Parametern GenParamName
und GenParamValue
weiter reguliert werden.
Es gibt zwei Standardparametersätze, die zwischen schneller Konvergenz ('fast' ) und genauer Überlappung ('accurate' ) abwägen.
Werteliste: 'fast' , 'accurate'
Defaultwert: 'accurate'
Die relative Abtastrate der Eingabemodelle. Der Wert wird relativ zum Durchmesser der jeweiligen 3D-Objektmodelle interpretiert. Ein höherer Wert führt zu schnelleren Ausführungszeiten, während ein niedrigerer Wert zu genaueren Ergebnissen führt.
Vorgeschlagene Werte: 0.03, 0.05, 0.07
Defaultwert: 0.05 ('default_parameters' = 'accurate' ), 0.07 ('default_parameters' = 'fast' )
Assertion: 0 < 'rel_sampling_distance' < 1
Anzahl an Punkten, die für jeden zugeordneten Punkt bei der Berechnung der Überlappung ausgelassen werden. Ein hoher Wert erlaubt eine schnellere Berechnung bei etwas ungenaueren Ergebnissen.
Vorgeschlagene Werte: 1, 2, 20
2 ('default_parameters' = 'accurate' ), 10 ('default_parameters' = 'fast' )
Assertion: 'pose_ref_sub_sampling' > 0
Anzahl der Iterationen zur verbesserung der relativen Lagen. Je besser die initiale Schätzung der Lagen ist, desto weniger Iterationen werden benötigt.
Vorgeschlagene Werte: 1, 3, 10
Defaultwert: 3
Dieser Operator unterstützt Cancel-Timeouts und Interrupts.
ObjectModels3D
(input_control) object_model_3d(-array) →
(handle)
Handle mehrerer 3D-Objektmodelle.
HomMats3D
(input_control) hom_mat3d-array →
(real / integer)
Genäherte relative Lagen der 3D-Objektmodelle.
From
(input_control) number(-array) →
(string / integer)
Typ der genäherten relativen Lagen in
HomMats3D
.
Defaultwert: 'global'
Werteliste: 0, 1, 2, 3, 4, 'global' , 'previous'
To
(input_control) number(-array) →
(integer)
Index des Ziel-3D-Objektmodells für die Angabe der
genäherten relativen Lagen in HomMats3D
, falls
From
Indizes enthält, andernfalls bleibt
dieser Parameter leer.
Defaultwert: []
Werteliste: 0, 1, 2, 3, 4
GenParamName
(input_control) string-array →
(string)
Namen der generischen Parameter zum Steuern der globalen Registrierung.
Defaultwert: []
Werteliste: 'default_parameters' , 'max_num_iterations' , 'pose_ref_sub_sampling' , 'rel_sampling_distance'
GenParamValue
(input_control) number-array →
(real / integer / string)
Werte der generischen Parameter zum Steuern der globalen Registrierung.
Defaultwert: []
Wertevorschläge: 0.03, 0.05, 0.07, 0.1, 0.25, 0.5, 1, 2, 5, 10, 20, 'fast' , 'accurate'
HomMats3DOut
(output_control) hom_mat3d-array →
(real / integer)
Resultierende Transformationen.
Scores
(output_control) number-array →
(real)
Anzahl der gefundenen Nachbarn mit ausreichender Überlappung pro eingegebenem 3D-Objektmodell.
register_object_model_3d_global
liefert den Wert 2 (H_MSG_TRUE) wenn alle
Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung durchgeführt.
read_object_model_3d
,
xyz_to_object_model_3d
,
register_object_model_3d_pair
,
gen_object_model_3d_from_points
affine_trans_object_model_3d
,
union_object_model_3d
,
sample_object_model_3d
,
triangulate_object_model_3d
register_object_model_3d_pair
,
find_surface_model
,
refine_surface_model_pose
3D Metrology