2011-10-07 15 views
9

ので、我々は5枚の画像の合計が第三の次元に沿って積層されたサイズ49x49の5枚の画像に対応する、我々はサイズ49x49x5の行列Iを有していると仮定する。これらの画像は、3D空間内のガスの密度を可視化する必要があるため、各画像を異なる場所の部屋の断面カットとして考えることができます。3次元空間に複数の画像を重ねる

すべての5枚の画像は、彼らが「から来た」3D空間にぶら下がっように示されているMATLABの図を作成する方法はありますか?ここで

がうまくいけば、私は後にしていますどのようなことが明確になった画像です: 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]) 

Iは、(直接カラーマッピングを用いて)インデックスカラー画像を使用していますが、容易に(スケーリングされたカラーマッピングを用いて)グレースケール画像を使用するように変更することができます。

は今、あなたは、あなたがあなたの質問に示されているように配置された3Dスペースを取得し、単にYとZの寸法(代わりにZ-次元のY次元に沿って積層画像)を交換したい場合。視野角でより多くの制御を持っている一般的に

は、camera manipulation functionsを使用しています。

screenshot_zstacked_indexed screenshot_ystacked_grayscale

+0

私はあなたが1つを読み込んで5枚の画像を作る方法を聞いてもいいですか?私は5つの異なったgpegイメージを持っていて、それらを3dのように掛けたいと思っているのですか? @Amro –

+1

@MuhammadUsmanSaleem上記の例では、同じ画像を5回繰り返して重ねて表示しています。同じサイズのものであれば、同じ方法で異なる画像を読めることは明らかです。また、私は "インデックス"画像を使用していましたが、 "グレースケール"(3番目の淡色に積み重なったもの)または "truecolor"の画像(4番目の淡色に積み重ねられたもの)を表示するように変更することができます。ここでは、RGB画像の例です:http://pastebin.com/T1shKdYF – Amro

+0

美しい返信ありがとう。はい、私はちょうど画像をmatlabでビルドして読み込んだ後、この画像のコピーを再形成することで作成します。実際には私は3つの異なるgpeg画像があります。これらは大気中の天気の高さです。どのようにこれらの3つの画像を読んだ後、私はあなたの愛して美しいコードで修正を行うのですか?以下のeykanalのプロトタイプ画像をご覧ください。 @Amro私はあなたのファンです....私はあなたと話をする日のないから待っていました。最後に私の声が聞こえる... –

3

機能はpatch機能です。例として:これは、三角形(3点)を指定

x=[1 1 6]; y=[2 7 2]; z=[1 1 -1]; 

、及び頂点の座標(1,2,1)(1,6,1)、及び(6,2,-1)あります。各ベクトルに4番目の点を追加すると、新しい頂点が新しい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

あなたは誤解しているかもしれません(そして、私のイメージだけが誤解を招いていました)。私はマトリックスに保存された画像でこれらのパッチを塗りたい。それはパッチでできますか?私はスライス()をチェックしていますが、これは有望そうです。 – Vidar

+1

@Vidar - 実際には可能ですが、私の例はあなたが探しているものではありません。 [パッチのプロパティ]ページ(http://www.mathworks.com/help/techdoc/ref/patch_props.html?)のCDataセクションを確認してください。 – eykanal

+0

@eykanalあなたはArmoの答えを教えてください –

関連する問題