Zeichnen einer Fläche aus einer Reihe von 3D-Streustrahlungspunkten in MATLAB

8

Ich habe eine große (~ 60.000) Menge von Triplet-Datenpunkten, die x-, y- und z-Koordinaten repräsentieren, die über ein kartesisches Volumen verstreut sind.

Ich suche nach einer Möglichkeit, Matlab zu verwenden, um die nicht-konvexe Form / das Volumen, die durch die maximale Ausdehnung der Punkte beschrieben wird, zu visualisieren.

Ich kann natürlich die einzelnen Punkte mit scatter3 visualisieren, aber angesichts der großen Anzahl von Punkten werden die Details der Form durch das Rauschen der Punkte verdeckt.

Stellen Sie sich als Analogie vor, dass Sie eine Sanduhr mit Kugeln zufälliger Größen wie BBs, Ping Pong Bällen und Kix gefüllt haben und dann die Koordinaten der Mitte jedes Objekts erhalten haben. Wie würdest du diese Koordinaten nehmen und die Form der Sanduhr visualisieren, die sie enthält?

In meinem Beispiel werden Objekte unterschiedlicher Größe verwendet, da der Abstand zwischen Datenpunkten ungleichmäßig und effektiv zufällig ist. Es wird eine Sanduhr verwendet, da die Form nicht konvex ist.

    
Adam Wuerl 30.03.2011, 21:41
quelle

2 Antworten

11

Wenn Ihre Oberfläche, die die Punkte einschließt, als konvexes Polyeder beschrieben werden kann (dh wie die Oberfläche eines Würfels oder eines Dodekaeder , ohne konkave Gruben oder zackige spitze Teile ), dann würde ich mit der Erstellung einer 3D Delaunay-Triangulation der Punkte. Dadurch wird das Volumen um die Punkte herum mit einer Reihe von Tetraederelementen mit den Punkten als ihren Scheitelpunkten gefüllt, und Sie können dann die Menge der dreieckigen Flächen, die die äußere Hülle des Volumens bilden, mit dem convexHull Methode der Klasse DelaunayTri .

Hier ist ein Beispiel, das 200 zufällige Punkte erzeugt, die gleichmäßig innerhalb des Einheitswürfels verteilt sind, ein tetraedrisches Netz für diese Punkte erzeugt und dann die konvexe 3-D-Hülle für das Volumen findet:

%Vor%

    
gnovice 31.03.2011 01:32
quelle
0

Sie könnten Ihre Daten als eine Probe aus einer dreidimensionalen Wahrscheinlichkeitsdichte behandeln und diese Dichte auf einem Gitter, z. über ein 3D-Histogramm oder besser einen 3D Kernel-Dichte-Schätzer . Dann wenden Sie einen Schwellenwert an und extrahieren Sie die Oberfläche mit isosurface .

Leider ist hist3 in der Statistics Toolbox (trotz seines Namens) nur ein 2D-Histogramm, und ksdensity funktioniert nur mit 1D-Daten, so dass Sie 3D-Versionen selbst implementieren müssen.

    
A. Donda 11.08.2014 03:19
quelle

Tags und Links