| Operatoren |
create_surface_model — Erstellt die für oberflächenbasiertes Matching notwendigen Datenstrukturen.
create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)
create_surface_model erstellt aus dem 3D-Objektmodell ObjectModel3D ein Modell für oberflächenbasiertes Matching. Das 3D-Oberflächenmodell kann beispielsweise mittels read_object_model_3d aus einer Datei gelesen worden sein oder mittels xyz_to_object_model_3d erstellt worden sein. Das Handle des erstellten Oberflächenmodells wird in SurfaceModelID zurückgegeben.
Für die Erstellung des Oberflächenmmodells aus dem 3D-Objektmodell werden Punkte und Normalen aus dem 3D-Objektmodell benötigt. Hier sind die folgenden Kombinationen möglich:
Punkte und Punktnormalen;
Punkte und ein Dreiecks- oder Polygongitter, z.B. aus einer CAD-Datei;
Punkte und ein 2D-Mapping, z.B. für 3D-Objektmodelle, die mittels xyz_to_object_model_3d erstellt wurden.
Es ist zu beachten, dass die Richtung und Ausrichtung (einwärts oder auswärts) der Normalen des Modells wichtig für das Matching sind. Für das kantenunterstützte oberflächenbasierte Matching müssen die Normalen einwärts gerichtet sein und zusätzlich muss das Modell ein Dreiecks- oder Polygongitter enthalten (siehe unten).
Für das Oberflächenmodell wird die Oberfläche des 3D-Objektmodells mit einem bestimmten Abstand abgetastet. Die Abtastdistanz wird im Parameter RelSamplingDistance spezifiziert, und wird relativ zum Durchmesser des umschließenden achsenparallelen Quaders angegeben. Wird etwa RelSamplingDistance auf 0.05 gesetzt und ist der Durchmesser von ObjectModel3D gleich '10 cm', dann haben die Punkte der abgetasteten Oberfläche einen Abstand von etwa '5 mm'. Die abgetasteten Punkte werden für das näherungsweise Matching in find_surface_model verwendet (siehe unten). Die abgetasteten Punkte können mit dem Operator get_surface_model_param als 'sampled_model' abgerufen werden. Es ist zu beachten, dass einzelne Ausreißerpunkte den Durchmesser des umschließenden Quaders deutlich verändern können, was aufgrund der relativen Parametrisierung die Abtastdistanz stark stören kann. Ausreißerpunkte im 3D-Objektmodell sind daher vor dem Aufruf des Operators zu entfernen. Verringert man RelSamplingDistance, so werden mehr Punkte abgetastet, was zu einem stabileren aber langsameren Matching führt. Erhöht man RelSamplingDistance, so werden weniger Punkte abgetastet, was zu einem schnelleren aber weniger stabilen Matching führt.
| (1) | (2) | (3) | (4) |
Die abgetasteten Punkte werden für das Auffinden des Objekts in einer Szene im Operator find_surface_model verwendet. Dafür werden aus den abgetasteten Punkten alle möglichen Punktpaare gebildet und für jedes Paar der Abstand und die relative Orientierung der Oberflächen berechnet. Beide Werte werden diskretisiert und für das Matching gespeichert. Die generischen Parameter 'feat_step_size_rel' und 'feat_angle_resolution' können verwendet werden um die Diskretisierung von Distanz und Orientierung zu steuern (siehe unten).
Das 3D-Objektmodell wird ein zweites Mal für die Pose-Verfeinerung abgetastet. Diese zweite Abtastung wird mit einer kleineren Abtastdistanz durchgeführt, was zu mehr Punkten führt. Der generische Parameter 'pose_ref_rel_sampling_distance' setzt die Abtastdistanz relativ zum Durchmesser des umschliessenden Quaders des 3D-Objektmodells fest. Verringert man den Wert so wird die Pose-Verfeinerung genauer, jedoch wird auch das Modell größer und die Modellgenerierung und das Matching langsamer. Erhöht man den Wert so wird die Pose-Verfeinerung ungenauer, das Modell kleiner und die Modellgenerierung und das Matching schneller.
Das oberflächenbasierte Matching kann zusätzlich zu den 3D-Oberflächenpunkten auch 3D-Kanten verwenden, um die Ausrichtung zu verbessern. Dies ist besonders für Objekte mit größeren planaren Seiten hilfreich, die andernfalls in einer Hintergrundebene oder falsch rotiert gefunden werden können. Um das kantenunterstützte oberflächenbasierte Matching zu verwenden, muss das Modell durch setzen des generischen Parameters 'train_3d_edges' auf 'true' entsprechend vorbereitet werden. Dabei müssen die Normalen einwärts gerichtet sein und zusätzlich muss das Modell ein Dreiecks- oder Polygongitter enthalten. Weiterhin benötigt das Training in diesem Fall OpenGL 2.1, GLSL 1.2 und die OpenGL Extensions GL_EXT_framebuffer_object und GL_EXT_framebuffer_blit. Es ist zu beachten, dass das Training deutlich länger dauern kann als das Training ohne Kantenunterstützung.
In den Parametern GenParamName und GenParamValue können generische Parameter und deren Werte übergeben werden. GenParamName enthält ein Tupel von Parameternamen die gesetzt werden sollen, und GenParamValue die dazugehörigen Werte. Die folgenden Werte sind für GenParamName möglich:
Invertieren der Normalenausrichtung des 3D-Objektmodells. Die Normalenausrichtungen (einwärts oder auswärts) müssen für die Erstellung des Oberflächenmodells bekannt sein und mit der Ausrichtung in der Szene übereinstimmen. Wenn sowohl das Modell als auch die Szene mit dem selben Aufbau aufgenommen werden, so zeigen die Normalen bereits in die gleiche Richtung. Wenn das Modell aus einer CAD-Datei geladen wurde dann könnten die Normalen in unterschiedliche Richtungen zeigen. Wenn beim Matching der Effekt auftritt, dass das Modell auf der 'Außenseite' der Szene gefunden wird und das Modell aus einer CAD-Datei stammt, so sollte versucht werden diesen Parameter auf 'true' zu setzen. Es ist auch darauf zu achten, dass die Normalen in der CAD-Datei alle entweder nach innen oder nach aussen zeigen, d.h. konsistent orientiert sind. Für die Pose-Verfeinerung ist die Normalenausrichtung irrelevant. Wird das Oberflächenmodell nur mit refine_surface_model_pose verwendet, so hat die Wahl von 'model_invert_normals' keinen Einfluss auf das Ergebnis.
Mögliche Werte: 'false', 'true'
Standardwert: 'false'
Setzen der Abtastdistanz für die Pose-Verfeinerung relativ zum Durchmesser des 3D-Objektmodells. Verringert man den Wert, so wird die Pose-Verfeinerung genauer, jedoch wird auch das Modell größer und die Modellgenerierung und das Matching langsamer. Erhöht man den Wert, so wird die Pose-Verfeinerung ungenauer, das Modell kleiner und die Modellgenerierung und das Matching schneller.
Vorgeschlagene Werte: 0.05, 0.02, 0.01, 0.005
Standardwert: 0.01
Assertion: 0 < 'pose_ref_rel_sampling_distance' < 1
Setzen der Diskretisierung des Abstandes von Punktpaaren relativ zum Durchmesser des 3D-Objektmodells. Standardmäßig wird dies auf den Wert von RelSamplingDistance gesetzt. Es wird nicht empfohlen diesen Wert zu ändern. Für stark verrauschte Szenen kann der Wert erhöht werden um die Stabilität des Matchings gegen verrauschte Punkte zu erhöhen.
Vorgeschlagene Werte: 0.1, 0.05, 0.03
Standardwert: Wert von RelSamplingDistance
Assertion: 0 < 'feat_step_size_rel' < 1
Setzen der Diskretisierung der Orientierung von Punktepaaren, als Anzahl der Unterteilungen eines Winkels. Es wird nicht empfohlen diesen Wert zu ändern. Erhöht man diesen Wert, so erhöht sich die Genauigkeit des näherungsweisen Matchings in find_surface_model, jedoch reduziert sich die Stabilität gegen verrauschte Normalenrichtungen. Verringert man diesen Wert, so verringert sich auch die Genauigkeit des näherungsweisen Matchings, jedoch erhöht sich die Stabilität gegen verrauschte Normalenrichtungen. Für stark verrauschte Szenen in denen die Normalenrichtungen nicht genau bestimmt werden können kann dieser Wert auf 25 oder 20 gesetzt werden.
Vorgeschlagene Werte: 20, 25, 30
Standardwert: 30
Assertion: 'feat_angle_resolution' > 1
Trainiert das Oberflächenmodell für die kantenunterstützte Objekterkennung und Posenverfeinerung. Das Modell muss in diesem Fall eine Vermaschung aufweisen, d.h. Dreiecke oder Polygone enthalten. Zusätzlich ist es wichtig, dass die Normalenvektoren einwärts gerichtet sind. Weiterhin benötigt das Training in diesem Fall OpenGL.
Mögliche Werte: 'false', 'true'
Standardwert: 'false'
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.
Handle des 3D-Objektmodells.
Abtastdistanz relativ zum Durchmesser des Objekts.
Defaultwert: 0.03
Wertevorschläge: 0.1, 0.05, 0.03, 0.02, 0.01
Restriktion: 0 < RelSamplingDistance < 1
Namen der generischen Parameter.
Defaultwert: []
Wertevorschläge: 'model_invert_normals', 'pose_ref_rel_sampling_distance', 'feat_step_size_rel', 'feat_angle_resolution', 'train_3d_edges'
Werte der generischen Parameter.
Defaultwert: []
Wertevorschläge: 0, 1, 'true', 'false', 0.005, 0.01, 0.02, 0.05, 0.1
Handle des Oberflächenmodells.
Wenn alle Parameter korrekt sind liefert create_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
find_surface_model, refine_surface_model_pose, get_surface_model_param, write_surface_model, clear_surface_model, set_surface_model_param
find_surface_model, refine_surface_model_pose, read_surface_model, write_surface_model, clear_surface_model, set_surface_model_param
Bertram Drost, Markus Ulrich, Nassir Navab, Slobodan Ilic: „Model Globally, Match Locally: Efficient and Robust 3D Object Recognition.“ Computer Vision and Pattern Recognition, pp. 998-1005, 2010.
3D Metrology
| Operatoren |