Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在三维空间中分层多个图像_Image_Matlab_Plot_Visualization - Fatal编程技术网

Image 在三维空间中分层多个图像

Image 在三维空间中分层多个图像,image,matlab,plot,visualization,Image,Matlab,Plot,Visualization,假设我们有一个大小为49x49x5的矩阵I,对应于沿三维堆叠的5个大小为49x49的图像,因此我们总共有5个图像。这些图像应该可以在3D空间中可视化气体的密度,因此我们可以将每个图像看作是房间不同位置的剖面 有没有办法在MATLAB中制作一个图形,将所有5幅图像显示为悬挂在它们“来自”的3D空间中 下面是一张图片,希望能让我更清楚地了解我的目标: 如果我理解正确,您可以使用或函数来执行此操作 看看这个例子: 您要查找的函数就是函数。举例来说: x=[1 1 6]; y=[2 7 2]; z=[1

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

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

下面是一张图片,希望能让我更清楚地了解我的目标:

如果我理解正确,您可以使用或函数来执行此操作

看看这个例子:

您要查找的函数就是函数。举例来说:

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');
这使得:


有一些选项可用于向多边形添加颜色,请查看文档。

考虑以下示例。它使用低级功能打印堆叠图像:

%# 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维度堆叠的图像)

通常,要对视角进行更多控制,请使用


你是用什么来生成这个图像的?也许你误解了(而我的图像本身就是误导性的)。我想用存储在矩阵中的图像填充这些补丁。这可以用补丁来完成吗?我现在正在检查slice(),这似乎很有希望。@Vidar-事实上,它可以,但我的示例并不是您想要的。请查看该页面的CData部分。@eykanal您能为我介绍一下上面的Armo答案吗;在该文本上搜索的替代结果。请问您如何通过加载一个图像来生成五个图像?如果我有5个不同的gpeg图像,我想像3d一样挂起来,这个想法怎么样@Amro@MuhammadUsmanSaleem在上面的示例中,我只是将同一个图像重复5次,并将它们叠在一起。很明显,你可以用同样的方式阅读不同的图像,只要它们大小相同。另外,我使用的是“索引”图像,但您可以将其更改为显示“灰度”(堆叠在第三个dim中)或“真彩色”图像(堆叠在第四个dim中)。这里是一个RGB图像的例子:谢谢你漂亮的回复。是的,我知道您只需在matlab中加载内置图像,然后通过重塑来创建该图像的副本。事实上,我有3个不同的gpeg图像。这些是高层大气天气聊天,我想用3d显示z轴在大气中的高度?在阅读了这3张图片之后,我在哪里修改了你可爱而美丽的代码?请参见下面eykanal的原型图片@我是你的粉丝。。。。我等了好几天想和你谈谈。最后你听到我的声音…@Muhammadusmaalem谢谢。就像我在粘贴箱中展示的那样,将图像堆叠在彼此的顶部。如果你有3张RGB图像,那就是
I=cat(4,img1,img2,img3)
。同样在我的例子中,我只是使用索引
k
作为Z轴坐标。因此,如果您对每个图像都有一个特定的“仰角”,请改用它(即用正确的仰角替换
'ZData',Z.*k
零件)。如果您需要进一步的帮助,最好创建一个新问题,在评论中发布答案并不方便。一定要包括所有必要的信息以及你的当前代码。我会发布新的问题,但在发布之前我想知道一些事情。我的.jpg图像代表高层大气聊天,我有三个这样的聊天,分别是距离地面100米、200米和300米高度的大气聊天。我的天气聊天包括三个气候变量,彩色地图上显示的温度,在这张热图上,海拔等高线代表高度变量,还有一个quver图显示了这个高度的风速和风向。现在我想把它们堆在3d空间中,就像下面eykanal的原型图像一样。告诉我,在聊天时制作这些切片是否最好??