假设我们有一个尺寸为49x49x5的矩阵I,对应于沿着第三维堆叠的尺寸为49x49的5个图像,因此总共有5个图像。这些图像应该可视化3D空间中的气体密度,因此我们可以将每个图像视为不同位置的房间截面。在三维空间中分层多个图像
有没有什么办法可以在MATLAB中创建一个图形,其中所有5个图像都显示为悬挂在他们“来自”的3D空间中?
这里是一个图像希望使其更清晰,我所追求的:
假设我们有一个尺寸为49x49x5的矩阵I,对应于沿着第三维堆叠的尺寸为49x49的5个图像,因此总共有5个图像。这些图像应该可视化3D空间中的气体密度,因此我们可以将每个图像视为不同位置的房间截面。在三维空间中分层多个图像
有没有什么办法可以在MATLAB中创建一个图形,其中所有5个图像都显示为悬挂在他们“来自”的3D空间中?
这里是一个图像希望使其更清晰,我所追求的:
考虑下面的例子。它采用了低级别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。
我可以问你如何通过加载五个图像吗?如果我有5个不同的gpeg图像,我想把它们挂在3D中,那么这个想法呢? @Amro –
@MuhammadUsmanSaleem在上面的例子中,我只是'重复'相同的图像5次,并将它们堆叠在一起。您可以以相同的方式显然读取不同的图像,只要它们的尺寸完全相同即可。此外,我使用“索引”图像,但您可以将其更改为显示“灰度”(堆叠在第3个暗淡处)或“真彩色”图像(堆叠在第4个暗淡处)。这里是一个RGB图像的例子:http://pastebin.com/T1shKdYF – Amro
感谢您的美丽回复。是的,我知道你只需在matlab中加载图像,然后通过重塑来创建该图像的副本。其实我有3个不同的gpeg图像。这些是高层大气天气聊天,我想表现为3d,其中z轴将在大气中的高度?如何阅读这3张图片后,我在哪里修改了你的爱和美丽的代码?请参阅下面的eykanal原型图。 @Amro我是你的粉丝....我等了很多天,和你聊天。最后你听到我的声音... –
如果我理解正确的话,你可以使用slice()或contourslice()功能做到这一点。
看看这个例子: http://www.mathworks.com/help/matlab/visualize/techniques-for-visualizing-scalar-volume-data.html
Link broken;在该文本上搜索的替代结果。 –
你要找的功能是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');
这使得:
有你可以用它来增添色彩的多边形,检查文档的选项。
那你用它来生成图像? – Jacob
Google Sketchup :) – Vidar