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