2012-07-25 26 views
6

Tengo una cuadrícula, es 3D y almacena un número.Pantalla 3D voxel en matlab

Aquí es un ejemplo de mi rejilla si es 2 * 2 * 2:

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

El número 0 se suele ser un número que me gustaría representar con color o nan si no hay voxel existe allí . Lo que me gustaría hacer es mostrar una cuadrícula voxel con MATLAB como en la siguiente imagen:

enter image description here

excepto que el vocels deben ser de color con el número en la celda.

¿Alguien sabe cómo hacer esto, si hay una biblioteca o alguna forma de escribirlo yo mismo?

Respuesta

5

Así que se enteraron que puede hacerlo de esta manera:

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 

Esto imprimirá una representación voxel escala de grises como esto:

enter image description here

Ahora sólo necesito algo de ayuda para el color trabajando

+0

ahora aplicar la solución de usted otra pregunta a http://stackoverflow.com/questions/11642826/use-matlab-colour-scheme-to-convert-float-to-rgb obtén tus colores –

+0

Has hecho, gracias por tu comentario. –

+0

¿Se puede publicar el código fuente completo para reproducir el resultado? – mrgloom

0

El código fuente completo se da a continuación para dibujar cubos en diferentes colores. Recuerde que para obtener la información de color, debemos tener un valor de Float entre < 0,1>. Por lo tanto, el volumen de entrada se normaliza para cambiar los valores de intensidad en este rango y, a continuación, el guión plotcube se utiliza para mostrar cubos individuales. Secuencia de comandos utilizada para obtener el color es @Use matlab colour scheme to convert float to RGB. Trazado de cubos individuales es @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