2011-10-07 58 views
9

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

有没有什么办法可以在MATLAB中创建一个图形,其中所有5个图像都显示为悬挂在他们“来自”的3D空间中?

这里是一个图像希望使其更清晰,我所追求的: 5 images haning in 3D space

+0

那你用它来生成图像? – Jacob

+2

Google Sketchup :) – Vidar

回答

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

screenshot_zstacked_indexed screenshot_ystacked_grayscale

+0

我可以问你如何通过加载五个图像吗?如果我有5个不同的gpeg图像,我想把它们挂在3D中,那么这个想法呢? @Amro –

+1

@MuhammadUsmanSaleem在上面的例子中,我只是'重复'相同的图像5次,并将它们堆叠在一起。您可以以相同的方式显然读取不同的图像,只要它们的尺寸完全相同即可。此外,我使用“索引”图像,但您可以将其更改为显示“灰度”(堆叠在第3个暗淡处)或“真彩色”图像(堆叠在第4个暗淡处)。这里是一个RGB图像的例子:http://pastebin.com/T1shKdYF – Amro

+0

感谢您的美丽回复。是的,我知道你只需在matlab中加载图像,然后通过重塑来创建该图像的副本。其实我有3个不同的gpeg图像。这些是高层大气天气聊天,我想表现为3d,其中z轴将在大气中的高度?如何阅读这3张图片后,我在哪里修改了你的爱和美丽的代码?请参阅下面的eykanal原型图。 @Amro我是你的粉丝....我等了很多天,和你聊天。最后你听到我的声音... –

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坐标处。

直接回答你的问题贴,你可以简单地通过使用多维数组xy,并且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'); 

这使得:

Four stacked rectangles

有你可以用它来增添色彩的多边形,检查文档的选项。

+1

也许你误会了(我的形象只是误导)。我想用存储在矩阵中的图像填充这些补丁。这可以用补丁来完成吗?我正在检查slice()现在看起来很有前景。 – Vidar

+1

@Vidar - 实际上,它可以,但我的例子不是你要找的东西。查看[Patch Properties](http://www.mathworks.com/help/techdoc/ref/patch_props.html?)页面,CData部分。 – eykanal

+0

@eykanal你会引导我在上面的阿尔莫答案请 –