2012-07-25 78 views
6

我有一個網格,它是3D,它存儲一個數字。3D體素在matlab中的顯示

這是我的網格的例子,如果它是2 * 2 * 2:

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

通常將是如果沒有體素存在有一個數字,我想與顏色或NaN來表示數字0 。我想這樣做是顯示與MATLAB體素網格狀如下圖:

enter image description here

除將vocels應與細胞的數量進行着色。

有沒有人知道如何做到這一點,如果有一個庫或一些自己寫的方式?

回答

5

所以,我發現你可以做這樣的:

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 

這將打印出這樣的灰度體素表示:

enter image description here

現在我只是需要一些幫助越來越顏色工作。

+0

現在從您的其他問題http://stackoverflow.com/questions/11642826/use-matlab-colour-scheme-to-convert-float-to-rgb應用解決方案得到你的顏色 – 2012-07-25 09:50:14

+0

已經完成了,謝謝你的評論。 – 2012-07-25 22:18:30

+0

你能發佈完整的源代碼來重現結果嗎? – mrgloom 2014-12-26 00:30:46

0

下面給出完整的源代碼,以不同的顏色繪製立方體。請記住,要獲得顏色信息,我們必須使用浮點值在< 0,1>之間。因此,輸入音量被歸一化以移動該範圍內的強度值,然後plotcube腳本用於顯示單個立方體。 用於獲取顏色的腳本是@Use matlab colour scheme to convert float to RGB。繪製個人立方體是@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