sample_object_model_3dT_sample_object_model_3dSampleObjectModel3dSampleObjectModel3d (Operator)

Name

sample_object_model_3dT_sample_object_model_3dSampleObjectModel3dSampleObjectModel3d — Abtasten eines 3D-Objektmodells.

Signatur

sample_object_model_3d( : : ObjectModel3D, Method, SampleDistance, GenParamName, GenParamValue : SampledObjectModel3D)

Herror T_sample_object_model_3d(const Htuple ObjectModel3D, const Htuple Method, const Htuple SampleDistance, const Htuple GenParamName, const Htuple GenParamValue, Htuple* SampledObjectModel3D)

void SampleObjectModel3d(const HTuple& ObjectModel3D, const HTuple& Method, const HTuple& SampleDistance, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* SampledObjectModel3D)

static HObjectModel3DArray HObjectModel3D::SampleObjectModel3d(const HObjectModel3DArray& ObjectModel3D, const HString& Method, const HTuple& SampleDistance, const HTuple& GenParamName, const HTuple& GenParamValue)

HObjectModel3D HObjectModel3D::SampleObjectModel3d(const HString& Method, double SampleDistance, const HTuple& GenParamName, const HTuple& GenParamValue) const

HObjectModel3D HObjectModel3D::SampleObjectModel3d(const char* Method, double SampleDistance, const HTuple& GenParamName, const HTuple& GenParamValue) const

HObjectModel3D HObjectModel3D::SampleObjectModel3d(const wchar_t* Method, double SampleDistance, const HTuple& GenParamName, const HTuple& GenParamValue) const   (Nur Windows)

static void HOperatorSet.SampleObjectModel3d(HTuple objectModel3D, HTuple method, HTuple sampleDistance, HTuple genParamName, HTuple genParamValue, out HTuple sampledObjectModel3D)

static HObjectModel3D[] HObjectModel3D.SampleObjectModel3d(HObjectModel3D[] objectModel3D, string method, HTuple sampleDistance, HTuple genParamName, HTuple genParamValue)

HObjectModel3D HObjectModel3D.SampleObjectModel3d(string method, double sampleDistance, HTuple genParamName, HTuple genParamValue)

Beschreibung

sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3d erzeugt eine abgetastete Variante des 3D-Objektmodells ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D, welches aus Punkten besteht, die zueinander den Mindestabstand SampleDistanceSampleDistanceSampleDistanceSampleDistancesampleDistance haben. Das erzeugte 3D-Objektmodell wird in SampledObjectModel3DSampledObjectModel3DSampledObjectModel3DSampledObjectModel3DsampledObjectModel3D zurückgegeben.

Der Gebrauch von sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3d 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_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3d verwendet werden.

Besteht das Eingabemodell ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D nur aus Punkten, so stehen einige Methoden zur Verfügung die über den Parameter MethodMethodMethodMethodmethod ausgewählt werden können:

'fast'"fast""fast""fast""fast":

Die Standardmethode 'fast'"fast""fast""fast""fast" fügt der Reihe nach alle Punkte, die bisher keinen Nachbarpunkt mit einem Abstand unter der angegebenen Schwelle haben, in das Ausgabeobjekt ein. In diesem Fall werden, soweit vorhanden, die Punktnormalen, das Mapping sowie erweiterte Punktattribute kopiert.

'fast_compute_normals'"fast_compute_normals""fast_compute_normals""fast_compute_normals""fast_compute_normals"

: Die Methode 'fast_compute_normals'"fast_compute_normals""fast_compute_normals""fast_compute_normals""fast_compute_normals" berechnet die Normalen von allen Punkten die wie bei der Methode 'fast'"fast""fast""fast""fast" ausgewählt wurden. Dazu muss das Eingabeobjektmodell entweder Normalen aufweisen, die kopiert werden, oder ein XYZ-Mapping aus dem die Normalen berechnet werden. Das XYZ-Mapping wird beispielsweise von xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3d erzeugt.

'accurate'"accurate""accurate""accurate""accurate":

Die Methode 'accurate'"accurate""accurate""accurate""accurate" geht alle Punkte von ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D durch und berechnet, ob innerhalb einer Kugel mit dem Radius SampleDistanceSampleDistanceSampleDistanceSampleDistancesampleDistance um den untersuchten Punkt noch andere Punkte liegen. Wenn keine anderen Punkte in der Kugel enthalten sind, wird der ursprüngliche Punkt in SampledObjectModel3DSampledObjectModel3DSampledObjectModel3DSampledObjectModel3DsampledObjectModel3D gespeichert. Falls noch andere Punkte in der Kugel sind, wird ihr Schwerpunkt (inklusive dem ursprünglichen Punkt) berechnet und der resultierende Punkt in SampledObjectModel3DSampledObjectModel3DSampledObjectModel3DSampledObjectModel3DsampledObjectModel3D 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'"min_num_points""min_num_points""min_num_points""min_num_points" in GenParamNameGenParamNameGenParamNameGenParamNamegenParamName und einer Anzahl in GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue angegeben wird.

'accurate_use_normals'"accurate_use_normals""accurate_use_normals""accurate_use_normals""accurate_use_normals":

Die Methode 'accurate_use_normals'"accurate_use_normals""accurate_use_normals""accurate_use_normals""accurate_use_normals" benötigt bereits berechnete Normalen, und interpoliert benachbarte Punkte nur dann, wenn sie eine ähnliche Normale aufweisen. Der Schwellwert auf diese Ähnlichkeit kann mit 'max_angle_diff'"max_angle_diff""max_angle_diff""max_angle_diff""max_angle_diff" in GenParamNameGenParamNameGenParamNameGenParamNamegenParamName und einem Winkel in GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue angegeben werden. Der Standardwert für den Schwellwert ist '180'"180""180""180""180" Grad. Es kann außerdem das selbe Ausreißerkriterium wie bei der Methode 'accurate'"accurate""accurate""accurate""accurate" angewandt werden.

'xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping":

Die Methode 'xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping" nur auf Punktwolken angewendet werden, die ein XYZ-Mapping enthalten (z.B. wenn sie mittels xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3d erstellt wurden). Dieses Mapping speichert für jeden Punkt die ursprünglichen Bildkoordinaten. Die Methode 'xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping" unterteilt diese Bilder in Quadrate, deren Seitenlängen dem Parameter SampleDistanceSampleDistanceSampleDistanceSampleDistancesampleDistance (in Pixeln) entsprechen, und wählt einen Punkt pro Quadrat aus.

Die Methode verhält sich daher ähnlich zu einer Anwendung von zoom_image_factorzoom_image_factorZoomImageFactorZoomImageFactorZoomImageFactor 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 anders als bei den anderen Methoden SampleDistanceSampleDistanceSampleDistanceSampleDistancesampleDistance bei dieser Methode einem Abstand in Pixeln entspricht, nicht einem Abstand im 3D-Raum.

'xyz_mapping_compute_normals'"xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals":

Die Methode 'xyz_mapping_compute_normals'"xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals" berechnet die Normalen von allen Punkten die wie bei der Methode 'xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping" ausgewählt wurden. Enthält das Eingabeobjektmodell bereits Normalen, werden diese kopiert. Andernfalls werden die Normalen aus den XYZ-Mapping berechnet.

Besteht das Eingabeobjektmodell aus Flächen (Dreiecke oder Polygone) oder aus einem 3D-Primitiv, so wird die Oberfläche mit der angegebenen Distanz abgetastet. In diesem Fall wird die in MethodMethodMethodMethodmethod angegebene Methode ignoriert. 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 Eingabeobjektmodell 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 in SampleDistanceSampleDistanceSampleDistanceSampleDistancesampleDistance kann entweder ein Wert übergeben werden, der für alle in ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D übergebenen 3D-Objektmodelle gültig ist, oder für jedes Eingabemodell ein eigener Wert. Die Einheit der Abtastdistanz ist die HALCON-übliche Einheit 'm'"m""m""m""m".

Ausführungsinformationen

Dieser Operator unterstützt Cancel-Timeouts und Interrupts.

Parameter

ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D (input_control)  object_model_3d(-array) HObjectModel3D, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des abzutastenden 3D-Objektmodells.

MethodMethodMethodMethodmethod (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Verwendete Methode zum Abtasten.

Defaultwert: 'fast' "fast" "fast" "fast" "fast"

Werteliste: 'accurate'"accurate""accurate""accurate""accurate", 'accurate_use_normals'"accurate_use_normals""accurate_use_normals""accurate_use_normals""accurate_use_normals", 'fast'"fast""fast""fast""fast", 'fast_compute_normals'"fast_compute_normals""fast_compute_normals""fast_compute_normals""fast_compute_normals", 'xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping", 'xyz_mapping_compute_normals'"xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals"

SampleDistanceSampleDistanceSampleDistanceSampleDistancesampleDistance (input_control)  real(-array) HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Abtastdistanz.

Parameteranzahl: SampleDistance == 1 || SampleDistance == ObjectModel3D

Defaultwert: 0.05

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  string-array HTupleHTupleHtuple (string) (string) (HString) (char*)

Namen der generischen Parameter, die für die Abtastung eingestellt werden sollen.

Defaultwert: []

Werteliste: 'max_angle_diff'"max_angle_diff""max_angle_diff""max_angle_diff""max_angle_diff", 'min_num_points'"min_num_points""min_num_points""min_num_points""min_num_points"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  number-array HTupleHTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Werte der generischen Parameter, die für die Abtastung eingestellt werden sollen.

Defaultwert: []

Wertevorschläge: 1, 2, 5, 10, 20, 0.1, 0.25, 0.5

SampledObjectModel3DSampledObjectModel3DSampledObjectModel3DSampledObjectModel3DsampledObjectModel3D (output_control)  object_model_3d(-array) HObjectModel3D, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des 3D-Objektmodells mit den abgetasteten Punkten.

Parameteranzahl: SampledObjectModel3D == ObjectModel3D

Beispiel (HDevelop)

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)

Ergebnis

sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3d liefert den Wert 2 (H_MSG_TRUE) wenn alle Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3d, gen_plane_object_model_3dgen_plane_object_model_3dGenPlaneObjectModel3dGenPlaneObjectModel3dGenPlaneObjectModel3d, gen_sphere_object_model_3dgen_sphere_object_model_3dGenSphereObjectModel3dGenSphereObjectModel3dGenSphereObjectModel3d, gen_cylinder_object_model_3dgen_cylinder_object_model_3dGenCylinderObjectModel3dGenCylinderObjectModel3dGenCylinderObjectModel3d, gen_box_object_model_3dgen_box_object_model_3dGenBoxObjectModel3dGenBoxObjectModel3dGenBoxObjectModel3d, gen_sphere_object_model_3d_centergen_sphere_object_model_3d_centerGenSphereObjectModel3dCenterGenSphereObjectModel3dCenterGenSphereObjectModel3dCenter, xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3d

Nachfolger

get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParams, clear_object_model_3dclear_object_model_3dClearObjectModel3dClearObjectModel3dClearObjectModel3d

Alternativen

simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3d, smooth_object_model_3dsmooth_object_model_3dSmoothObjectModel3dSmoothObjectModel3dSmoothObjectModel3d

Modul

3D Metrology