sample_object_model_3d — Abtasten eines 3D-Objektmodells.
sample_object_model_3d( : : ObjectModel3D, Method, SamplingParam, GenParamName, GenParamValue : SampledObjectModel3D)
sample_object_model_3d erzeugt eine abgetastete Variante des
3D-Objektmodells ObjectModel3D und gibt sie in
SampledObjectModel3D zurück. Je nach verwendeter Methode
steuert SamplingParam den Mindestabstand oder die Anzahl
der Punkte in SampledObjectModel3D. Das erzeugte
3D-Objektmodell wird in SampledObjectModel3D zurückgegeben.
Der Gebrauch von sample_object_model_3d ist empfohlen, wenn komplexe
Punktwolken zur Nachverarbeitung ausgedünnt werden oder Primitive oder
triangulierte 3D-Objektmodelle in Punktwolken umgewandelt werden sollen.
Wenn das 3D-Objektmodell trianguliert ist und unter bestmöglicher
Beibehaltung seiner ursprünglichen Geometrie vereinfacht werden soll, sollte
stattdessen simplify_object_model_3d verwendet werden.
Besteht das Eingabemodell ObjectModel3D nur aus Punkten, so
stehen einige Methoden zur Verfügung die über den Parameter
Method ausgewählt werden können:
Die Standardmethode 'fast' fügt der Reihe nach alle Punkte, die
bisher keinen Nachbarpunkt mit einem Abstand unter der angegebenen
Schwelle SamplingParam haben, in das Ausgabeobjekt ein. In diesem Fall werden, soweit
vorhanden, die Punktnormalen, das Mapping sowie erweiterte
Punktattribute kopiert.
:
Die Methode 'fast_compute_normals' berechnet die Normalen von allen
Punkten die wie bei der Methode 'fast' ausgewählt wurden.
Dazu muss das Eingabeobjektmodell entweder Normalen aufweisen, die kopiert
werden, oder ein XYZ-Mapping aus dem die Normalen berechnet werden.
Die z-Komponente der berechneten Normalenvektoren ist immer positiv.
Das XYZ-Mapping wird beispielsweise von xyz_to_object_model_3d
erzeugt.
Die Methode 'accurate' geht alle Punkte von ObjectModel3D durch
und berechnet, ob innerhalb einer Kugel mit dem Radius SamplingParam
um den untersuchten Punkt noch andere Punkte liegen. Wenn keine anderen Punkte
in der Kugel enthalten sind, wird der ursprüngliche Punkt
in SampledObjectModel3D gespeichert.
Falls noch andere Punkte in der Kugel sind, wird ihr Schwerpunkt (inklusive dem
ursprünglichen Punkt) berechnet und der resultierende Punkt in
SampledObjectModel3D gespeichert. Dieser Vorgang wird mit den
restlichen Punkten wiederholt, bis keine Punkte mehr übrig sind.
Bei der Methode gehen erweiterte Attribute verloren, Normalen und
XYZ-Mapping werden kopiert.
Punkte, die keine oder wenig Nachbarn in der Originalpunktwolke haben,
können als Ausreißer erkannt und entfernt werden, indem die Mindestanzahl
an Nachbarn mit Hilfe von 'min_num_points' in GenParamName
und einer Anzahl in GenParamValue angegeben wird.
Die Methode 'accurate_use_normals' benötigt bereits berechnete
Normalen, und interpoliert benachbarte Punkte nur dann, wenn sie eine
ähnliche Normale aufweisen. Der Schwellenwert auf diese Ähnlichkeit kann
mit 'max_angle_diff' in GenParamName und einem Winkel in
GenParamValue angegeben werden. Der Standardwert für den Schwellenwert
ist 180 Grad. Es kann außerdem das selbe Ausreißerkriterium
wie bei der Methode 'accurate' angewandt werden.
Die Methode 'xyz_mapping' nur auf Punktwolken angewendet
werden, die ein XYZ-Mapping enthalten (z.B. wenn sie mittels
xyz_to_object_model_3d erstellt wurden).
Dieses Mapping speichert für jeden Punkt die ursprünglichen Bildkoordinaten.
Die Methode 'xyz_mapping' unterteilt diese Bilder in Quadrate, deren
Seitenlängen dem Parameter SamplingParam (in Pixeln) entsprechen, und
wählt einen Punkt pro Quadrat aus.
Die Methode verhält sich daher ähnlich zu einer
Anwendung von zoom_image_factor auf die ursprünglichen XYZ-Bilder.
Diese Methode ignoriert die 3D-Koordinaten bei der Auswahl der Punkte und
verwendet lediglich die 2D Bildkoordinaten der Punkte.
Wichtig ist, dass bei dieser Methode SamplingParam
einem Abstand in Pixeln entspricht, nicht einem Abstand
im 3D-Raum.
Die Methode 'xyz_mapping_compute_normals' berechnet die Normalen von allen Punkten die wie bei der Methode 'xyz_mapping' ausgewählt wurden. Die z-Komponente der berechneten Normalenvektoren ist immer positiv. Enthält das Eingabeobjektmodell bereits Normalen, werden diese kopiert. Andernfalls werden die Normalen aus den XYZ-Mapping berechnet.
Die Methode 'furthest_point' fügt iterativ jeweils den Punkt des
Eingabeobjekts dem Ausgabeobjekt hinzu, der am weitesten von allen bisherigen
Punkten des Ausgabeobjekts entfernt ist.
Für diese Methode wird in SamplingParam die gewünschte
Anzahl der Punkte des Ausgabeobjekts übergeben.
Ist diese größer oder gleich der Anzahl der Punkte des Eingabeobjekts, so
werden alle Punkte des Eingabeobjekts zurückgegeben.
Der erste dem Ausgabeobjekt hinzugefügte Punkt ist derjenige, der am weitesten vom Zentrum des achsenparallelen Quaders um alle Punkte des Eingabeobjekts entfernt ist.
Die Methode 'furthest_point_compute_normals' berechnet die Normalen
von allen Punkten, die wie bei der Methode 'furthest_point' ausgewählt
wurden.
Auch bei dieser Methode wird in SamplingParam die Anzahl der
gewünschten Punkte im Ausgabeobjekt übergeben.
Für die Normalenberechnung muss das Eingabeobjektmodell entweder Normalen
aufweisen, die kopiert werden, oder ein XYZ-Mapping aus dem die Normalen
berechnet werden.
Die z-Komponente der berechneten Normalenvektoren ist immer positiv.
Das XYZ-Mapping wird beispielsweise von xyz_to_object_model_3d
erzeugt.
Besteht das Eingabeobjektmodell aus Flächen (Dreiecke oder Polygone) oder aus
einem 3D-Primitiv, so wird die Oberfläche mit der in SamplingParam angegebenen Distanz
abgetastet.
In diesem Fall wird die in Method angegebene Methode ignoriert.
Die Orientierung der berechneten Normalen hängt vom Umlaufsinn
der Flächen des Modells ab. Üblicherweise variiert der Umlaufsinn der Flächen
innerhalb eines CAD-Modells nicht, wodurch die ermittelten Normalen entweder
alle nach innen oder nach außen gerichtet sind.
3D-Primitive vom Typ Ebene oder Zylinder dürfen nur endliche Ausdehnung haben.
Besteht das Eingabeobjektmodell aus Linien, so werden die Linien mit der
angegebenen Distanz abgetastet.
Der Abtastprozess approximiert Oberflächen, indem neue Punkte im Ausgabeobjektmodell erzeugt werden. Daher gehen erweiterte Attribute des Eingabeobjektmodells verloren.
Bei gemischten Eingabeobjektmodellen entscheidet die Abtastpriorität (von hoch bis niedrig): Flächen, Linien, Primitive, und Punkte, d.h. nur die Objekte der höchsten Priorität werden abgetastet.
Für die Abtastdistanz oder Anzahl an Punkten in SamplingParam kann entweder ein Wert
übergeben werden, der für alle in ObjectModel3D übergebenen
3D-Objektmodelle gültig ist, oder für jedes Eingabemodell ein eigener Wert.
Beschreibt SamplingParam einen Abstand im 3D-Raum, so wird die HALCON-übliche Einheit 'm' verwendet.
Dieser Operator unterstützt Cancel-Timeouts und Interrupts.
ObjectModel3D (input_control) object_model_3d(-array) → (handle)
Handle des abzutastenden 3D-Objektmodells.
Method (input_control) string → (string)
Verwendete Methode zum Abtasten.
Default: 'fast'
Werteliste: 'accurate', 'accurate_use_normals', 'fast', 'fast_compute_normals', 'furthest_point', 'furthest_point_compute_normals', 'xyz_mapping', 'xyz_mapping_compute_normals'
SamplingParam (input_control) real(-array) → (real / integer)
Abtastdistanz oder Anzahl an Punkten.
Parameteranzahl: SamplingParam == 1 || SamplingParam == ObjectModel3D
Default: 0.05
GenParamName (input_control) string-array → (string)
Namen der generischen Parameter, die für die Abtastung eingestellt werden sollen.
Default: []
Werteliste: 'max_angle_diff', 'min_num_points'
GenParamValue (input_control) number-array → (real / integer / string)
Werte der generischen Parameter, die für die Abtastung eingestellt werden sollen.
Default: []
Wertevorschläge: 1, 2, 5, 10, 20, 0.1, 0.25, 0.5
SampledObjectModel3D (output_control) object_model_3d(-array) → (handle)
Handle des 3D-Objektmodells mit den abgetasteten Punkten.
Parameteranzahl: SampledObjectModel3D == ObjectModel3D
gen_box_object_model_3d ([0,0,0,0,0,0,0],3,2,1, ObjectModel3D)
sample_object_model_3d (ObjectModel3D, 'fast', 0.05, [], [], \
SampledObjectModel3D)
dev_get_window (WindowHandle)
visualize_object_model_3d (WindowHandle, SampledObjectModel3D, \
[], [], [], [], [], [], [], PoseOut)
sample_object_model_3d liefert den Wert 2 (
H_MSG_TRUE)
wenn alle
Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung durchgeführt.
read_object_model_3d,
gen_plane_object_model_3d,
gen_sphere_object_model_3d,
gen_cylinder_object_model_3d,
gen_box_object_model_3d,
gen_sphere_object_model_3d_center,
xyz_to_object_model_3d
get_object_model_3d_params,
clear_object_model_3d
simplify_object_model_3d,
smooth_object_model_3d
3D Metrology