2012-07-25 10 views
6

Ho una griglia, è 3D e memorizza un numero.3D voxel Display in MATLAB

Ecco un esempio della mia rete se si tratta di 2 * 2 * 2:

(:, :, 1) -> [0, 0; 
       0, 0] 
(:, :, 2) -> [0, 0; 
       0, 0] 

Il numero 0 sarebbe di solito è un numero che vorrei rappresentare con il colore o nan se non voxel esiste lì . Quello che vorrei fare è visualizzare una griglia voxel con MATLAB come nell'immagine seguente:

enter image description here

Se non fosse che i vocels dovrebbero essere colorato con il numero nella cella.

Qualcuno sa come farlo, se c'è una libreria o un modo per scriverlo da solo?

risposta

5

Così ho scoperto che si può fare in questo modo:

for x = 1:GridSize(1) 
    for y = 1:GridSize(2) 
     for z = 1:GridSize(3) 

      if (~isnan(VoxelGrid(x, y, z))) 

       cubeLength = VoxelGrid.resolution; 

       plotcube( [cubeLength cubeLength cubeLength], ... 
          [x, y, z], ... 
          0.9, ... 
          [colour, colour, colour]) 
      end 
     end 
    end 
end 

Questo stamperà una rappresentazione voxel scala di grigi come questo:

enter image description here

Ora ho solo bisogno di qualche aiuto per il colore funziona.

+0

ora applicare la soluzione da voi altra domanda http://stackoverflow.com/questions/11642826/use-matlab-colour-scheme-to-convert-float-to-rgb a prendi i tuoi colori –

+0

Hai finito, grazie per il tuo commento. –

+0

Puoi pubblicare il codice sorgente completo per riprodurre il risultato? – mrgloom

0

Il codice sorgente completo viene fornito sotto il tracciamento dei cubi in diversi colori. Ricorda che per ottenere le informazioni sul colore, dobbiamo avere un valore Float tra < 0,1>. Quindi il volume di input è normalizzato per spostare i valori di intensità in questo intervallo e quindi lo script plotcube viene utilizzato per visualizzare i singoli cubi. Script Utilizzato per ottenere il colore è @Use matlab colour scheme to convert float to RGB. Tracciare singoli cubi è @http://www.mathworks.com/matlabcentral/fileexchange/15161-plotcube

%PLOTCUBE(EDGES,ORIGIN,ALPHA,COLOR) 

VoxelGrid(:,:,1)=[5 3;8 1]; 
VoxelGrid(:,:,2)=[9 2;7 1]; 

%VoxelGrid=round(20*rand(8,8,8)); %Uncomment this line to display dense volume 

GridSize=size(VoxelGrid); 
for x = 1:GridSize(1) 
    for y = 1:GridSize(2) 
     for z = 1:GridSize(3) 
      if (~isnan(VoxelGrid(x, y, z))) 
       cubeLength = 1; 
       f = VoxelGrid(x,y,z)/max(max(max(VoxelGrid))); 
       cm = colormap; % returns the current color map 
       colorID = max(1, sum(f > [0:1/length(cm(:,1)):1])); 
       colour = cm(colorID, :); % returns your color 
       plotcube([cubeLength cubeLength cubeLength],[x, y, z],0.9,[colour]); 
      end 
     end 
    end 
end