3D дисплей вокселя в Matlab

У меня есть сетка, это 3D, и он хранит число.

Вот пример моей сетки, если она 2*2*2:

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

Число 0 обычно будет числом, которое я хотел бы представить цветом или нан, если вокселя там не существует. То, что я хотел бы сделать, это отобразить воксельную сетку с помощью Matlab, как показано на следующем рисунке:

За исключением того, что голоса должны быть окрашены номером в ячейке.

Кто-нибудь знает, как это сделать, если есть библиотека или какой-то способ написать это сам?

2 ответа

Решение

Итак, я узнал, что вы можете сделать это так:

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

Это распечатает воксельное представление в серой шкале так:

Теперь мне просто нужна помощь, чтобы заставить работать цвет.

Полный исходный код приведен ниже при построении кубов разными цветами. Помните, что для получения информации о цвете мы должны иметь значение Float между <0,1>. Таким образом, входной объем нормализуется для сдвига значений интенсивности в этом диапазоне, а затем сценарий plotcube используется для отображения отдельных кубов. Скрипт Используется для получения цвета @ Используйте цветовую схему matlab для преобразования float в 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
Другие вопросы по тегам