2012-07-25 12 views
6

Mam siatkę, to jest 3D i przechowuje liczbę.Wyświetlanie 3D wokseli w matlab

Oto przykład z mojej sieci, jeśli jest 2 * 2 * 2:

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

numer 0 zazwyczaj będzie to numer, który chciałbym reprezentować kolorem lub nan jeśli nie woksel istnieje . Co chciałbym zrobić, to wyświetlić siatkę woksela z Matlab jak na poniższym rysunku:

enter image description here

wyjątkiem tego, że vocels powinny być zabarwiona numer w komórce.

Czy ktoś wie, jak to zrobić, jeśli istnieje biblioteka lub sposób jej napisania?

Odpowiedz

5

Tak więc okazało się, można to zrobić tak:

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 

To wydrukować skali szarości woksela reprezentacji takiego:

enter image description here

teraz po prostu potrzebuje pomocy z dostaniem kolor działa.

+0

zastosować teraz rozwiązanie od Ciebie inne pytanie http://stackoverflow.com/questions/11642826/use-matlab-colour-scheme-to-convert-float-to-rgb do poznaj kolory –

+0

Zrobiłem, dziękuję za komentarz. –

+0

Czy możesz umieścić pełny kod źródłowy, aby odtworzyć wynik? – mrgloom

0

Kompletny kod źródłowy podano poniżej wykreślając kostki w różnych kolorach. Pamiętaj, że aby uzyskać informacje o kolorach, musimy mieć wartość Float między < 0,1>. Zatem objętość wejściowa jest znormalizowana do wartości intensywności przesunięcia w tym zakresie, a następnie skrypt plotkowy służy do wyświetlania pojedynczych kostek. Skrypt Stosowany do uzyskania koloru to @Use matlab colour scheme to convert float to RGB. Wykreślanie poszczególnych kostek jest @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 
Powiązane problemy