| Operatoren |
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 sigma gesteuert:
/ || P' - P ||^2 \
w(P') = exp | - -------------- |
\ sigma^2 /
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 sigma als Festwert in Meter. Der auszuwählende Wert hängt stark vom Maßstab der eingegebenen Punktdaten ab. Als Daumenregel sollte man einen Wert für sigma nehmen, der den typischen Abstand jedes Punktes P zu seinem k/2. (mittleren) Nachbarn P_median entspricht. Es ist zu beachten, dass, wenn die Daten eine variierende Dichte haben, das Setzen eines Festwerts für sigma 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 rel_sigma der verwendet wird, um sigma_P für jeden Punkt P nach der Forlmel zu berechnen:
sigma_P = rel_sigma*|| P_median - P ||,
wobei P_median der k/2. Nachbar von P ist. Anders als der global für alle Punkte wirkende Parameter sigma wird sigma_P 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 zwischem 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', 'false' (Standardwert)
Es ist zu beachten, dass wenn ein 3D-Objektmodell nicht mehr benötigt wird oder überschrieben werden soll, zuerst der Operator clear_object_model_3d aufgerufen werden muss, um den entsprechenden Speicher freizugeben.
Handle eines 3D-Objektmodells mit 3D-Punktdaten.
Namen der generischen Parameter.
Defaultwert: []
Werteliste: 'mls_abs_sigma', 'mls_force_inwards', 'mls_kNN', 'mls_order', 'mls_relative_sigma'
Werte der generischen Parameter.
Defaultwert: []
Wertevorschläge: 10, 20, 40, 60, 0.1, 0.5, 1.0, 2.0, 0, 1, 2
Handle des geglätteten 3D-Objektmodells.
surface_normals_object_model_3d
3D Metrology
| Operatoren |