Name
create_surface_modelcreate_surface_modelCreateSurfaceModelcreate_surface_modelCreateSurfaceModelCreateSurfaceModel — Erstellt die für oberflächenbasiertes Matching notwendigen Datenstrukturen.
void CreateSurfaceModel(const HTuple& ObjectModel3D, const HTuple& RelSamplingDistance, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* SurfaceModelID)
HSurfaceModel HObjectModel3D::CreateSurfaceModel(double RelSamplingDistance, const HTuple& GenParamName, const HTuple& GenParamValue) const
HSurfaceModel HObjectModel3D::CreateSurfaceModel(double RelSamplingDistance, const HString& GenParamName, const HString& GenParamValue) const
HSurfaceModel HObjectModel3D::CreateSurfaceModel(double RelSamplingDistance, const char* GenParamName, const char* GenParamValue) const
void HSurfaceModel::HSurfaceModel(const HObjectModel3D& ObjectModel3D, double RelSamplingDistance, const HTuple& GenParamName, const HTuple& GenParamValue)
void HSurfaceModel::HSurfaceModel(const HObjectModel3D& ObjectModel3D, double RelSamplingDistance, const HString& GenParamName, const HString& GenParamValue)
void HSurfaceModel::HSurfaceModel(const HObjectModel3D& ObjectModel3D, double RelSamplingDistance, const char* GenParamName, const char* GenParamValue)
void HSurfaceModel::CreateSurfaceModel(const HObjectModel3D& ObjectModel3D, double RelSamplingDistance, const HTuple& GenParamName, const HTuple& GenParamValue)
void HSurfaceModel::CreateSurfaceModel(const HObjectModel3D& ObjectModel3D, double RelSamplingDistance, const HString& GenParamName, const HString& GenParamValue)
void HSurfaceModel::CreateSurfaceModel(const HObjectModel3D& ObjectModel3D, double RelSamplingDistance, const char* GenParamName, const char* GenParamValue)
static void HOperatorSet.CreateSurfaceModel(HTuple objectModel3D, HTuple relSamplingDistance, HTuple genParamName, HTuple genParamValue, out HTuple surfaceModelID)
HSurfaceModel HObjectModel3D.CreateSurfaceModel(double relSamplingDistance, HTuple genParamName, HTuple genParamValue)
HSurfaceModel HObjectModel3D.CreateSurfaceModel(double relSamplingDistance, string genParamName, string genParamValue)
public HSurfaceModel(HObjectModel3D objectModel3D, double relSamplingDistance, HTuple genParamName, HTuple genParamValue)
public HSurfaceModel(HObjectModel3D objectModel3D, double relSamplingDistance, string genParamName, string genParamValue)
void HSurfaceModel.CreateSurfaceModel(HObjectModel3D objectModel3D, double relSamplingDistance, HTuple genParamName, HTuple genParamValue)
void HSurfaceModel.CreateSurfaceModel(HObjectModel3D objectModel3D, double relSamplingDistance, string genParamName, string genParamValue)
create_surface_modelcreate_surface_modelCreateSurfaceModelcreate_surface_modelCreateSurfaceModelCreateSurfaceModel erstellt aus dem 3D-Objektmodell
ObjectModel3DObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D ein Modell für oberflächenbasiertes Matching.
Das 3D-Oberflächenmodell kann beispielsweise mittels
read_object_model_3dread_object_model_3dReadObjectModel3dread_object_model_3dReadObjectModel3dReadObjectModel3d aus einer Datei gelesen worden sein oder
mittels xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3d erstellt worden sein.
Das Handle des erstellten Oberflächenmodells wird in SurfaceModelIDSurfaceModelIDSurfaceModelIDSurfaceModelIDSurfaceModelIDsurfaceModelID
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:
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 Oberflächenmodell wird die Oberfläche des 3D-Objektmodells mit
einem bestimmten Abstand abgetastet.
Die Abtastdistanz wird im Parameter RelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistancerelSamplingDistance
spezifiziert, und wird relativ zum Durchmesser des umschließenden
achsenparallelen Quaders angegeben. Wird etwa RelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistancerelSamplingDistance
auf 0.05 gesetzt und ist der Durchmesser von
ObjectModel3DObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D gleich '10 cm'"10 cm""10 cm""10 cm""10 cm""10 cm", dann haben die Punkte
der abgetasteten Oberfläche einen Abstand von etwa '5 mm'"5 mm""5 mm""5 mm""5 mm""5 mm".
Die abgetasteten Punkte werden für das näherungsweise Matching
in find_surface_modelfind_surface_modelFindSurfaceModelfind_surface_modelFindSurfaceModelFindSurfaceModel verwendet (siehe unten).
Die abgetasteten Punkte können mit dem Operator
get_surface_model_paramget_surface_model_paramGetSurfaceModelParamget_surface_model_paramGetSurfaceModelParamGetSurfaceModelParam als 'sampled_model'"sampled_model""sampled_model""sampled_model""sampled_model""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 RelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistancerelSamplingDistance, so werden mehr Punkte
abgetastet, was zu einem stabileren aber langsameren Matching führt.
Erhöht man RelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistancerelSamplingDistance, so werden weniger Punkte
abgetastet, was zu einem schnelleren aber weniger stabilen Matching führt.
Die abgetasteten Punkte werden für das Auffinden des Objekts in einer
Szene im Operator find_surface_modelfind_surface_modelFindSurfaceModelfind_surface_modelFindSurfaceModelFindSurfaceModel 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'"feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel" und
'feat_angle_resolution'"feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""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'"pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""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.
In den Parametern GenParamNameGenParamNameGenParamNameGenParamNameGenParamNamegenParamName und GenParamValueGenParamValueGenParamValueGenParamValueGenParamValuegenParamValue können
generische Parameter und deren Wert übergeben werden. GenParamNameGenParamNameGenParamNameGenParamNameGenParamNamegenParamName
enthält ein Tupel von Parameternamen die gesezt werden sollen, und
GenParamValueGenParamValueGenParamValueGenParamValueGenParamValuegenParamValue die dazugehörigen Werte.
Die folgenden Werte sind für GenParamNameGenParamNameGenParamNameGenParamNameGenParamNamegenParamName möglich:
- 'model_invert_normals'"model_invert_normals""model_invert_normals""model_invert_normals""model_invert_normals""model_invert_normals":
-
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'"true""true""true""true""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_poserefine_surface_model_poseRefineSurfaceModelPoserefine_surface_model_poseRefineSurfaceModelPoseRefineSurfaceModelPose
verwendet, so hat die Wahl von 'model_invert_normals'"model_invert_normals""model_invert_normals""model_invert_normals""model_invert_normals""model_invert_normals" keinen
Einfluss auf das Ergebnis.
Mögliche Werte: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
Standardwert: 'false'"false""false""false""false""false"
- 'pose_ref_rel_sampling_distance'"pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance":
-
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'"pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance" < 1
- 'feat_step_size_rel'"feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel":
-
Setzen der Diskretisierung des Abstandes von Punktpaaren relativ zum
Durchmesser des 3D-Objektmodells.
Standardmäßig wird dies auf den Wert von RelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistancerelSamplingDistance
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 RelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistanceRelSamplingDistancerelSamplingDistance
Assertion: 0 < 'feat_step_size_rel'"feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel" < 1
- 'feat_angle_resolution'"feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""feat_angle_resolution":
-
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_modelfind_surface_modelFindSurfaceModelfind_surface_modelFindSurfaceModelFindSurfaceModel, 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'"feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""feat_angle_resolution" > 1
- Multithreading-Typ: exclusive (läuft parallel nur zu unabhängigen Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
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'"model_invert_normals""model_invert_normals""model_invert_normals""model_invert_normals""model_invert_normals", 'pose_ref_rel_sampling_distance'"pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance""pose_ref_rel_sampling_distance", 'feat_step_size_rel'"feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel""feat_step_size_rel", 'feat_angle_resolution'"feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""feat_angle_resolution""feat_angle_resolution"
Werte der generischen Parameter.
Defaultwert: []
Wertevorschläge: 0, 1, 'true'"true""true""true""true""true", 'false'"false""false""false""false""false", 0.005, 0.01, 0.02, 0.05, 0.1
Handle des Oberflächenmodells.
Wenn alle Parameter korrekt sind liefert create_surface_modelcreate_surface_modelCreateSurfaceModelcreate_surface_modelCreateSurfaceModelCreateSurfaceModel den
Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
read_object_model_3dread_object_model_3dReadObjectModel3dread_object_model_3dReadObjectModel3dReadObjectModel3d,
xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3d,
get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParams
find_surface_modelfind_surface_modelFindSurfaceModelfind_surface_modelFindSurfaceModelFindSurfaceModel,
refine_surface_model_poserefine_surface_model_poseRefineSurfaceModelPoserefine_surface_model_poseRefineSurfaceModelPoseRefineSurfaceModelPose,
get_surface_model_paramget_surface_model_paramGetSurfaceModelParamget_surface_model_paramGetSurfaceModelParamGetSurfaceModelParam,
write_surface_modelwrite_surface_modelWriteSurfaceModelwrite_surface_modelWriteSurfaceModelWriteSurfaceModel,
clear_surface_modelclear_surface_modelClearSurfaceModelclear_surface_modelClearSurfaceModelClearSurfaceModel
read_surface_modelread_surface_modelReadSurfaceModelread_surface_modelReadSurfaceModelReadSurfaceModel
find_surface_modelfind_surface_modelFindSurfaceModelfind_surface_modelFindSurfaceModelFindSurfaceModel,
refine_surface_model_poserefine_surface_model_poseRefineSurfaceModelPoserefine_surface_model_poseRefineSurfaceModelPoseRefineSurfaceModelPose,
read_surface_modelread_surface_modelReadSurfaceModelread_surface_modelReadSurfaceModelReadSurfaceModel,
write_surface_modelwrite_surface_modelWriteSurfaceModelwrite_surface_modelWriteSurfaceModelWriteSurfaceModel,
clear_surface_modelclear_surface_modelClearSurfaceModelclear_surface_modelClearSurfaceModelClearSurfaceModel
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