假设我们有一个大小为49x49x5的矩阵i,对应于沿第三维堆叠的5个大小为49x49的图像,因此我们总共有5个图像。这些图像应该可以可视化气体在3D空间中的密度,因此我们可以将每个图像看作是房间在不同位置的截面切割。
有没有办法在MATLAB中制作一个图形,其中所有5个图像都显示为悬挂在它们“来自”的3D空间中?
这是一张图片,希望能让我更清楚地知道我想要什么:

发布于 2011-10-10 22:29:43
考虑下面的例子。它使用低级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。


发布于 2011-10-08 00:00:31
您要查找的函数是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');这使得:

有一些选项可以用来为多边形添加颜色,请查看文档。
发布于 2011-10-08 00:00:00
如果我理解正确的话,您可以使用slice()或contourslice()函数来完成此操作。
看看这个例子:http://www.mathworks.com/help/matlab/visualize/techniques-for-visualizing-scalar-volume-data.html
https://stackoverflow.com/questions/7689586
复制相似问题