Domanda

voglio generare una maschera binaria che ha quelle per tutti i voxel all'interno e zeri per ogni voxel al di fuori di un volume. Il volume è definito dalla convesso intorno ad un insieme di coordinate 3D (<100; alcune delle coordinate sono all'interno del volume).

posso ottenere convesso utilizzando CONVHULLN , ma come faccio a convertire in una maschera binaria?

Nel caso in cui non v'è alcun buon modo per andare via convesso, hai qualche altra idea di come avrei potuto creare la maschera binaria?

È stato utile?

Soluzione

È possibile risolvere questo problema utilizzando il DelaunayTri di classe e il pointLocation metodo . Ecco un esempio:

pointMatrix = rand(20,3);       %# A set of 20 random 3-D points
dt = DelaunayTri(pointMatrix);  %# Create a Delaunay triangulation
[X,Y,Z] = meshgrid(0:0.01:1);   %# Create a mesh of coordinates for your volume
simplexIndex = pointLocation(dt,X(:),Y(:),Z(:));  %# Find index of simplex that
                                                  %#   each point is inside
mask = ~isnan(simplexIndex);    %# Points outside the convex hull have a
                                %#   simplex index of NaN
mask = reshape(mask,size(X));   %# Reshape the mask to 101-by-101-by-101

L'esempio precedente crea una maschera logica per un 101-by-101-by-101 maglia che attraversa il volume unitario (0 a 1 in ogni dimensione), con un 1 (true) per i punti di trama all'interno del guscio convesso il set point 3-D.

Altri suggerimenti

È tardi qui, in modo che solo un suggerimento molto superficiale:

  1. Con i punti della tua convesso costruire una tassellazione Delaunay.
  2. Utilizzando il metodo pointLocation del compito in classe DelaunayTri ogni punto la matrice di pixel.

Mi aspetto che questo sarà molto lento, e che non ci sono soluzioni migliori, se si viene nei miei sogni vi posterò di nuovo domani.

Questo è un problema di conversione di scansione. Scopri la sezione 8 della 3D Scan-conversione Algoritmi per Voxel-Based Graphics .

L'algoritmo che si desidera è quello solido, ed è leggermente più semplice in quanto si sta voxelizing un poliedro convesso le cui facce sono triangoli -. Ogni esecuzione "voxel" è delimitata da due triangoli

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top