在3D空间中分层多个图像

问题描述 投票:9回答:3

假设我们有一个大小为49x49x5的矩阵I,对应于沿着第三维堆叠的5个大小为49x49的图像,因此我们总共有5个图像。这些图像应该可视化3D空间中的气体密度,因此我们可以将每个图像视为不同位置的房间的剖面。

有没有办法在MATLAB中制作一个图形,其中所有5个图像都显示为悬挂在它们“来自”的3D空间中?

这是一张希望让我更清楚自己所追求的图像:

image matlab plot visualization
3个回答
12
投票

请考虑以下示例。它使用低级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])

我正在使用索引彩色图像(使用直接颜色映射),但可以轻松更改为使用灰度图像(使用缩放颜色映射)。

现在,如果您想要像在问题中显示的那样排列3D空间,只需交换Y和Z尺寸(沿Y维而不是Z维堆叠的图像)。

通常,要更好地控制视角,请使用camera manipulation functions


3
投票

您正在寻找的功能是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坐标。

要直接回答您发布的问题,只需使用xyz的多维数组,即可为每个变量绘制多个矩形,其中每列指定不同的多边形。在实践中,这工作如下:

% 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');

这使得:

您可以使用选项为多边形添加颜色,请检查文档。


2
投票

如果我理解正确,您可以使用slice()contourslice()函数来执行此操作。

看看这个例子:http://www.mathworks.com/help/matlab/visualize/techniques-for-visualizing-scalar-volume-data.html

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.