在matlab中的3D体素显示

时间:2012-07-25 03:49:09

标签: matlab voxel

我有一个网格,它是3D,它存储一个数字。

以下是我的网格示例,如果它是2 * 2 * 2:

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

如果没有体素,那么数字0通常是我想用颜色或纳米表示的数字。我想做的是用matlab显示体素网格,如下图所示:

enter image description here

除了v​​ocels应该用单元格中的数字着色。

有没有人知道如何做到这一点,如果有一个图书馆或某种方式自己编写它?

2 个答案:

答案 0 :(得分: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

现在我需要一些帮助才能让颜色正常工作。

答案 1 :(得分:0)

下面给出完整的源代码,绘制不同颜色的立方体。请记住,为了获得颜色信息,我们必须将Float值设置为< 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