smooth_object_model_3dT_smooth_object_model_3dSmoothObjectModel3dSmoothObjectModel3dsmooth_object_model_3d (Operator)

Name

smooth_object_model_3dT_smooth_object_model_3dSmoothObjectModel3dSmoothObjectModel3dsmooth_object_model_3d — Glätten von 3D-Punkten eines 3D-Objektmodells.

Signatur

smooth_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : SmoothObjectModel3D)

Herror T_smooth_object_model_3d(const Htuple ObjectModel3D, const Htuple Method, const Htuple GenParamName, const Htuple GenParamValue, Htuple* SmoothObjectModel3D)

void SmoothObjectModel3d(const HTuple& ObjectModel3D, const HTuple& Method, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* SmoothObjectModel3D)

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

HObjectModel3D HObjectModel3D::SmoothObjectModel3d(const HString& Method, const HTuple& GenParamName, const HTuple& GenParamValue) const

HObjectModel3D HObjectModel3D::SmoothObjectModel3d(const char* Method, const HTuple& GenParamName, const HTuple& GenParamValue) const

HObjectModel3D HObjectModel3D::SmoothObjectModel3d(const wchar_t* Method, const HTuple& GenParamName, const HTuple& GenParamValue) const   (Nur Windows)

static void HOperatorSet.SmoothObjectModel3d(HTuple objectModel3D, HTuple method, HTuple genParamName, HTuple genParamValue, out HTuple smoothObjectModel3D)

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

HObjectModel3D HObjectModel3D.SmoothObjectModel3d(string method, HTuple genParamName, HTuple genParamValue)

def smooth_object_model_3d(object_model_3d: MaybeSequence[HHandle], method: str, gen_param_name: Sequence[str], gen_param_value: Sequence[Union[float, int, str]]) -> Sequence[HHandle]

def smooth_object_model_3d_s(object_model_3d: MaybeSequence[HHandle], method: str, gen_param_name: Sequence[str], gen_param_value: Sequence[Union[float, int, str]]) -> HHandle

Beschreibung

Der Operator smooth_object_model_3dsmooth_object_model_3dSmoothObjectModel3dSmoothObjectModel3dSmoothObjectModel3dsmooth_object_model_3d glättet die 3D-Punkte des in ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d eingegebenen 3D-Objektmodells. Die Glättung wird mit dem in MethodMethodMethodMethodmethodmethod eingegeben Verfahren durchgeführt. Zurzeit wird nur das Verfahren Moving Least Squares (MLS, MethodMethodMethodMethodmethodmethod='mls'"mls""mls""mls""mls""mls") unterstützt.

Für jeden Punkt P berechnet der MLS-Algorithmus eine Ebene oder eine Oberfläche höherer Ordnung, welche optimal an die k-Nachbarschaft des Punktes (d.h. die nächsten k Nachbarn) angepasst wird. Das Oberflächenfitting ist im Wesentlichen als gewichtete Methode der kleinsten Quadraten für die Schätzung der Ebene- bzw. Oberflächenparameter implementiert. Die nächsten Nachbarn von P haben einen größeren Einfluss auf die Parameterschätzung als die ferneren Punkte. Dieser Einfluss wird durch die folgende Gewichtungsfunktion und der Parameter gesteuert: Der Punkt wird dann auf die Oberfläche projiziert. Dieses Verfahren wird für jeden einzelnen Punkt wiederholt, was in einem geglätteten Punktsatz resultiert. Die Punkte auf der gefitteten Oberflächen haben leicht zu berechnende Normalen (d.h. die Normalen können direkt aus den jeweiligen Oberflächenparametern berechnet werden). Folglich werden die Punkte nicht nur geglättet, sondern als Nebeneffekt des Glättens bekommen sie eine Schätzung für ihre Normalen.

Mit GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value können die folgenden zusätzlichen Parameternamen und -werte des MLS-Algorithmus eingestellt werden:

'mls_kNN'"mls_kNN""mls_kNN""mls_kNN""mls_kNN""mls_kNN":

Setzt die Anzahl der nächsten k Nachbarn, welche beim Fitten einer Ebene, bzw. Oberfläche zu jedem Punkt betrachtet werden.

Wertevorschläge: 40, 60, 80, 100, 400.

Standardwert: 60

'mls_order'"mls_order""mls_order""mls_order""mls_order""mls_order":

Setzt die Ordnung der MLS-Oberfläche. Für 'mls_order'"mls_order""mls_order""mls_order""mls_order""mls_order"=1 ist die Oberfläche eine einfache Ebene.

Wertevorschläge: 1, 2, 3.

Standardwert: 2

'mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma":

Setzt den Gewichtungsparameter als Festwert in Meter. Der auszuwählende Wert hängt stark vom Maßstab der eingegebenen Punktdaten ab. Als Faustregel sollte man einen Wert für wählen, der dem typischen Abstand jedes Punktes P zu seinem k/2. (mittleren) Nachbarn entspricht. Es ist zu beachten, dass, wenn die Daten eine variierende Dichte haben, das Setzen eines Festwerts für zu ungleichen Glättungsergebnissen für Bereiche unterschiedlicher Punktdichte führt. Dieses Problem kann umgegangen werden, indem man statt 'mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma" den Parameter 'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma" benutzt. Letzterer ist unabhängig vom Maßstab und deswegen auch einfacher zu bedienen. Es sollte allerdings auch beachtet werden, dass der Parameter 'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma" ignoriert wird, wenn der Parameter 'mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma" gesetzt ist.

Wertevorschläge: 0.0001, 0.001, 0.01, 0.1, 1.0.

'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma":

Setzt einen Multiplikationsfaktor der verwendet wird, um für jeden Punkt P nach der Formel zu berechnen: wobei der k/2. Nachbar von P ist. Anders als der global für alle Punkte wirkende Parameter wird allein für den jeweiligen Punkt P berechnet. Dadurch werden Probleme vermieden, welche durch das Verwenden eines festen Wertes für Daten mit variierender Punktdichte entstehen. Es sollte allerdings auch beachtet werden, dass der Parameter 'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma" ignoriert wird, wenn der Parameter 'mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma" gesetzt ist.

Wertevorschläge: 0.1, 0.5, 1.0, 1.5, 2.0.

Standardwert: 1.0.

'mls_force_inwards'"mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards":

Ist dieser Parameter auf den Wert 'true'"true""true""true""true""true" gesetzt, so werden alle Normalen so orientiert, dass sie „zum Koordinatenursprung zeigen“. Mathematisch ausgedrückt bedeutet das, dass das Skalarprodukt zwischen dem Normalenvektor und dem Vektor, der vom entsprechenden Oberflächenpunkt zum Koordinatenursprung zeigt, positiv ist. Dies kann notwendig sein, wenn das resultierende SmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DsmoothObjectModel3Dsmooth_object_model_3d für das oberflächenbasierte Matching verwendet werden soll --- entweder als Modell im Operator create_surface_modelcreate_surface_modelCreateSurfaceModelCreateSurfaceModelCreateSurfaceModelcreate_surface_model oder als 3D-Szene im Operator find_surface_modelfind_surface_modelFindSurfaceModelFindSurfaceModelFindSurfaceModelfind_surface_model --- da hier die konsistente Orientierung der Normalen wichtig ist. Wird der Parameter 'mls_force_inwards'"mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards" auf den Wert 'false'"false""false""false""false""false" gesetzt, so ist die Orientierung der Normalen beliebig.

Werteliste: 'true'"true""true""true""true""true", 'false'"false""false""false""false""false".

Standardwert: 'true'"true""true""true""true""true".

Glättung des 2D-Mappings

Für MethodMethodMethodMethodmethodmethod='xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping" oder MethodMethodMethodMethodmethodmethod='xyz_mapping_compute_normals'"xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals" werden die Punkte des 3D-Objektmodells durch die Anwendung eines 2D-Filters auf dem enthaltenen Tiefenbild geglättet. Für MethodMethodMethodMethodmethodmethod='xyz_mapping_compute_normals'"xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals" wird SmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DsmoothObjectModel3Dsmooth_object_model_3d zusätzlich um Normalen erweitert, die anhand des XYZ-Mappings berechnet werden. Enthält ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d kein 2D-Mapping, wird ein Fehler geworfen. Da das 3D-Objektmodell anhand des 2D-Mappings geglättet wird, ist die Verwendung von MethodMethodMethodMethodmethodmethod='xyz_mapping'"xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping""xyz_mapping" oder MethodMethodMethodMethodmethodmethod='xyz_mapping_compute_normals'"xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals""xyz_mapping_compute_normals" üblicherweise schneller als MethodMethodMethodMethodmethodmethod='mls'"mls""mls""mls""mls""mls". Invalide Punkte (z.B. duplizierte Punkte mit Koordinaten [0,0,0]) sollten vor Anwendung des Operators aus dem 3D-Objektmodell entfernt werden, beispielsweise mit select_points_object_model_3dselect_points_object_model_3dSelectPointsObjectModel3dSelectPointsObjectModel3dSelectPointsObjectModel3dselect_points_object_model_3d und Attribut 'point_coord_z'"point_coord_z""point_coord_z""point_coord_z""point_coord_z""point_coord_z" oder 'num_neighbors_fast X'"num_neighbors_fast X""num_neighbors_fast X""num_neighbors_fast X""num_neighbors_fast X""num_neighbors_fast X".

Mit GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value können folgende zusätzliche Parameter der 2D Glättung eingestellt werden:

'xyz_mapping_filter'"xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter":

Setzt den verwendeten Filter zur Glättung des 2D-Mappings. Die Größe der Filtermaske kann mit 'xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" und 'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height" gesetzt werden.

Im Standardmodus 'median_separate'"median_separate""median_separate""median_separate""median_separate""median_separate" ist der verwendete Algorithmus vergleichbar mit median_separatemedian_separateMedianSeparateMedianSeparateMedianSeparatemedian_separate. Dieser Modus ist häufig schneller als 'median'"median""median""median""median""median", kann jedoch auch zu weniger präzisen Ergebnissen oder Artefakten an Oberflächendiskontinuitäten führen.

Im Modus 'median'"median""median""median""median""median" ist der Algorithmus vergleichbar mit median_imagemedian_imageMedianImageMedianImageMedianImagemedian_image.

Werteliste: 'median_separate'"median_separate""median_separate""median_separate""median_separate""median_separate", 'median'"median""median""median""median""median".

Standardwert: 'median_separate'"median_separate""median_separate""median_separate""median_separate""median_separate".

'xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width", 'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height":

Setzen Breite und Höhe der verwendeten Filtermaske.

Für 'xyz_mapping_filter'"xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter"='median_separate'"median_separate""median_separate""median_separate""median_separate""median_separate" und 'xyz_mapping_filter'"xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter"='median'"median""median""median""median""median" werden gerade Werte für 'xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" oder 'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height" automatisch auf den nächstgrößeren ungeraden Wert gesetzt.

Für 'xyz_mapping_filter'"xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter""xyz_mapping_filter"='median'"median""median""median""median""median" muss die verwendete Filtermaske quadratisch sein ('xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" = 'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height"). Wenn nur 'xyz_mapping_mask_width'"xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width""xyz_mapping_mask_width" oder 'xyz_mapping_mask_height'"xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height""xyz_mapping_mask_height" gesetzt wird, wird der andere Parameter automatisch auf den gleichen Wert gesetzt. Werden zwei verschiedene Werte gesetzt, wird ein Fehler geworfen.

Wertevorschläge: 3, 5, 7, 9.

Standardwert: 3.

Ausführungsinformationen

Dieser Operator unterstützt Cancel-Timeouts und Interrupts.

Parameter

ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d (input_control)  object_model_3d(-array) HObjectModel3D, HTupleMaybeSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle eines 3D-Objektmodells mit 3D-Punktdaten.

MethodMethodMethodMethodmethodmethod (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Glättungsmethode.

Defaultwert: 'mls' "mls" "mls" "mls" "mls" "mls"

Werteliste: 'mls'"mls""mls""mls""mls""mls"

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control)  attribute.name-array HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Namen der generischen Parameter.

Defaultwert: []

Werteliste: 'mls_abs_sigma'"mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma""mls_abs_sigma", 'mls_force_inwards'"mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards""mls_force_inwards", 'mls_kNN'"mls_kNN""mls_kNN""mls_kNN""mls_kNN""mls_kNN", 'mls_order'"mls_order""mls_order""mls_order""mls_order""mls_order", 'mls_relative_sigma'"mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma""mls_relative_sigma"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control)  attribute.value-array HTupleSequence[Union[float, int, str]]HTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Werte der generischen Parameter.

Defaultwert: []

Wertevorschläge: 10, 20, 40, 60, 0.1, 0.5, 1.0, 2.0, 0, 1, 2

SmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DSmoothObjectModel3DsmoothObjectModel3Dsmooth_object_model_3d (output_control)  object_model_3d(-array) HObjectModel3D, HTupleSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des geglätteten 3D-Objektmodells.

Alternativen

surface_normals_object_model_3dsurface_normals_object_model_3dSurfaceNormalsObjectModel3dSurfaceNormalsObjectModel3dSurfaceNormalsObjectModel3dsurface_normals_object_model_3d, sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3dsample_object_model_3d, simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d

Modul

3D Metrology