find_surface_model — Suche der besten Matches eines Oberflächenmodells in einer Szene.
find_surface_model( : : SurfaceModelID, ObjectModel3D, RelSamplingDistance, KeyPointFraction, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)
Der Operator find_surface_model sucht die besten Matches des
Oberflächenmodells SurfaceModelID in der 3D-Szene
ObjectModel3D und gibt ihre Posen in Pose zurück.
Der Matching-Vorgang ist in drei Schritte unterteilt:
Näherungsweises Matching
Grobe Pose-Verfeinerung
Exakte Pose-Verfeinerung
Die einzelnen Schritte werden detailliert in der Technical Note
Surface-Based Matching erläutert. Die generischen Parameter die zur
Steuerung dieser Schritte verwendet werden können werden in den entsprechenden
Abschnitten weiter unten beschrieben.
In den weiteren Abschnitten werden die Parameter beschrieben und zusätzlich
zu beachtenden Punkte angegeben.
Die HDevelop-Prozedur debug_find_surface_model kann verwendet
werden, um den Matchingprozess und die eingestellten Parameter zu
visualisieren und zu überprüfen.
Zum Auffinden des Oberflächenmodells werden Punkte und Normalen der 3D-Szene verwendet. Die Szene sollte eine der folgenden Optionen zur Verfügung stellen:
Punkte und Punktnormalen.
Punkte und ein 2D-Mapping, z.B. für 3D-Objektmodelle die mittels
xyz_to_object_model_3d erstellt wurden.
In diesem Fall werden die Normalen mit dem 2D-Mapping berechnet.
Nur Punkte. Die Normalen werden aufgrund der 3D Umgebung abgeschätzt. Es gilt zu beachten, dass diese Option nicht empfohlen wird, da sie generell zu längeren Verarbeitungszeiten führt und die berechneten Normalen üblicherweise weniger genau sind, was in ungenaueren Ergebnissen resultiert.
Für eine genaue Pose ist es wichtig, dass die
Normalen der Szene und des Modells in die gleiche Richtung zeigen (siehe
'scene_invert_normals').
Wenn das Oberflächenmodell für kantenunterstütztes oberflächenbasiertes Matching vorbereitet wurde und das kantenunterstützte Matching nicht durch 'use_3d_edges' abgeschaltet wurde, ist lediglich die zweite Kombination möglich, d.h. die Szene muss ein 2D-Mapping beinhalten.
Wenn das Oberflächenmodell für kantenunterstütztes oberflächenbasiertes Matching vorbereitet wurde und die Szene ein 2D-Mapping beinhaltet, werden Punktnormalen aus der Szene nicht benutzt (siehe 'scene_normal_computation' unten).
Für Oberflächenmodelle, die für kantenunterstütztes oberflächenbasiertes Matching vorbereitet wurden, ist es notwendig, dass die Normalen einwärts ausgerichtet sind.
Wird eine vermaschte Szene mit Dreiecken oder Polygonen übergeben, etwa ein
CAD-Modell, so werden diese ignoriert und nur die Punkte der Szene
verwendet. In der Regel sollte daher nicht in einer vermaschten Szene
gesucht werden. Stattdessen sollte eine solche Szene zuvor etwa mit
sample_object_model_3d in Punkte mit Normalen umgewandelt werden.
Werden verrauschte Daten verwendet, z.B. von Time-of-Flight-Kameras, kann der generische Parameter 'scene_normal_computation' auf 'mls' gesetzt werden um robustere Ergebnisse zu erhalten (siehe unten).
SurfaceModelID ist das Handle des Oberflächenmodells.
Das Modell muss zuvor mittels create_surface_model oder
read_surface_model erstellt, bzw eingelesen worden sein.
Gewisse Oberflächenmodell-Parameter, welche das Auffinden beeinflussen,
können über den Operator set_surface_model_param gesetzt werden,
z.B. 'pose_restriction_max_angle_diff' zum Einschränken des
Rotationsbereichs.
ObjectModel3D ist das Handle des 3D-Objektmodells mit
der Szene in der die Matches gesucht werden. In den meisten Fällen
wird angenommen, dass die Kamera entlang der z-Achse ausgerichtet ist.
Dies ist wichtig bei der Ausrichtung der Normalen der Szene, falls diese
neu berechnet werden (siehe 'scene_normal_computation' unten).
Falls das Oberflächenmodell für kantenunterstütztes oberflächenbasiertes
Matching vorbereitet wurde und die Szene ein 2D-Mapping beinhaltet,
werden die Normalen der Szene automatisch konsistent ausgerichtet.
Der Parameter RelSamplingDistance kontrolliert die Abtastdistanz
während des Schrittes Näherungsweises Matching und bei der
Berechnung des Score im Schritt Grobe Pose-Verfeinerung.
Sein Wert wird relativ zum Durchmesser des Oberflächenmodells angegeben.
Verkleinert man RelSamplingDistance, so werden mehr
Punkte der Szene abgetastet, was zu einem stabileren aber
langsameren Matching führt.
Erhöht man RelSamplingDistance, so werden weniger Punkte
abgetastet, was zu einem weniger stabilen aber schnelleren Matching
führt.
Eine Illustration zur RelSamplingDistance befindet sich
bei dem Operator create_surface_model.
Die abgetasteten Punkte können mit dem Operator
get_surface_matching_result abgerufen werden. Für ein
robustes Matching sollten mindestens 50-100 Punkte auf jeder
zu findenden Objektinstanz liegen.
Der Parameter KeyPointFraction kontrolliert wie viele der
abgetasteten Szenenpunkte als Schlüsselpunkte ausgewählt werden.
Wird dieser Wert etwa auf 0.1 gesetzt, so werden 10% der
abgetasteten Szenepunkte als Schlüsselpunkte verwendet.
Für robuste Ergebnisse ist es wichtig, dass auf jeder zu findenden
Objektinstanz mehrere Schlüsselpunkte liegen.
Erhöht man KeyPointFraction, so werden mehr Punkte als
Schlüsselpunkte ausgewählt, was zu einem robusteren aber langsameren
Matching führt. Verringert man den Wert so werden weniger
Schlüsselpunkte ausgewählt, was zu einem weniger robusten aber
schnelleren Matching führt.
Für eine visuelle Überprüfung können die ausgewählten Schlüsselpunkte mit
dem Operator get_surface_matching_result abgerufen werden.
Der Parameter MinScore kann verwendet werden um die Ergebnisse
zu filtern. Nur Instanzen deren Bewertung größer als MinScore ist
werden zurückgegeben.
Wird MinScore auf 0 gesetzt, so werden alle gefundenen
Instanzen zurückgegeben.
Für das kantenunterstützte oberflächenbasierte Matching
(siehe create_surface_model) werden vier Einzelbewertungen
ermittelt (siehe weiter unten für ihre Beschreibung).
Für Modelle die zur Berechnung einer ansichtsbasierten Bewertung trainiert
wurden (siehe create_surface_model), wird eine weitere, fünfte
Einzelbewertungen ermittelt.
Entsprechend können die Resultate mit jeder dieser Bewertungen gefiltert
werden, indem MinScore ein Tupel mit bis zu fünf Schwellenwerten
übergeben wird.
Diese Schwellenwerte sind in der gleichen Reihenfolge wie die Bewertungen
geordnet (siehe weiter unten) und fehlende Einträge werden als 0
betrachtet, was bedeutet, dass keine Ergebnisse aufgrund dieser Bewertung
herausgefiltert wird.
Zum Finden geeigneter Schwellenwerte können die Einzelbewertungen gefundener
Posen mit dem Operator get_surface_matching_result erhalten
werden.
Je nach Einstellung des Verfahrens sind möglicherweise nicht alle
Bewertungen verfügbar. Für nicht verfügbare Bewertungen wird der in
MinScore eingestellte Schwellenwert ignoriert.
Die fünf Einzelbewertungen, deren Schwellenwerte in dieser Reihenfolge in
MinScore übergeben werden müssen, sind:
Die Gesamtbewertung wie in Score und durch
'score' in get_surface_matching_result zurückgegeben.
Der Oberflächenanteil der Ergebnisbewertung, d.h. welcher Anteil der
Objektoberfläche in der Szene gefunden wurde, zurückgegeben durch
'score_surface' in get_surface_matching_result.
Der Anteil der 3D-Kanten der Ergebnisbewertung, d.h. wie gut die
3D-Kanten der Objektsilhouette mit den in der Szene gefundenen 3D-Kanten
übereinstimmen, zurückgegeben durch
'score_3d_edges' in get_surface_matching_result.
Der Anteil der 2D-Kanten der Ergebnisbewertung, d.h.
wie gut die projizierten Objektsilhouetten mit den in
den Bildern gefundenen Kanten übereinstimmen (nur für die Operatoren
find_surface_model_image und
refine_surface_model_pose_image verfügbar), zurückgegeben
durch 'score_2d_edges' in
get_surface_matching_result.
Der ansichtsbasierte Anteil der Ergebnisbewertung, d.h. wie viele
Punkte der Szene einem Modellpunkt zugeordnet werden konnten im
Verhältnis zu den Modellpunkten, die in dieser Ansicht sichtbar
sind, zurückgegeben durch
'score_view_based' in get_surface_matching_result.
Der Parameter ReturnResultHandle bestimmt, ob ein Handle für
das Ergebnis des oberflächenbasierten Matchings zurückgegeben werden soll
oder nicht. Falls der Parameter den Wert 'true' erhält, wird das
Handle unter dem Parameter SurfaceMatchingResultID zurückgegeben.
Weitere Details des Matchingverfahrens können dann mittels
get_surface_matching_result abgerufen werden.
Die Parameter GenParamName und GenParamValue werden zum
Setzen generischer Parameter verwendet. Beide erhalten ein Tupel gleicher
Länge, wobei das Tupel von GenParamName die Namen der zu setzenden
Parameter enthält und das Tupel GenParamValue die entsprechenden
Werte.
Die möglichen Parameternamen und Parameterwerte sind im Abschnitt
Die drei Schritte des Matching-Vorgangs beschrieben.
Der Ausgabeparameter Pose gibt die Pose der gefundenen Instanzen
zurück. Er beschreibt die Pose des Oberflächenmodells im
Szenenkoordinatensystem (scs) und bezieht sich auf das
Modellkoordinatensystem des 3D-Objektmodells (mcs), welches für
create_surface_model verwendet wurde. Somit ist die Pose in der Form
(siehe auch
Transformationen / Posen und
„Solution Guide III-C - 3D Vision“).
Der Ausgabeparameter Score gibt für jede übereinstimmende Instanz
eine Bewertung zurück. Der Wert und die Interpretation der Bewertung
sind, wie im folgenden Abschnitt erläutert, für verschiedene Fälle
unterschiedlich.
Mit Pose-Verfeinerung
Bei einem Matching mit Pose-Verfeinerung hängt die Bewertung davon ab, ob das Matching mit Kantenunterstützung durchgeführt wurde:
Ohne Kantenunterstützung wird für die Bewertung der Oberflächenanteil berechnet, d.h. der ungefähre Anteil der in der Szene sichtbaren Fläche des Objekts. Dies erfolgt durch Zählen der gefundenen Modellpunkte mit entsprechendem Szenepunkt und dividieren dieser Anzahl entweder durch:
die Gesamtzahl abgetasteter Modellpunkte, falls das Modell nicht für eine ansichtsbasierte Bewertung trainiert worden ist.
oder durch
die Anzahl aller Modellpunkte die von einem einzigen Blickpunkt aus maximal sichtbar sein können, falls das Modell für eine ansichtsbasierte Bewertung trainiert worden ist
Mit Kantenunterstützung ist die Bewertung das geometrische Mittel des Oberflächenanteils und des Kantenanteils. Der Kantenanteil wird davon beeinflusst, ob das Modell für eine ansichtsbasierte Bewertung trainiert worden ist oder nicht. Ermittelt wird dieser aus der Anzahl an abgetasteten Kantenpunkten des Modells die mit Kanten der Szene ausgerichtet sind, geteilt durch die maximale Anzahl an Modellkantenpunkten, die von einem einzigen Blickpunkt aus sichtbar sein können. Wenn die 3D-Kanten aus mehreren Sichtrichtungen extrahiert wurden, kann dies zu einem Score größer 1 führen.
(wenn die Szene von einem einzigen Blickpunkt aus gesehen wurde)
(wenn die Gesamtszene aus Einzelszenen zusammengesetzt wurde, die von insgesamt N verschiedenen Blickpunkten gesehen wurde)
Es ist zu beachten, dass für die Berechnung der Bewertung nach der groben Pose-Verfeinerung die abgetasteten Szenepunkte verwendet werden, während für die Berechnung nach der exakten Pose-Verfeinerung alle Szenepunkte verwendet werden. Die Bewertung nach der exakten Pose-Verfeinerung ist daher unabhängig von der Abtastdistanz der Szene.
Ohne Pose-Verfeinerung
Falls von den drei Schritten des Matching-Vorgangs nur der erste,
Näherungsweises Matching, ausgeführt wird, hängen der mögliche
Wert und die Interpretation der Bewertung nur von
einer möglichen Kantenunterstützung ab:
Ohne Kantenunterstützung
Die Bewertung ist die ungefähre Anzahl an Szenenpunkten der abgetasteten Szene die auf dem gefundenen Objekt liegen.
Mit Kantenunterstützung
Die Bewertung ist die ungefähre Anzahl an Szenenpunkten der abgetasteten Szene die auf dem gefundenen Objekt liegen, multipliziert mit der Anzahl an Punkten der abgetasteten 3D-Kanten die mit Kanten des Modells ausgerichtet sind.
Der Ausgabeparameter SurfaceMatchingResultID gibt ein
Ergebnishandle für das Oberflächenmatching zurück.
Mittels dieses Handles können weitere Details des Matchingverfahrens
unter Verwendung des Operators get_surface_matching_result
abgerufen werden.
Das Handle wird nur zurückgegeben, wenn ReturnResultHandle auf
'true' gesetzt ist.
Der Matching-Vorgang ist in drei Schritte unterteilt:
Die ungefähren Posen der Instanzen des Oberflächenmodells in der Szene werden gesucht.
Die folgenden generischen Parameter steuern das näherungsweise
Matching, und werden mit GenParamName und
GenParamValue gesetzt:
Setzt die maximale Anzahl an gefundenen Instanzen die zurückgegeben werden.
Vorgeschlagene Werte: 1, 2, 5
Standardwert: 1
Restriktion: 'num_matches' > 0
Aus Laufzeitgründen kann die maximale Überlappung zweier
Matches nicht in 3D definiert werden. Stattdessen kann mit
'max_overlap_dist_rel' der minimale Abstand zwischen den
Mittelpunkten der kleinsten achsparallelen, die Matches
umschließenden Quader angegeben werden. Der Wert wird relativ
zum Objektdurchmesser angegeben. Wenn ein Objekt mit einem
hohen Score gefunden wurde, werden alle anderen
Matches unterdrückt, für die der Mittelpunkt ihres kleinsten
umschließenden Quaders zu nahe am Mittelpunkt des kleinsten
umschließenden Quaders des ersten Matches liegt. Wenn sich
die gefundenen Matches nicht überlappen sollen, muss der Wert
für 'max_overlap_dist_rel' auf 1.0 gesetzt werden.
Nur einer der beiden Parameter 'max_overlap_dist_rel'
und 'max_overlap_dist_abs' sollte gesetzt werden.
Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert
verwendet.
Vorgeschlagene Werte: 0.1, 0.5, 1
Standardwert: 0.5
Restriktion: 'max_overlap_dist_rel' >= 0
Dieser Parameter hat den gleichen Effekt wie der Parameter 'max_overlap_dist_rel'. Allerdings wird der Wert im Gegensatz zum Parameter 'max_overlap_dist_rel' bei 'max_overlap_dist_abs' als absoluter Wert angegeben. Eine Beschreibung des Effekts dieses Parameters ist weiter oben bei dem Parameter 'max_overlap_dist_rel' zu finden. Nur einer der beiden Parameter 'max_overlap_dist_rel' und 'max_overlap_dist_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Vorgeschlagene Werte: 1, 2, 3
Restriktion: 'max_overlap_dist_abs' >= 0
Dieser Parameter kontrolliert die Normalenberechnung der abgetasteten 3D-Szene.
Im Standard-Modus 'fast' werden in den meisten Fällen die Normalen der 3D-Szene benutzt (wenn sie bereits Normalen enthält) oder anhand einer relativ kleinen Nachbarschaft berechnet (wenn nicht). Die berechneten Normalen werden dann so ausgerichtet, dass falls keine Normalen in der Szene vorhanden sind. Die Ausrichtung stammt von der Annahme, dass die Kamera entlang der z-Achse ausgerichtet ist.
Im Standard-Modus 'fast', im Fall dass das Oberflächenmodell für kantenunterstütztes oberflächenbasiertes Matching vorbereitet wurde und die Szene ein 2D-Mapping beinhaltet, werden Punktnormalen aus der Szene nicht benutzt, sondern immer anhand des 2D-Mapping berechnet. Außerdem werden die berechneten Normalen automatisch konsistent ausgerichtet.
Im Modus 'mls' wird eine größere Nachbarschaft
einbezogen und das komplexere, aber oft genauere
'mls'-Verfahren für die Normalenberechnung verwendet.
Eine genauere Beschreibung des 'mls'-Verfahrens findet sich
beim Operator surface_normals_object_model_3d.
Der 'mls'-Modus ist vor allem für Daten mit hohem Rauschen
gedacht, etwa für Bilder aus Time-of-Flight-Kameras.
Die berechneten Normalen werden wie im 'fast'-Modus
ausgerichtet.
Mögliche Werte: 'fast', 'mls'
Standardwert: 'fast'
Dieser Parameter invertiert die Normalenausrichtung der 3D-Szene.
Die Normalenausrichtungen (einwärts oder auswärts) der Szene müssen mit
den Ausrichtungen des Oberflächenmodells übereinstimmen.
Wenn sowohl das Modell als auch die Szene mit demselben Aufbau
aufgenommen werden, so zeigen die Normalen bereits in die gleiche
Richtung.
Wenn beim Matching der Effekt auftritt, dass das Modell auf der
'Außenseite' der Szene gefunden wird, so sollte versucht werden, diesen
Parameter auf 'true' zu setzen.
Es ist auch darauf zu achten, dass die Normalen in der Szene
alle entweder nach innen oder nach außen zeigen, d.h. konsistent
orientiert sind.
Für kantenunterstütztes oberflächenbasiertes Matching müssen die Normalen
einwärts ausgerichtet sein, werden aber typischerweise automatisch
konsistent zum 2D-Mapping ausgerichtet. Die Ausrichtung der Normalen
kann mit der Prozedur debug_find_surface_model überprüft
werden.
Mögliche Werte: 'false', 'true'
Standardwert: 'false'
Erlaubt das manuelle Setzen der 3D-Kanten der Szene für das
kantenunterstützte oberflächenbasierte Matching, wenn
das Oberflächenmodell für kantenunterstütztes oberflächenbasiertes
Matching vorbereitet wurde.
Der Wert dieses Parameters muss ein 3D-Objektmodell-Handle sein.
Die Kanten sind üblicherweise das Ergebnis des Operators
edges_object_model_3d, können aber weiter gefiltert
werden um Ausreißer zu entfernen.
Wird dieser Parameter nicht angegeben, dann extrahiert
find_surface_model die Kanten intern, analog zum
Operator edges_object_model_3d.
Setzt den Amplitudenschwellenwert bei der automatischen Extraktion
von 3D-Kanten für das kantenunterstützte oberflächenbasierte
Matching, d.h. wenn
das Oberflächenmodell mit aktiviertem 'train_3d_edges'
erzeugt wurde und keine Kanten mittels '3d_edges'
manuell übergeben wurden.
Der Schwellenwert wird relativ zum Durchmesser des Modells
angegeben und verhält sich analog zum Parameter
MinAmplitude des Operators
edges_object_model_3d.
Vorgeschlagene Werte: 0.05, 0.1, 0.5
Standardwert: 0.05
Restriktion: '3d_edge_min_amplitude_rel' >= 0
Analog zu '3d_edge_min_amplitude_rel', allerdings wird der Schwellenwert nicht relativ zum Modelldurchmesser sondern als absoluter Wert angegeben.
Restriktion: '3d_edge_min_amplitude_abs' >= 0
Dieser Parameter gibt die 3D-Position des Blickpunktes an, von
dem aus die 3D-Punkte in ObjectModel3D gesehen werden.
Der Blickpunkt wird bei Modellen mit ansichtsbasierter
Bewertung benutzt (d.h. mit aktiviertem 'train_view_based'),
um die Anzahl der Punkte des Modells abzufragen die von diesem
Blickpunkt aus sichtbar sind.
Die 3D-Koordinaten des Blickpunktes (x, y und z) werden als Strings,
getrennt durch Leerzeichen, übergeben.
Der Blickpunkt ist im gleichen Koordinatensystem wie
ObjectModel3D definiert und sollte in etwa der
Sensorposition bei der Aufnahme der 3D-Szene entsprechen.
Mit der Prozedur debug_find_surface_model kann die Lage
des Blickpunktes visualisiert und überprüft werden.
Standardwert: '0 0 0'
Dieser Parameter gibt die maximale Größe einer Lücke in Pixeln in einer 3D-Szene an. Dies gilt nur sofern das Oberflächenmodell mit aktiviertem 'train_3d_edges' erstellt wurde. Für Lücken, die einen größeren Durchmesser haben als 'max_gap', werden Kanten an den Rändern der Lücke erzeugt, kleinere Lücken werden geschlossen. Dadurch können Kanten unterdrückt werden, welche an Lücken in den 3D-Daten entstehen, die der Sensor nicht rekonstruieren konnte. Für besonders hochauflösende Sensoren sollte der Wert erhöht werden.
Werden Kanten manuell mit dem generischen Parameter
'3d_edges' übergeben, so ist zu beachten, dass
'max_gap' in diesem Fall ignoriert wird.
Andernfalls verhält sich 'max_gap' analog zum
entsprechenden generischen Parameter des Operators
edges_object_model_3d.
Inwiefern sich 'max_gap' auf das Modell auswirkt kann mit
Hilfe der Prozedur debug_find_surface_model
visualisiert werden.
Standardwert: 30
Schaltet die Kantenunterstützung ein oder aus. Er kann verwendet werden, um ein Matching ohne Kantenunterstützung durchzuführen, obwohl das Modell mit Kantenunterstützung erstellt wurde. Wenn das Oberflächenmodell nicht mit aktiviertem 'train_3d_edges' erstellt wurde, wird ein Fehler zurückgegeben.
Mögliche Werte: 'true', 'false'
Standardwert: 'true'
In diesem zweiten Schritt werden die im vorherigen Schritt gefundenen näherungsweisen Posen verfeinert. Dies erhöht die Genauigkeit der Posen sowie die Aussagekraft der Bewertung.
Die folgenden generischen Parameter steuern die grobe
Pose-Verfeinerung und werden mit GenParamName und
GenParamValue gesetzt:
Aktiviert oder deaktiviert die grobe Pose-Verfeinerung.
Mögliche Werte: 'true', 'false'
Standardwert: 'true'
Aktiviert oder deaktiviert die Verwendung von Szenennormalen für die Pose-Verfeinerung. Wenn dieser Parameter aktiviert wird und die Szene Normalenvektoren enthält, dann werden diese Normalenvektoren verwendet um die Genauigkeit der Pose-Verfeinerung zu steigern. Dazu wird der Einfluss derer Szenenpunkte verringert, deren Normalenvektor in eine andere Richtung als der entsprechende Objektnormalenvektor zeigt. Enthält die Szene keine Punktnormalen, so wird dieser Parameter ignoriert.
Mögliche Werte: 'true', 'false'
Standardwert: 'false'
Schaltet die ansichtsbasierte Bewertung beim oberflächenbasierten
Matching ein oder aus.
Dies ist vor allem dann sinnvoll, wenn ein Matching ohne Verwendung der
ansichtsbasierten Bewertung durchgeführt wird, obwohl das Modell speziell
dafür trainiert wurde. Der Einfluss von 'use_view_based' auf
die Bewertung ist in der Beschreibung zu Score weiter
oben erklärt.
Wenn das Oberflächenmodell nicht mit aktiviertem
'train_view_based' erstellt wurde, wird bei aktiviertem
'use_view_based' ein Fehler zurückgegeben.
Mögliche Werte: 'true', 'false'
Standardwert: 'false', falls 'train_view_based' bei Modellerstellung deaktiviert, andernfalls 'true'.
Verfeinert die in den vorherigen Schritten gefundenen Posen.
Die folgenden generischen Parameter steuern die exakte
Pose-Verfeinerung und beeinflussen ihre Genauigkeit und
Geschwindigkeit. Die Werte werden über GenParamName und
GenParamValue gesetzt:
Aktiviert oder deaktiviert die exakte Pose-Verfeinerung.
Mögliche Werte: 'true', 'false'
Standardwert: 'true'
Anzahl der Iterationen der exakten Pose-Verfeinerung. Erhöht man diesen Wert, so wird die Verfeinerung genauer aber langsamer. Verringert man den Wert, so wird sie entsprechend ungenauer und schneller. Ab einer gewissen Anzahl an Iterationen konvergiert das Verfahren, so dass eine weitere Erhöhung keinen Effekt mehr auf die Genauigkeit hat.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist.
Vorgeschlagene Werte: 1, 3, 5, 20
Standardwert: 5
Restriktion: 'pose_ref_num_steps' > 0
Setzt, wie viele der Szenepunkte für die exakte Pose-Verfeinerung verwendet werden. Wird dieser Wert z.B. auf 5 gesetzt, so wird jeder fünfte Punkt der Szene verwendet. Dieser Parameter erlaubt einen einfachen Kompromiss zwischen Genauigkeit und Geschwindigkeit der Verfeinerung. Erhöht man den Wert, so werden weniger Punkte verwendet, was zu einer schnelleren aber weniger genauen Verfeinerung führt. Eine Verringerung des Wertes hat den umgekehrten Effekt.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist.
Vorgeschlagene Werte: 1, 2, 5, 10
Standardwert: 2
Restriktion: 'pose_ref_sub_sampling' > 0
Setzt den Abstandsschwellenwert für die exakte Pose-Verfeinerung relativ zum Durchmesser des Modells. Nur Punkte deren Abstand zur Objektinstanz diesen Schwellenwert unterschreiten gehen in die Pose-Verfeinerung ein. Punkte, die weiter von der Instanz entfernt sind, werden ignoriert. Nur einer der beiden Parameter 'pose_ref_dist_threshold_rel' und 'pose_ref_dist_threshold_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist.
Vorgeschlagene Werte: 0.03, 0.05, 0.1, 0.2
Standardwert: 0.1
Restriktion: 'pose_ref_dist_threshold_rel' > 0
Setzt den Abstandsschwellenwert für die exakte Pose-Verfeinerung als absoluten Wert. Für Details siehe den Parameter 'pose_ref_dist_threshold_rel'. Nur einer der beiden Parameter 'pose_ref_dist_threshold_rel' und 'pose_ref_dist_threshold_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist.
Restriktion: 'pose_ref_dist_threshold_abs' > 0
Setzt den Abstandsschwellenwert für die Bewertung der Pose relativ zum Durchmesser des Modells. Für Details siehe den Parameter 'pose_ref_scoring_dist_abs'. Nur einer der beiden Parameter 'pose_ref_scoring_dist_rel' und 'pose_ref_scoring_dist_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist.
Vorgeschlagene Werte: 0.2, 0.01, 0.005, 0.0001
Standardwert: 0.005
Restriktion: 'pose_ref_scoring_dist_rel' > 0
Setzt den Abstandsschwellenwert für die Bewertung der Pose als absoluten Wert. Nur Szenepunkte deren Abstand zur gefundenen Objektinstanz diesen Schwellenwert unterschreiten gehen in die Berechnung der Bewertung ein und werden als 'auf dem Objekt liegend' klassifiziert. Alle anderen Szenepunkte werden ignoriert. Der Schwellenwert sollte entsprechend dem zu erwartenden Rauschen und der Genauigkeit der Pose-Verfeinerung gesetzt werden. Nur einer der beiden Parameter 'pose_ref_scoring_dist_rel' und 'pose_ref_scoring_dist_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist.
Aktiviert oder deaktiviert die Verwendung von Szenennormalen
für die Pose-Verfeinerung.
Eine genauere Beschreibung dieses Parameters findet
sich weiter oben im Abschnitt Grope Pose-Verfeinerung.
Mögliche Werte: 'true', 'false'
Standardwert: 'false'
Setzt den Abstandsschwellenwert von Kanten für die exakte Pose-Verfeinerung relativ zum Durchmesser des Modells. Nur Kanten deren Abstand zur Objektinstanz diesen Schwellenwert unterschreiten gehen in die Pose-Verfeinerung ein. Kanten, die weiter von der Instanz entfernt sind, werden ignoriert. Nur einer der beiden Parameter 'pose_ref_dist_threshold_edges_rel' und 'pose_ref_dist_threshold_edges_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist oder wenn kein kantenunterstütztes Matching durchgeführt wird.
Vorgeschlagene Werte: 0.03, 0.05, 0.1, 0.2
Standardwert: 0.1
Restriktion: 'pose_ref_dist_threshold_edges_rel' > 0
Setzt den Abstandsschwellenwert von Kanten für die exakte Pose-Verfeinerung als absoluten Wert. Für Details siehe den Parameter 'pose_ref_dist_threshold_edges_rel'. Nur einer der beiden Parameter 'pose_ref_dist_threshold_edges_rel' und 'pose_ref_dist_threshold_edges_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist oder wenn kein kantenunterstütztes Matching durchgeführt wird.
Restriktion: 'pose_ref_dist_threshold_edges_abs' > 0
Setzt den Abstandsschwellenwert von Kanten für die Bewertung der Pose relativ zum Durchmesser des Modells. Für Details siehe den Parameter 'pose_ref_scoring_dist_edges_abs'. Nur einer der beiden Parameter 'pose_ref_scoring_dist_edges_rel' und 'pose_ref_scoring_dist_edges_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist oder wenn kein kantenunterstütztes Matching durchgeführt wird.
Vorgeschlagene Werte: 0.2, 0.01, 0.005, 0.0001
Standardwert: 0.005
Restriktion: 'pose_ref_scoring_dist_edges_rel' > 0
Setzt den Abstandsschwellenwert von Kanten für die Bewertung der Pose als absoluten Wert. Nur Szenenkanten deren Abstand zu den Kanten der gefundenen Objektinstanz diesen Schwellenwert unterschreiten gehen in die Berechnung der Bewertung ein und werden als 'auf dem Objekt liegend' klassifiziert. Alle anderen Szenenkanten werden ignoriert. Der Schwellenwert sollte entsprechend der zu erwartenden Genauigkeit der extrahierten Kanten und der Genauigkeit der Pose-Verfeinerung gesetzt werden. Nur einer der beiden Parameter 'pose_ref_scoring_dist_edges_rel' und 'pose_ref_scoring_dist_edges_abs' sollte gesetzt werden. Werden beide gesetzt, so wird nur der zuletzt gesetzte Wert verwendet.
Dieser Parameter wird ignoriert, wenn die exakte Pose-Verfeinerung deaktiviert ist oder wenn kein kantenunterstütztes Matching durchgeführt wird.
Restriktion: 'pose_ref_scoring_dist_edges_abs' > 0
Schaltet die ansichtsbasierte Bewertung beim oberflächenbasierten Matching ein oder aus. Für weitere Informationen siehe die entsprechende Beschreibung im Abschnitt zur groben Pose-Verfeinerung.
Wenn das Oberflächenmodell nicht mit aktiviertem 'train_view_based' erstellt wurde, wird bei aktiviertem 'use_view_based' ein Fehler zurückgegeben.
Mögliche Werte: 'true', 'false'
Standardwert: 'false', falls 'train_view_based' bei Modellerstellung deaktiviert, andernfalls 'true'.
Schaltet die Optimierung bezüglich selbstähnlicher, fast-symmetrischer Posen ein oder aus.
Wenn das Oberflächenmodell nicht mit aktiviertem 'train_self_similar_poses' erstellt wurde, wird bei aktiviertem 'use_self_similar_poses' ein Fehler zurückgegeben.
Mögliche Werte: 'true', 'false'
Standardwert: 'false', falls 'train_self_similar_poses' bei Modellerstellung deaktiviert, andernfalls 'true'.
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.
Dieser Operator unterstützt Cancel-Timeouts und Interrupts.
SurfaceModelID (input_control) surface_model → (handle)
Handle des Oberflächenmodells.
ObjectModel3D (input_control) object_model_3d → (handle)
Handle des 3D-Objektmodells, welches die Szene enthält.
RelSamplingDistance (input_control) real → (real)
Abtastdistanz der Szene relativ zum Durchmesser des Oberflächenmodells.
Defaultwert: 0.05
Wertevorschläge: 0.1, 0.07, 0.05, 0.04, 0.03
Restriktion: 0 < RelSamplingDistance < 1
KeyPointFraction (input_control) real → (real)
Anteil der abgetasteten Szenepunkte, die als Schlüsselpunkte verwendet werden.
Defaultwert: 0.2
Wertevorschläge: 0.3, 0.2, 0.1, 0.05
Restriktion: 0 < KeyPointFraction <= 1
MinScore (input_control) real(-array) → (real / integer)
Mindestbewertung der zurückgegebenen Posen.
Defaultwert: 0
Restriktion: MinScore >= 0
ReturnResultHandle (input_control) string → (string)
Aktiviert die Rückgabe eines Ergebnishandels
in SurfaceMatchingResultID.
Defaultwert: 'false'
Wertevorschläge: 'true', 'false'
GenParamName (input_control) attribute.name-array → (string)
Namen der generischen Parameter.
Defaultwert: []
Werteliste: '3d_edge_min_amplitude_abs', '3d_edge_min_amplitude_rel', '3d_edges', 'dense_pose_refinement', 'max_gap', 'max_overlap_dist_abs', 'max_overlap_dist_rel', 'num_matches', 'pose_ref_dist_threshold_abs', 'pose_ref_dist_threshold_edges_abs', 'pose_ref_dist_threshold_edges_rel', 'pose_ref_dist_threshold_rel', 'pose_ref_num_steps', 'pose_ref_scoring_dist_abs', 'pose_ref_scoring_dist_edges_abs', 'pose_ref_scoring_dist_edges_rel', 'pose_ref_scoring_dist_rel', 'pose_ref_sub_sampling', 'pose_ref_use_scene_normals', 'scene_invert_normals', 'scene_normal_computation', 'sparse_pose_refinement', 'use_3d_edges', 'use_self_similar_poses', 'use_view_based', 'viewpoint'
GenParamValue (input_control) attribute.value-array → (string / real / integer)
Werte der generischen Parameter
Defaultwert: []
Wertevorschläge: 0, 1, 'true', 'false', 0.005, 0.01, 0.03, 0.05, 0.1, 'num_scene_points', 'model_point_fraction', 'num_model_points', 'fast', 'mls'
Pose (output_control) pose(-array) → (real / integer)
3D-Lage des Oberflächenmodells in der Szene.
Score (output_control) real-array → (real)
Bewertung der gefundenen Objektinstanzen.
SurfaceMatchingResultID (output_control) surface_matching_result(-array) → (handle)
Ergebnishandle, wenn
ReturnResultHandle aktiviert ist.
Wenn alle Parameter korrekt sind liefert find_surface_model den
Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
read_object_model_3d,
xyz_to_object_model_3d,
get_object_model_3d_params,
read_surface_model,
create_surface_model,
get_surface_model_param,
edges_object_model_3d
refine_surface_model_pose,
get_surface_matching_result,
clear_surface_matching_result,
clear_object_model_3d
refine_surface_model_pose,
find_surface_model_image,
refine_surface_model_pose_image
refine_surface_model_pose,
find_surface_model_image
3D Metrology