smooth_object_model_3d
— Glätten von 3D-Punkten eines 3D-Objektmodells.
smooth_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : SmoothObjectModel3D)
Der Operator smooth_object_model_3d
glättet die 3D-Punkte des
in ObjectModel3D
eingegebenen 3D-Objektmodells. Die Glättung
wird mit dem in Method
eingegeben Verfahren durchgeführt. Zurzeit
wird nur das Verfahren Moving Least Squares (MLS,
Method
='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 GenParamName
und GenParamValue
können die folgenden
zusätzlichen Parameternamen und -werte des MLS-Algorithmus eingestellt
werden:
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 (Standardwert)
,
80, 100, 400
Setzt die Ordnung der der MLS-Oberfläche. Für 'mls_order' =1 ist die Oberfläche eine einfache Ebene.
Wertevorschläge:
1, 2 (Standardwert)
,
3
Setzt der 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 nehmen, der den 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 ungleiche Glättungsergebnissen für die Bereiche mit unterschiedlicher Punktdichte führt. Dieses Problem kann umgegangen werden indem man statt 'mls_abs_sigma' den Parameter 'mls_relative_sigma' benutzt. Der letztere ist unabhängig vom Maßstab und deswegen auch einfacher zu bedienen. Es sollte allerdings auch beachtet werden, dass der Parameter 'mls_relative_sigma' ignoriert wird, wenn der Parameter 'mls_abs_sigma' gesetzt ist.
Wertevorschläge:
0.0001, 0.001,
0.01, 0.1, 1.0
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' ignoriert wird, wenn der Parameter 'mls_abs_sigma' gesetzt ist.
Wertevorschläge:
0.1, 0.5, 1.0
(Standardwert)
, 1.5, 2.0
Ist dieser Parameter auf den Wert '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 SmoothObjectModel3D
für das
oberflächenbasierte Matching verwendet werden soll --- entweder
als Modell im Operator create_surface_model
oder als
3D-Szene im Operator find_surface_model
--- da hier die
konsistente Orientierung der Normalen wichtig ist. Wird der
Parameter 'mls_force_inwards' auf den Wert
'false' gesetzt, so ist die Orientierung der Normalen
beliebig.
Werteliste:
'true' (Standardwert)
,
'false'
Dieser Operator unterstützt Cancel-Timeouts und Interrupts.
ObjectModel3D
(input_control) object_model_3d(-array) →
(handle)
Handle eines 3D-Objektmodells mit 3D-Punktdaten.
Method
(input_control) string →
(string)
Glättungsmethode.
Defaultwert: 'mls'
Werteliste: 'mls'
GenParamName
(input_control) attribute.name-array →
(string)
Namen der generischen Parameter.
Defaultwert: []
Werteliste: 'mls_abs_sigma' , 'mls_force_inwards' , 'mls_kNN' , 'mls_order' , 'mls_relative_sigma'
GenParamValue
(input_control) attribute.value-array →
(real / integer / string)
Werte der generischen Parameter.
Defaultwert: []
Wertevorschläge: 10, 20, 40, 60, 0.1, 0.5, 1.0, 2.0, 0, 1, 2
SmoothObjectModel3D
(output_control) object_model_3d(-array) →
(handle)
Handle des geglätteten 3D-Objektmodells.
surface_normals_object_model_3d
,
sample_object_model_3d
,
simplify_object_model_3d
3D Metrology