2011-10-07 66 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你會引導我在上面的阿爾莫答案請 –