假设我们有一个大小为49x49x5的矩阵I,对应5个大小为49x49的图像沿第三个维度堆叠,因此我们总共有5个图像。这些图像应该可视化3D空间中气体密度,因此我们可以将每个图像视为在不同位置切割房间的截面。
是否有办法在MATLAB中制作一张图,其中显示所有5个图像悬挂在它们“来自”的3D空间中?
以下是一张图片,希望能让我的需求更清晰:
是否有办法在MATLAB中制作一张图,其中显示所有5个图像悬挂在它们“来自”的3D空间中?
以下是一张图片,希望能让我的需求更清晰:
![5 images haning in 3D space](https://istack.dev59.com/cixiY.webp)
考虑下面的例子。它使用低级别的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维)。
通常,要对查看角度进行更多控制,请使用相机操作函数。
I = cat(4,img1,img2,img3)
。同时,在我的例子中,我只是使用索引k
作为Z轴坐标。因此,如果每个图像都有特定的“高度”,请使用它(即用正确的高度替换 'ZData',Z.*k
部分)。如果您需要进一步帮助,最好创建一个新问题,而不是在评论中发布答案。只需确保包括所有必要的信息以及您当前的代码即可。 - Amropatch
函数。举个例子: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');
这意味着:
你可以使用选项为多边形添加颜色,请查看文档。