Слои нескольких изображений в 3D-пространстве - PullRequest
9 голосов
/ 07 октября 2011

Предположим, у нас есть матрица I размером 49x49x5, соответствующая 5 изображениям размером 49x49, сложенным вдоль третьего измерения, поэтому у нас есть 5 изображений.Эти изображения должны визуализировать плотность газа в трехмерном пространстве, поэтому мы можем думать о каждом изображении как о разрезе комнаты в разных местах.

Есть ли способ создать фигуру в MATLAB, где все5 изображений показаны как висящие в трехмерном пространстве, откуда они "пришли"?

Вот изображение, которое, надеюсь, прояснит то, что я хочу: 5 images haning in 3D space

Ответы [ 3 ]

12 голосов
/ 10 октября 2011

Рассмотрим следующий пример. Он использует низкоуровневую функцию SURFACE для построения сложенных изображений:

%# create stacked images (I am simply repeating the same image 5 times)
img = load('clown');
I = repmat(img.X,[1 1 5]);
cmap = img.map;

%# coordinates
[X,Y] = meshgrid(1:size(I,2), 1:size(I,1));
Z = ones(size(I,1),size(I,2));

%# plot each slice as a texture-mapped surface (stacked along the Z-dimension)
for k=1:size(I,3)
    surface('XData',X-0.5, 'YData',Y-0.5, 'ZData',Z.*k, ...
        'CData',I(:,:,k), 'CDataMapping','direct', ...
        'EdgeColor','none', 'FaceColor','texturemap')
end
colormap(cmap)
view(3), box on, axis tight square
set(gca, 'YDir','reverse', 'ZLim',[0 size(I,3)+1])

Я использую индексированные цветные изображения (с прямым цветовым отображением), но его можно легко изменить, чтобы использовать изображения в оттенках серого (с масштабированным цветовым отображением).

Теперь, если вы хотите упорядочить трехмерное пространство, как показано в вашем вопросе, просто поменяйте местами размеры Y и Z (изображения располагаются вдоль Y-измерения вместо Z-измерения).

В общем, чтобы лучше контролировать угол обзора, используйте функции управления камерой .

screenshot_zstacked_indexed screenshot_ystacked_grayscale

3 голосов
/ 07 октября 2011

Функция, которую вы ищете - это функция patch. В качестве примера:

x=[1 1 6]; y=[2 7 2]; z=[1 1 -1];

Указывает треугольник (три точки), а координаты вершин: (1,2,1), (1,6,1) и (6,2,-1). Если бы вы добавили четвертую точку к каждому вектору, это был бы прямоугольник с новой вершиной в новой координате x, y, z.

Чтобы ответить на ваш опубликованный вопрос напрямую, вы можете нарисовать количество прямоугольников для каждой переменной, просто используя многомерный массив для x, y и z, где в каждом столбце указан отдельный многоугольник. На практике это работает следующим образом:

% plot two rectangles
x = [1 1 1 1;
    1 1 1 1;
    4 4 4 4;
    4 4 4 4;];

y = [1 1 1 1;
    2 2 2 2;
    2 2 2 2;
    1 1 1 1;];

z = [1 2 3 4;
    1 2 3 4;
    1 2 3 4;
    1 2 3 4;];

patch(x,y,z,'w');

Что составляет:

Four stacked rectangles

Существуют параметры, которые можно использовать для добавления цвета к полигонам, проверьте документы.

2 голосов
/ 07 октября 2011

Если я вас правильно понял, вы можете использовать для этого функции slice () или contourslice () .

Проверьте этот пример: http://www.mathworks.com/help/matlab/visualize/techniques-for-visualizing-scalar-volume-data.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...